最简单地用 Nginx + uwsgi 部署 Flask 应用

Flask是目前很流行的一套 Python Web 框架,用它开发网站非常很快,这里记录一下用 Nginx + uwsgi 快速部署 Flask 应用的方法。

Flask 框架自带一个测试用的服务器,比如一个最简单的 Flask 应用是这样的:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

这是来自官方文档的 Hello World 应用,把它保存为 hello.py ,如果你的环境没问题的话,只需要这样:

$ python hello.py
 * Running on http://127.0.0.1:5000/

你的Python应用就可以通过访问 http://127.0.0.1:5000/ 来访问你的网站了,权限不够的话请用 sudo python hello.py 命令。
然而如果这是你把网站部署在云服务器上,你用自己的电脑访问 http://vps_ip:5000 发现并不能成功访问。
这时候你只需要 app.run() 改成 app.run(host='0.0.0.0', port=80) ,然后还是执行 python hello.py ,如果你的80端口没被占用,并且权限足够的话,网站就已经成功运行起来了。

然而上述操作只适合在测试环境中使用,正式部署时不应该那么做,废话说完了,这里介绍一个部署方法: Nginx + uwsgi。
首先是 Nginx 和 uwsgi 的安装:

$ sudo apt install nginx
$ sudo apt install uwsgi

不出意外的话,他们已经被成功安装了。

接下来编辑 /etc/nginx/conf/flask.conf ,这个 flask.conf 名字可以改变,只要放在 /etc/nginx/conf 目录下即可,文件内容为:

server {
    listen 80;
    server_name localhost;

    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8080;
    }
}

然后重启 Nginx :

$ sudo service nginx restart

然后来到工程目录下( hello.py 所在目录 ),用 uwsgi 运行 web 应用:

$ sudo uwsgi -s :8080 -w hello:app

其中 hello 这个名字是根据 hello.py 来的,如果你的 Python 文件名叫 web.py ,就把 hello 改成 web 就行了,大家可以想一下 app 这个名字是哪来的呢?
这样就部署完成了,是不是很简单...

标签: python

添加新评论