likes
comments
collection
share

Python使用uwsgi部署Flask应用

作者站长头像
站长
· 阅读数 12

前言

众所周知,flask应用写好了之后可以直接跑。但是,but,有一个非常重要且不可忽视,一旦忽视就会出现十分严重后果的问题,那么,到底是什么问题呢。

虽然确实flask app可以不通过代理而直接使用app.run(host="0.0.0.0")直接在生产环境运行。但是不知道小伙伴们是否注意到,在通过该方法运行之后日志终端会输出一条warning警告,告诉我们不建议通过该方法直接在生产环境部署应用。这是因为app.run方法是使用flask内置的wsgi服务器进行程序运行的,该服务器不适用于生产 ,也不能很好的进行扩展。那么,该如何正确的将自己的应用部署在生产环境上呢?这里我将推荐大家使用uwsgi+nginx进行部署。

准备工作

下载uwsgi

pip install uwsgi

准备好自己的应用

这里我以一个最小化可行性flask应用为例,当请求首页时,会返回‘hello, world!’字样

# app.py
from flask import Flask

app = Flask(__name__="__main__")

@app.route("/")
def index():
    return 'hello, world!'

app.run()

正式部署

uwsgi可通过命令行命令直接部署,但如果配置项较多的情况下,也可通过配置文件进行部署。

命令行直接部署

uwsgi --http :8000 --wsgi-file app.py --callable app

最简化部署只需要3个参数,http参数配置flask应用要运行的地址<ip>:<port>,wsgi-file参数配置flask应用(Flask对象)所在的文件,即上文代码所在的文件,callable参数配置Flask对象的名称,在上文中的代码即为app。 运行上述命令后,即可在8000端口访问到我们的应用。

通过配置文件部署

配置文件其实也只不过是把配置参数放到文件中去而已

# uwsgi.ini
[uwsgi]
http = 127.0.0.1:5000
wsgi-file =  app.py
callable = app

准备好配置文件后,命令行运行uwsgi --ini uwsgi.ini即可

结语

重启uwsgi

uwsgi --reload uwsgi.pid

停止uwsgi

uwsgi --stop uwsgi.pid

更多配置参数

uwsgi-docs-zh.readthedocs.io/zh_CN/lates…

结语中的结语

flask应用除了可以用uwsgi直接部署外,一般还会加个nginx搞个代理配置,这个就下一回说吧。