部署选型
前端使用nginx,中间使用Gunicorn,后端当然是flask了
优点
好处 一句话,配置简单,性能不错,进一步解释如下:
内容来自知乎https://www.zhihu.com/question/38528616
- 负载均衡。多进程部署需要反向负载均衡。gunicorn本身就是多进程其实不需要静态文件支持,
- 经过配置之后,nginx可以直接处理静态文件请求而不用经过Python服务器,Python服务器也可以返回特殊的http头将请求rewrite到静态文件。我说的是经过配置之后
- 抗并发压力。虽然不能提升qps,但是多一层前端,的确可以吸收一些瞬时的并发请求,让nginx先保持住连接,然后后端慢慢消化,但说实话这种情况下服务体验已经很糟糕了。但的确比服务挂掉强一些。
- rewrite之类的其他功能。配置了才有,配了吗?
- 怕gunicorn的http解析有bug。这个姑且算有点道理,不过加一层负载均衡不一定能解决问题。
配置,
内容来自(http://www.cnblogs.com/Ray-liang/p/4837850.html)
- 安装 Gunicorn
Gunicorn 应该装在你的 virtualenv 环境下,关于 virtualenv 就不多说了,如果没用过那就赶快脑补吧。安装前记得激活 venv
(venv) $ pip install gunicorn
- 运行 Gunicorn
(venv) $ gunicorn -w 4 -b 127.0.0.1:8080 df20:j20
注意df20:j20这个阐述,df20表示的是引导用的 python 文件名称(不包括后缀/模块名)
j20 就是 Flask 实例的名称,对应文件描述如下
```
# df20.py
from flask import Flask
def create_app():
app = Flask(__name__)
return app
j20= create_app()
if __name__ == '__main__':
j20.run()
```
- Nginx 的配置
修改 Nginx 的默认配置文件,修改前请备份
server {
listen 80;
server_name example.org; # 这是HOST机器的外部域名,用地址也行
location / {
proxy_pass http://127.0.0.1:8080; # 这里是指向 gunicorn host 的服务地址
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}