一、引入
本文根据个人对于Flask项目的部署经历,详细描述了Flask项目的部署步骤,主要采用Nginx+Supervisor+Uwsgi的部署方式。仅供参考。
二、项目准备
准备好自己的项目代码,放至服务器指定目录,如:/data/project/okr/leadevo
三、配置uwsgi
在服务器指定位置新建uwsgi.ini文件,如下所示:
1 [uwsgi] 2 #配合nginx使用 3 socket = 127.0.0.1:5005 4 #项目路径 /自己项目路径 5 chdir = /data/project/okr/leadevo.okr 6 #wsgi文件 run就是flask启动文件去掉后缀名 app是run.py里面的Flask对象 7 module = manage:app 8 #指定工作进程 9 processes = 1 10 #主进程 11 master = true 12 #每个工作进程有2个线程 13 threads = 2 14 #指的后台启动 日志输出的地方,如果配合supervisor使用,该行需要注释 15 #daemonize =/data/project/okr/uwsgi.log 16 #保存主进程的进程号 17 pidfile = /data/project/okr/uwsgi.pid
四、配置supervisor
这里直接说如何新增supervisor的配置文件,至于supervisor相关的操作,请自行查阅相关文档。
在服务器的/etc/supervisor/conf.d目录下新增supervisor的配置文件:okr.ini,详细配置如下所示:
1 [program:okr_uwsgi] 2 command= /root/okr/bin/uwsgi /data/project/okr/uwsgi.ini 3 numprocs=1 ; 启动1个进程 4 directory=/data/project/okr/leadevo.okr ; 执行前先cd到目录去 5 priority=999 ; the relative start priority (default 999) 6 autostart=true ; start at supervisord start (default: true) 7 autorestart=true ; retstart at unexpected quit (default: true) 8 stopasgroup=true ; send stop signal to the UNIX process group (default false) 9 killasgroup=true ; SIGKILL the UNIX process group (def false) 10 startsecs=10 ; number of secs prog must stay running (def. 10) 11 startretries=10 ; max # of serial start failures (default 3) 12 exitcodes=0,2 ; 'expected' exit codes for process (default 0,2) 13 stopsignal=QUIT ; signal used to kill proce conftopwaitsecs=10 ; max num secs to wait before SIGKILL (default 10) 14 user=root ; setuid to this UNIX account to run the program 15 log_stdout=true ; if true, log program stdout (default true) 16 log_stderr=true ; if true, log program stderr (def false) 17 redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false 18 stdout_logfile=/data/project/okr/logs/uwsgi.log ; child log path, use NONE for none; default AUTO 19 logfile_maxbytes=10MB ; max # logfile bytes b4 rotation (default 50MB) 20 logfile_backups=10 ; # of logfile backups (default 10) 21 environment= 22 MODE="TESTING", 23 FLASK_ENV="development" 24 25 [program:okr_celery] 26 command=celery -A tasks.celery_app worker --loglevel=info 27 directory=/data/project/okr/leadevo.okr 28 environment=PATH="/root/okr/bin" 29 user=root 30 autostart=true 31 autorestart=true 32 stdout_logfile=/data/project/okr/logs/uwsgi_supervisor.log 33 stderr_logfile=/data/project/okr/logs/uwsgi_supervisor_err.log 34 #startsecs=10 35 #stopwaitsecs=20 36 37 38 [group:okr] 39 programs=okr_uwsgi,okr_celery
配置好了之后,需要将该配置文件更新到supervisor的进程中:
执行命令:supervisorctl update
成功之后,启动相应的supervisor进程,supervisorctl start okr:*,
重启supervisor指定进程:supervisorctl restart okr:*
启动之后。执行命令supervisorctl,可在控制台看到所有的进程启动情况,如下图所示:
四、配置Nginx
在服务器nginx的配置文件夹(一般为:/etc/nginx/conf.d)下面新增配置文件:okr.conf
1 server { 2 listen 80; 3 server_name okr.zhangtao1994.com; 4 access_log /var/log/nginx/okr_access.log main; 5 location / { 6 include uwsgi_params; 7 uwsgi_pass 127.0.0.1:5005; 8 proxy_read_timeout 150; 9 client_max_body_size 20M; 10 } 11 }
配置之后重启nginx,执行命令:nginx -s reload
重启之后查看端口情况,执行命令:netstat -anpl|grep 5005,如下图所示则表示项目启动成功,之后域名解析之后就可用通过域名访问Flask项目了。
五、总结
此博客为项目部署成功之后凭记忆编写,缺少相关细节的部分。但是本人项目目前正常运行,如有疑问,可以留言交流。