使用 uWSGI 和 Nginx 部署 Flask 应用

Step 0: 准备工作

  • 安装并配置 Nginx,可以参考这篇教程
  • 在 DNS 配置里加入一条 A 记录,将你的域名指向你的 IP,适用于子域名配置;

Step 1: 安装 Pip 包管理器

Setp 2: 创建 Python 虚拟环境

Python 虚拟环境有助于将不同的应用之间的 python 环境隔离;用于创建和管理虚拟环境的模块为 venv

创建项目目录并为其创建虚拟化环境

激活上面创建的虚拟化环境

Step 3: 创建 Flask 应用

安装 wheel 包,以支持 wheel(.whl) 打包格式

然后,再安装 Flask 和 uWSGI

创建 Flask Demo 应用

测试新创建的 Flask 应用

通过浏览器访问 http://server-domain-or-ip:5000 将会看到页面

Flask sample app

在控制台 CTRL-C 可以结束上面的 Server

创建 WSGI 网关

Step 4: 配置 uWSGI

直接使用 python app.py 运行服务的方式只适合本地开发,线上运行时要保证更高的性能和稳定性,需要使用 uwsgi 进行部署。

使用 uwsgi 部署 Flask 只需要换一种命令来启动服务即可

  • –socket 0.0.0.0:5000:指定暴露端口号为 5000
  • –protocol=http:使用 http 协议
  • -w wsgi:app:-w 指明了要启动的模块,wsgi 就是项目启动文件 wsgi.py 去掉扩展名,app 是 wsgi.py 文件中的变量 app,即 Flask 实例

启动完成后,在任意网络连通的机器上打开浏览器,并访问 http://server-domain-or-ip:5000 将再次看到同样结果

Flask sample app

关掉控制台,并退出虚拟环境

创建 uWSGI配置文件

Step 5: 创建 Systemd Service 配置文件

启动上面 uWSGI 服务,并让其开机自动启动

Step 6: 配置 Nginx,反向代理 uWSGI 请求

新创建一个 nginx server 配置项,通过 uwsgi_pass 将请求传递给我们在 app.ini 中配置文件指定创建的 socket

要启用该 server 配置,只要需要将其符号连接到 sites-enabled 目录:

检查新加的 nginx 配置文件是否有语法错误

重启 nginx 服务项

重启完成后,由于 Nginx 本身监听的端口是 80 端口,因此我们可以直接访问域名或者机器 IP 进行访问。

Flask sample app

参考文章

How To Serve Flask Applications with uWSGI and Nginx on Ubuntu 18.04

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据