阿里云:nginx+uwsgi+supervisor+flask部署in Ubuntu
(1)查看阿里云服务器环境
LSB Version: core-9.20160110ubuntu0.2-amd64:core-9.20160110ubuntu0.2-noarch:security-9.20160110ubuntu0.2-amd64:security-9.20160110ubuntu0.2-noarch
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
(2)快速安装相应的包
(3)程序代码复制到服务器并确保确实能运行
(4)测试你nginx安装好没有并且修改配置文件
# include /etc/nginx/conf.d/*.conf;
# include /etc/nginx/sites-enabled/*;
然后编辑nginx 配置文件,将server配置到http中,注意我这里用到了uwsgi配置文件的sock名字
server { listen 80; server_name localhost; client_max_body_size 2m; location /static { root /data/www/helloworld; } location / { try_files $uri @hello; } location @hello { include uwsgi_params; uwsgi_pass unix:/tmp/hello.sock; } }
nginx -t 测试配置文件有无语法错误
(5)在项目根目录下新建uwsgi配置文件
在/data/www/helloworld目录内,即和app.py平级目录创建hello_uwsgi.ini文件
vi hello_uwsgi.ini
[uwsgi] socket = /tmp/hello.sock chdir = /data/www/helloworld wsgi-file = /data/www/helloworld/app.py callable=application touch-reload=/data/www/helloworld logto = /var/log/uwsgi/helloworld.log enable-threads = true buffer-size = 32768 processes = 4 threads = 2 pidfile = /tmp/uwsgi.pid vacuum = true log-maxsize = 50000000 python-autoreload=1 listen = 1024 lazy-apps
(6)配置supervisor
cd /etc/supervisor/conf.d
vi hello.conf
[program:hello] command = /usr/local/bin/uwsgi --ini /data/www/helloworld/hello_uwsgi.ini autostart=true autorestart=true stdout_logfile=/var/log/uwsgi/super_hello.log stderr_logfile=/var/log/uwsgi/super_hello_err.log
(7)整体运行流程
以上过程完成了flask代码上传,nginx,uwsgi,supervisor的配置文件的修改,接下来整体运行流程
1.测试程序是否正常。flask run首先确定你的程序在Linux跑正常,运行正常就关掉
2.启动uwsgi。
启动uwsgi的http方式:uwsgi --http :5000 --wsgi-file app.py --master --processes 4 --threads 2 可以直接使用uwsgi+flask,不使用nginx简单部署。
执行它后,uWSGI将启动4个应用进程,每个进程有2个线程,和一个master主进程用于监控其他进程状态,如果有进程死了,则重启。
我们使用了nginx,所以要用sock方式启动。
启动uwsgi的sock方式有两种,但ctrl+c或者ssh退出,uwsgi进程就终止,.sock文件就会消失,这时访问网站 Nginx 就会报错502,所以使用supervisor。
(1) /usr/local/bin/uwsgi --ini /data/www/helloworld/hello_uwsgi.ini
(2) uwsgi -s /tmp/probase.sock --manage-script-name --mount /=app:application
uwsgi 启动以后,ps aux | grep uwsgi 查看是否确实已经启动
3.启动supervisor。
确保uwsgi已经启动。
cd /etc/supervisor 然后:supervisord
supervisord 就已经开始守护uwsgi进程,此时ctrl+c或者ssh,uwsgi的进程也是存在的。
(1)对于整个supervisor服务:
cd /etc/supervisor
重新 read 配置文件: supervisorctl reread
重启服务: supervisorctl reload
关闭服务: supervisorctl shutdown
更新服务:supervisorctl update
(2)对于我们单个flask程序:
cd /etc/supervisor
查看hello的状态:supervisorctl status
启动hello守护uwsgi进程:supervisorctl start hello
关闭hello守护uwsgi进程:supervisorctl stop hello
4.启动nginx。
启动:nginx 或者/etc/init.d/nginx start
或者已经启动的话根据配置文件重新加载:nginx -s reload 。
停止:/etc/init.d/nginx stop
5.打开你浏览器访问阿里云IP地址。
正常就可看到helloworld。
一般网关错误502就是uwsgi没起来。
(8)程序更新
(9) 错误以及排错日志
有时候排错都没有报错,但是uwsgi或者supervisor起不来的时候,重启阿里云服务器就突然好了。
nginx日志以及错误日志:
cd /var/log/nginx; cat access.log; cat error.log;
uwsgi日志以及错误日志:
cd /var/log/uwsgi; cat xxx.log; cat xxx_error.log;
supervisor日志以及错误日志:
cd /var/log/supervisor; cat supervisor.log; cat supervisor_error.log;