python web部署
常见的python web部署是gunicorn+nginx, 最好再加一个supervisor守护进程
架构:
nginx(反向代理)-> gunicorn(with gevent)-> flask server -> supervisor
nginx 只使用反向代理功能,不再作负载均衡(多线程)。负载均衡在 gunicorn 侧实现,采用轮询方式。
如图所示

gunicorn
gunicorn和uwsgi都是两种常见的wsgi服务器, 由于uwsgi安装困难, 所以项目实践采用gunicorn
使用前景
- 运行
python wsgi.py脚本,即可 web 访问,但无法并发访问,如果需要多线程开启 web 服务,实现并发访问,则需要额外一个工具进行封装,如gunicorn - 它全名叫Green Unicorn,是一个被广泛使用的高性能的Python WSGI Unix HTTP服务器。
- Gunicorn 是python中的WSGI容器,优点就是配置简单,轻量级的资源消耗,以及高性能。
安装
1 | pip install gunicorn |
启动
在flask的项目的目录下启动
方式一: 命令行
1 | # 第一个app指的是app.py文件,第二个指的是flask应用的名字; |
gunicorn的参数详解
1 | -c CONFIG : CONFIG,配置文件的路径,通过配置文件启动;生产环境使用; |
方式二: 以配置文件的方式启动(推荐)
配置文件
1 | # gunicorn.py |
启动gunicorngunicorn -c gunicorn.py app:app
注意: 如果将gunicorn交给supervisor守护进程时, 需将daemon = 'false', 而不是true, 要不然会报错
nginx
处理外部请求, 并反向代理
当外部请求为:
- 普通请求 -> 8001端口
- /static/ -> /myproject/static
配置文件
采用最简单的反向代理到gunicorn服务器
1 | # 其他块省略没写 |
supervisor
使用前景:
- gunicorn无法重启,关闭进程麻烦,因此还需要一个程序(如supervisor)来管理gunicorn,以达到自动化
- 而supervisor是一个专门用来管理进程的工具,还可以管理系统的工具进程,甚至可设置web页面管理相关进程;
准备
安装
pip install supervisor安装后测试是否成功echo_supervisord_conf建立配置文件
创建目录并赋予权限1
2
3
4
5mkdir -m 755 -p /etc/supervisor/
cd /etc/supervisor/
mkdir -m 755 conf.d
// 将默认配置文件复制到新文件夹,之后指定新文件夹中的配置文件启动supervisor(方便管理和修改)
echo_supervisord_conf > /etc/supervisor/supervisord.conf在conf.d 文件夹中创建配置文件如app.ini
1
2
3
4
5[program:wsgi] ;
directory=/root/book/book-flask ;
command=gunicorn -c gunicorn.py app:app ;
stdout_logfile=/root/wsgi_log/wsgi.log
stderr_logfile=/root/wsgi_log/wsgi.err- directory: 脚本目录
- command: 脚本执行命令
- stdout_logfile: log日志
- stderr_logfile: error日志
注: 配置文件主打简洁干净, 尽量不要写备注, 每个冒号前要有空格, 要不然会报错
添加配置文件到主配置文件
打开/etc/supervisor/supervisord.conf 文件,到最后一行可以看到
1
2;[include]
;files = /relative/dictory/*.ini删除分号即可
启动
- 首先启动supervisord
1 | supervisord -c /etc/supervisor/supervisord.conf |
- 再启动我们的应用:
1 | sudo supervisorctl start wsgi |
常用命令
关闭supervisor 命令
1
supervisorctl shutdown
关闭程序
1
supervisorctl stop program_name
至此 supervisor + gunicorn + nginx + flask 服务启动介绍完毕,
- flask 提供接口服务;
- gunicorn启动flask服务,可进行多进程访问;
- nginx监听请求反向代理;
- supervisor管理程序,对程序进行启动、重启、关闭的操作简单化,程序异常关闭,还能自动重启;