CentOS7中配置基于Nginx+Supervisor+Gunicorn的Flask项目

配置Nginx

1、安装nginx

yum install nginx  

2、安装好后在/etc/nginx/default.d中添加location的配置,并指向8001端口,以后Gunicorn会监听8001端口

location / {
   proxy_pass http://127.0.0.1:8001
}  

3、配置好后重新载入nginx配置

systemctl reload nginx.service  

安装Python

CentOS自带Python2.7,如果使用Python3,需要单独安装

参考博客:http://www.cnblogs.com/python-gm/p/7728325.html  

安装配置Gunicorn

Gunicorn使用pip install gunicorn安装,注意需要在虚拟环境中使用pip安装,这样才对应虚拟环境中的Python版本。

pip3 install gunicorn  

安装配置Supervisor

1、使用yum可以直接安装Supervisor

yum install supervisor

2、安装后,在/etc/supervisord.d中建立配置文件xxx.ini,内容如下

[program:Server]
directory = /home/evescn/server
command = /usr/local/python34/bin/gunicorn manage:app -b 0.0.0.0:8001 -w=4 --worker-class=gevent
#autostart = True
user = evescn  

3、Server是项目名称,注意command中最好都写全路径,以区别系统环境和项目虚拟环境。完成后启动supervisord,使配置生效

supervisord -c /etc/supervisord.conf  

4、常见的gunicorn配置

[program:usercenter]
directory = /home/leon/projects/usercenter ; 程序的启动目录
command = gunicorn -c gunicorn.py wsgi:app  ; 启动命令,可以看出与手动在命令行启动的命令是一样的
autostart = true     ; 在 supervisord 启动的时候也自动启动
startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true   ; 程序异常退出后自动重启
startretries = 3     ; 启动失败自动重试次数,默认是 3
user = leon          ; 用哪个用户启动
redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB  ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20     ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /data/logs/usercenter_stdout.log
 
; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH
; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere  

补充:Supervicor使用

1、启动supervisor

supervisord -c /etc/supervisord.conf  

2、supervisorctl的使用

supervisorctl status       # 查询进程状态
supervisorctl stop node    # 关闭 [program:node] 的进程
supervisorctl start node   # 启动 [program:node] 的进程
supervisorctl restart node # 重启 [program:node] 的进程
supervisorctl stop all     # 关闭所有进程
supervisorctl start all    # 启动所有进程
supervisorctl reload       # 重新读取配置文件,读取有更新(增加)的配置文件,不会启动新添加的程序
supervisorctl update       # 重启配置文件修改过的程序