Flask项目部署(nginx+supervisor+uwsgi)

一、引入

  本文根据个人对于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,可在控制台看到所有的进程启动情况,如下图所示:

Flask项目部署(nginx+supervisor+uwsgi)

 

 

四、配置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项目了。

  Flask项目部署(nginx+supervisor+uwsgi)

 

 

五、总结

  此博客为项目部署成功之后凭记忆编写,缺少相关细节的部分。但是本人项目目前正常运行,如有疑问,可以留言交流。

上一篇:flask 后台标准库


下一篇:关于Python——Python基础教程