Gunicorn+Supervisor+Nginx部署Python Web应用

VPS搬家了,重装一堆服务还有点麻烦,顺便记录一下部署Python Web的过程。

Gunicorn

Gunicorn是Python下支持WSGI的Web服务器,平常用到的Django、Flask这些Web框架也是自带服务器的,由于性能有限一般只在测试环境用,而uWSGI/Gunicorn 都是专门的服务器。

之前用uWSGI配置好麻烦,这次就用Gunicorn。

在Web应用的虚拟环境中安装pip install gunicorn,测试一下是否能启动gunicorn app:app -w 3 -b localhost:5000,能够正常启动便可以了,详细参数见文档,这里只设置了3个工作进程。

Supervisor

Supervisor是Python下的Linux进程管理工具,这样Web应用就可以作为服务自动启动,也方便管理。

安装yum install supervisor,启动服务service supervisord start

添加配置文件vim /etc/supervisor.d/daily.ini

1
2
3
4
5
6
7
[program:daily]
directory=/root/python/daily
command=/root/python/daily/env/bin/gunicorn app:app -w 3 -b localhost:5000
autostart=true
autorestart=true
stderr_logfile=/var/log/daily/daily.err.log
stdout_logfile=/var/log/daily/daily.out.log

加载配置supervisorctl reread

重启服务service supervisord restart

这样就可以了,如果之后修改代码,通过supervisorctl start/restart/stop daily可以轻松控制了。

Nginx

整合到Nginx里面就很简单了,反代127.0.0.1:5000,就可以了,Gunicorn最好绑定在本机地址上或者设置防火墙。

1
2
3
4
5
6
7
8
9
10
11
12
server {
...
...
location /daily {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header SCRIPT_NAME /daily;
proxy_pass http://127.0.0.1:5000;
}

}
0%