本文最后更新于11 天前,其中的信息可能已经过时,如有错误请发送邮件到1013059780@qq.com
要将Flask部署到公网,我们可以采用一下的形式
Nginx --> uWSGI --> Flask
其中uWSGI用于执行Flask代码,这一套是一套比较经典的Flask配置,也是官方推荐的配置之一。
安装配置uWSGI
我们先来看看如何安装uWSGI,同样还是以Debian为例
如何安装uWSGI
安装依赖包
sudo apt update && sudo apt upgrade && sudo apt install build-essential python-dev
安装uWSGI
sudo apt install uwsgi
配置uWSGI
在本地新建一个app.ini文件,在其中填入以下内容
[uwsgi]
module = app:app
# 上面一行要视你的代码而定
# 比如你是在main.py中初始化了Flask的app,变量名是flask
# 那这里就要写main:flask
# 所以其规则是 文件名:APP变量名
base = /path/to/your/source/code
# 这里写你的源码在服务器上的哪里
chdir = /path/to/your/work/path
# 这里写你的程序的运行目录
master = true
processes = 5
virtualenv = /path/to/your/python/venv
# 以上是你的虚拟环境位置,如果使用系统环境可以删去
# plugins-dir = /usr/lib/uwsgi/plugins
plugins = python3
pidfile=/dev/shm/uwsgi.pid
#protocol = uwsgi
#socket = 0.0.0.0:5000
socket = /dev/shm/app.sock
logto = /path/to/your/logfile
#日志存放位置
chmod-socket = 777
vacuum = true
# threads = 4
# enable-threads = true
将上述文件上传到服务器上,一个你能记得住的位置。
运行uWSGI
在/etc/systemd/system
中新建一个文件,用以下代码打开:
sudo vim /etc/systemd/system/my-flask.service
将输入法切换到英文状态下,按i
进入输入模式,粘贴(大概率不是Ctrl-C
,推荐直接用鼠标)以下内容:
[Unit]
Description=My Flask uWSGI Service
[Service]
PIDFile=/dev/shm/uwsgi.pid
ExecStart=/usr/bin/uwsgi --ini # 上述配置文件的位置
KillSignal=SIGQUIT
Restart=always
Type=notify
NotifyAccess=all
StandardError=syslog
[Install]
WantedBy=multi-user.target
接下来的内容比较重要,按顺序执行,确保输入法在英文状态下:
按ESC(退出输入模式),按冒号,按x,按回车
这样我们就保存并退出了这个文件
执行以下命令以启动uWSGI,并设置开机启动
sudo systemctl enable my-flask --now
不出意外的话,uWSGI已经成功启动了
配置Nginx
我们已经实现了 uWSGI --> Flask
的部分,接下来是Nginx --> uWSGI
打开Nginx配置目录中的一个配置文件:
sudo vim /etc/nginx/site-enabled/my-flask.conf
填入以下内容
server
{
listen 80 default_server;
index index.html index.htm default.php default.htm default.html;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
location / {
include uwsgi_params;
uwsgi_pass unix:/dev/shm/app.sock;
}
}
退出该文件后,执行以下命令重启Nginx
sudo systemctl restart nginx
然后理论上,就能在80端口看到我们的服务啦!