项目:机翻文章标题作为slug的一个接口
链接:咕大厨的鸽子汤
填坑了,挖坑于:百度通用翻译API
主要是想学习了解一下flask+uwsgi+nginx真正上线是如何部署的,于是便有了这边篇文章~
原理
flask、django自带的wsgi只是用于开发时方便进行测试,而uwsgi作为专门的web服务器,在性能等方面都比这些框架自带的wsgi更好。
uwsgi
:作为web服务器启动flask项目
nginx
:反向代理uwsgi启动的web服务
环境配置
在虚拟环境中安装flask
- 安装
python3-venv
1
|
sudo apt install python3-venv
|
- 创建虚拟环境
1
|
python3 -m venv /home/ubuntu/venv/flask
|
- 激活虚拟环境
1
|
source /home/ubuntu/venv/flask/bin/activate
|
- 安装flask
- 退出虚拟环境
服务器默认环境中安装uwsgi
不要在虚拟环境中安装,别问我为什么!
配置uwsgi
通过ini
文件的方式对uwsgi进行配置,并将uwsgi
作为服务用systemd
进行管理
uwsgi配置文件
如果不懂建议直接用以下配置,因为有将uwsgi
作为服务用systemd
进行管理,比如设置了daemonize
会导致服务状态为dead
参考:uWSGI 2.0 中文文档
编辑uwsgi
配置文件
1
|
vim /home/ubuntu/flask/uwsgi.ini
|
内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[uwsgi]
# 启动的协议,http用于测试时访问,socket用于nginx反向代理
http=:8000
socket=:8001
# 指定python虚拟环境
home=/home/ubuntu/venv/flask
# 指定flask项目目录
chdir=/home/ubuntu/flask
# 指定flask项目启动文件
wsgi-file=app.py
# 指定flask项目启动文件中用以启动的app的变量名
callable=app
# 主进程,用于管理其他进程,kill此进程会关闭全部进程
master=true
# 同时启动的uwsgi进程数
processes=4
# 启用线程
enable-threads=true
# 每一个进程下的启动的线程数
threads=8
|
将uwsgi
设置为服务用systemd
进行管理
- 编辑
/etc/systemd/system/uwsgi.service
1
|
vim /etc/systemd/system/uwsgi.service
|
1
2
3
4
5
6
7
8
9
10
|
[Unit]
Description=uWSGI flask
After=network.target
[Service]
Restart=on-failure
ExecStart=/usr/local/bin/uwsgi --ini /home/ubuntu/flask/uwsgi.ini
[Install]
WantedBy=multi-user.target
|
- 让
systemd
重载所有配置文件
1
|
systemctl daemon-reload
|
- 启动
uwsgi
,即用uwsgi
启动flask
项目
1
|
systemctl start uwsgi.service
|
- 查看
uwsgi
服务状态,显示 active (running)
就是正常启动了
1
|
systemctl status uwsgi.service
|
停止:systemctl stop uwsgi.service
重启:systemctl restart uwsgi.service
- 将
uwsgi
服务设置为开机自启
1
|
systemctl enable uwsgi.service
|
配置nginx反向代理
在配置文件中添加以下内容:
1
2
3
4
|
location / {
uwsgi_pass 127.0.0.1:8001;
include uwsgi_params;
}
|