[备忘]flask部署问题

部署选型

前端使用nginx,中间使用Gunicorn,后端当然是flask了

优点

好处 一句话,配置简单,性能不错,进一步解释如下:
内容来自知乎https://www.zhihu.com/question/38528616

  1. 负载均衡。多进程部署需要反向负载均衡。gunicorn本身就是多进程其实不需要静态文件支持,
  2. 经过配置之后,nginx可以直接处理静态文件请求而不用经过Python服务器,Python服务器也可以返回特殊的http头将请求rewrite到静态文件。我说的是经过配置之后
  3. 抗并发压力。虽然不能提升qps,但是多一层前端,的确可以吸收一些瞬时的并发请求,让nginx先保持住连接,然后后端慢慢消化,但说实话这种情况下服务体验已经很糟糕了。但的确比服务挂掉强一些。
  4. rewrite之类的其他功能。配置了才有,配了吗?
  5. 怕gunicorn的http解析有bug。这个姑且算有点道理,不过加一层负载均衡不一定能解决问题。

配置,

内容来自(http://www.cnblogs.com/Ray-liang/p/4837850.html)

  1. 安装 Gunicorn
    Gunicorn 应该装在你的 virtualenv 环境下,关于 virtualenv 就不多说了,如果没用过那就赶快脑补吧。安装前记得激活 venv
(venv) $ pip install gunicorn
  1. 运行 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()
```
  1. 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;
    }
  }
    原文作者:明慢慢
    原文地址: https://www.jianshu.com/p/c2808a003db4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞