声明:本文转载自https://www.missshi.cn/api/view/blog/5b1511a213d85b1251000000
,用以参考学习。
在本文中,我们将以实际项目为例,讲解如何使用Flask+uwsgi+Nginx部署Flask正式环境。
在开始正式讲解之前,我们将首先进行环境准备。
sudo apt-get update
sudo apt-get install python-pip python-dev nginx
pip install uwsgi flask
下面,我们以一个简单的单文件Flask项目为例:
假设项目目录为/home/nianshi/flask_project。
编辑/home/nianshi/flask_project/main.py:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello There!
"
if __name__ == "__main__":
app.run(host='0.0.0.0')
编辑/home/nianshi/flask_project/run.py:
from main import app
if __name__ == "__main__":
app.run()
运行 python run.py ,然后本地访问 http://127.0.0.1:5000 将会看到:
当然直接使用python run.py运行服务的方式只适合本地开发。线上运行时要保证更高的性能和稳定性,我们需要使用uwsgi进行部署。
使用uwsgi部署Flask项目只需要换一种命令来启动服务即可:
uwsgi --socket 0.0.0.0:5000 --protocol=http -p 3 -w run:app
#发现上面到动态命令有问题,,,,
我们来对uwsgi的参数进行分别讲解:
1.--socket 0.0.0.0:5000:指定暴露端口号为5000。
2.--protocol=http:说明使用 http 协议,即端口5000可以直接使用HTTP请求进行访问。
3.-p 3表示启动的服务占用3个进程。
4.-w run:app:-w 指明了要启动的模块,run 就是项目启动文件 run.py 去掉扩展名,app 是 run.py 文件中的变量 app,即 Flask 实例。
启动完成后,我们可以在任意网络连通的机器上打开浏览器,并访问如下地址:
http://server_domain_or_IP:5000
可以看到结果同样如下:
至此,我们已经正常使用uwsgi部署了Flask项目。
既然我们已经可以好似用uwsgi来部署Flask项目了,那么我们为什么还要使用Nginx + uwsgi来部署呢?
使用Nginx有如下一些优点:
那么,应该如何将Nginx与uwsgi结合来部署Flask项目呢?
在开始讲解Nginx之前,我们首先讲解如何将复杂的uwsgi命令参数保存在配置文件中,从而每次启动uwsgi时,无需添加繁琐的参数,只需要指定配置文件即可。
编辑/home/nianshi/flask_project/uwsgi.ini:
[uwsgi]
module = run:app
master = true
processes = 3
chdir = /home/nianshi/flask_project
socket = /home/nianshi/flask_project/myproject.sock
socket = 127.0.0.1:8000
logto = /home/nianshi/flask_project/myproject.log
chmod-socket = 660
vacuum = true
其中,文件参数说明如下:
可以看到,此处我们没有添加--protocol=http
对应的配置信息。
即此时我们暴露的端口不能使用HTTP请求直接访问,当时需要经过Nginx进行反向代理。
此时,我们可以执行如下命令来通过配置文件启动uwsgi:
uwsgi --ini /home/nianshi/flask_project/uwsgi.ini
此时,我们已经正常启动了uWsgi服务,但是无法直接访问,需要继续部署Nginx服务。
下面,我们来编辑Nginx的配置文件/home/nianshi/flask_project/nginx.conf:
worker_processes 4;
events { worker_connections 1024; }
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}
}
}
其中,如下两行指定反向代理的信息:
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
两个分别指明了代理的解析方式是通过uwsgi解析以及uWsgi暴露的端口地址为127.0.0.1:8000。
下面,我们启动Nginx服务:
nginx -c /home/nianshi/flask_project/nginx.conf