本页内容
- 准备工作
- 安装依赖项
- 安装 Flask 和 Gunicorn
- 使用 Flask 创建第一个应用
- 使用 wsgi 和 Gunicorn 运行 Flask 应用
- 使用 Supervisor 运行 Flask 应用
- 配置 Nginx 作为反向代理
- 访问 Flask 应用
- 结语
Flask 是一个用 Python 编写的微框架,用于开发现代 Web 应用和 API(Application Programming Interface,应用程序编程接口)。它基于 Werkzeug 工具包和 Jinja2 模板引擎。与采用复杂架构的框架不同,Flask 是一个小巧的 Web 框架,其核心易于扩展且易于学习,因为 Flask 的代码量更少。Flask 不包含 ORM,但仍然具备 URL 路由和模板引擎等实用特性。
Gunicorn("Green Unicorn",绿色独角兽)是一个采用预派生(pre-fork)工作模式的 WSGI HTTP 服务器。它移植自 Ruby 的 Unicorn 项目。Gunicorn 可以与多种 Web 框架搭配使用,它对服务器资源占用低且速度快。Gunicorn 位于你的应用和 Web 服务器之间,因此你可以将它搭配 Nginx、Apache2 等 Web 服务器一起使用。
本指南将向你展示如何在 Debian 12 上开始使用 Flask。你将安装 Flask,并创建第一个 Flask 应用,随后你还将配置该 Flask 应用,使其通过 Gunicorn、Supervisor 和 Nginx Web 服务器运行。
准备工作
要继续本指南,请准备好:
- 一台 Debian 12 机器——Server 版或 Desktop 版均可。
- 一个具有 sudo 管理员权限的非 root 用户。
安装依赖项
在安装 Flask 之前,你必须确保系统上已安装所需的依赖项,例如 Python 3.11、用于创建 Python 虚拟环境的 Pip 和 venv 模块、将用作反向代理的 Nginx,以及用于管理 Flask 应用的 Supervisor。
完成以下步骤以安装 Flask 的依赖项。
首先,运行以下 apt update 命令以刷新你的 Debian 软件包索引。
sudo apt update
软件包索引更新完成后,执行以下 apt install 命令安装软件包依赖项。其中包括 pip、venv、Nginx 和 supervisor。
sudo apt install python3 python3-pip python3-venv nginx supervisor
输入 y 确认安装,然后按 ENTER 继续。

一切安装完成后,运行以下命令将默认的 python 命令指向 python3。
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
然后执行以下命令验证 python、pip 和 venv 的版本。这将确保所需的 Python 依赖项已安装。
python --version
pip --version
python -m venv -v
你应该会看到类似如下的输出:

接下来,使用以下 systemctl 命令验证 Nginx 服务,以确保该服务已启用并正在运行。
sudo systemctl is-enabled nginx
sudo systemctl status nginx
输出中的 enabled 表示 Nginx 会在系统启动时自动启动。而状态 active (running) 表示 Nginx 正在运行。

最后,验证 supervisor 服务,以确保该服务已启用并正在运行。
sudo systemctl is-enabled supervisor
sudo systemctl status supervisor
你的终端上会显示类似的输出:

安装 Flask 和 Gunicorn
在接下来的步骤中,你将通过 pip 和 venv 虚拟环境安装 Flask。同时,你还将学习如何使用 Python 的 venv 模块创建和管理 Python 虚拟环境。
创建一个新的项目目录 ~/testapp,并通过 cd 命令进入该目录。
mkdir -p ~/testapp; cd ~/testapp
使用以下命令创建新的虚拟环境 venv。命令执行后将创建新的 venv 目录。
python -m venv venv
使用以下命令激活 venv 虚拟环境。激活后,你的 shell 提示符应变为类似 (venv) user@hostname.. 的形式。
source venv/bin/activate

激活 venv 后,执行以下 pip 命令安装 Flask 和 Gunicorn。
pip install flask gunicorn
安装开始后,你应该会看到以下输出:

如果你想要退出 venv 虚拟环境,可使用以下命令。
deactivate
使用 Flask 创建第一个应用
在虚拟环境中安装好 Flask 后,现在你将创建第一个 Flask 应用,它会向你展示一个简单的 HTML 页面。你还将学习如何运行和管理该 Flask 应用。
使用你习惯的编辑器创建新文件 testapp.py。以下示例使用 nano。
nano testapp.py
插入以下 Python 脚本来创建第一个 Flask 应用。以下代码将渲染默认 templates 目录中的 index.html 文件。
# testapp.py
from flask import Flask, render_template # importing the render_template function
app = Flask(__name__)
# route to index page
@app.route("/")
def hello():
return render_template('index.html')
if __name__ == ' __main__':
app.run(debug=True)
完成后,保存并退出文件。
现在创建一个新的 templates 目录,并新建文件 index.html。
mkdir -p templates
nano templates/index.html
将以下 HTML 脚本插入到文件中。
<html> <body> <h1><center>Hello Flask - Nginx and Gunicorn Debian 12!</center></h1> </body> </html>
保存文件并退出编辑器。
要测试你的应用,请在 shell 中像下面这样运行 testapp.py:
flask --app testapp run
在以下输出中,你应该会看到你的 Flask 应用运行在 localhost 的默认端口 5000 上。

打开另一个终端并连接到服务器,然后运行以下 curl 命令来验证你的 Flask 应用。
curl http://localhost:5000/
如果一切顺利,你应该会看到你所创建的 index.html 文件的源代码。

现在你可以按 Ctrl+c 终止你的 Flask 应用进程。
使用 wsgi 和 Gunicorn 运行 Flask 应用
在此步骤中,你将学习如何将 Flask 应用配置为通过 Gunicorn 运行。Gunicorn 是一个 Web 服务器网关接口(WSGI)HTTP 服务器,支持包括 Flask 在内的多种 Web 框架。
使用以下编辑器在与 testapp.py 相同的目录中创建新文件 wsgi.py。
nano wsgi.py
插入以下 Python 脚本,将你的 Flask 应用与 Gunicorn 集成。
# import testapp Flask application from testapp import app if __name__ == "__main__": app.run(debug=True)
完成后保存并退出文件。
为确保安装成功,运行以下 gunicorn 命令。这将通过 wsgi 脚本和 gunicorn 在端口 8080 上启动你的 Flask 应用。
gunicorn -w 4 --bind 0.0.0.0:8080 wsgi:app
如果成功,你应该会看到类似如下的输出:

现在打开你的 Web 浏览器,访问服务器 IP 地址加端口 8080,即:http://192.168.01.15:8080/。如果一切顺利,你应该会看到你所创建的 index.html 页面。

最后,按 Ctrl+c 终止 Gunicorn 进程。
使用 Supervisor 运行 Flask 应用
在配置好 Flask 与 Gunicorn 后,下一步你将把 Flask 应用与 Supervisor 集成。这样你就可以通过单一的命令行工具 supervisorctl 轻松管理 Flask 应用,supervisorctl 是 Supervisor 的命令行界面。
使用以下 nano 编辑器命令创建新的 Supervisor 配置文件 /etc/supervisor/conf.d/testapp.conf。
sudo nano /etc/supervisor/conf.d/testapp.conf
插入以下配置,并务必根据你的实际情况修改 user、Flask 安装目录路径以及应用名称。
[program:testapp] command=/bin/bash -c 'source /home/alice/testapp/venv/bin/activate; gunicorn -w 3 --bind unix:/home/alice/testapp/testapp.sock wsgi:app' directory=/home/alice/testapp user=alice group=www-data autostart=true autorestart=true stdout_logfile=/home/alice/testapp/testapp.log stderr_logfile=/home/alice/testapp/error.log
完成后保存并关闭文件。
接下来,运行以下 systemctl 命令重启 supervisor 服务以应用更改。然后,验证 supervisor 服务以确保其正在运行。
sudo systemctl restart supervisor
sudo systemctl status supervisor
以下输出表明 supervisor 服务正在运行。

最后,执行以下 supervisorctl 命令,以验证在 supervisor 管理下运行的进程列表。
sudo supervisorctl status
如果一切顺利,你应该会看到 testapp 在 supervisor 管理下运行,它通过 unix socket /home/alice/testapp/testapp.sock 运行。

你也可以使用以下命令验证该 UNIX socket /home/alice/testapp/testapp.sock。
ss -pl | grep testapp.sock
配置 Nginx 作为反向代理
至此,你的 Flask 应用已在 supervisor 的后台运行。为了让你的应用可被访问,你将配置反向代理,这里使用 Nginx。
使用以下 nano 编辑器命令创建新的 Nginx 服务器块配置文件 /etc/nginx/sites-available/testapp。
sudo nano /etc/nginx/sites-available/testapp
插入以下配置,并将 server_name 改为你的本地域名。
server {
listen 80;
server_name testapp.local;
location / {
include proxy_params;
proxy_pass http://unix:/home/alice/testapp/testapp.sock;
}
}
完成后保存文件并退出。
现在运行以下命令以启用服务器块配置 testapp。然后验证 Nginx 配置,以确保语法正确。
sudo ln -s /etc/nginx/sites-available/testapp /etc/nginx/sites-enabled/
sudo nginx -t
如果成功,你应该会看到输出 Syntax is OK - Test is successful。

最后,运行以下 systemctl 命令重启 Nginx 服务以应用更改。然后验证以确保服务正在运行。
sudo systemctl restart nginx
sudo systemctl status nginx
以下输出表明 Nginx 服务状态为正在运行。

访问 Flask 应用
如果你使用的是 Linux 客户端机器,请使用以下 nano 编辑器编辑 /etc/hosts 文件。
sudo nano /etc/hosts
像下面这样插入你的 Flask 应用域名和服务器 IP 地址:
192.168.10.15 testapp.local
完成后保存文件并退出编辑器。
现在打开你的 Web 浏览器,访问你的 Flask 应用域名 http://testapp.local/。如果一切顺利,你应该会看到你的 Flask 应用的 HTML 页面。

结语
作为本指南的收尾,你已完成在 Debian 12 上使用 Gunicorn 和 Nginx 安装 Flask 的工作。你还学习了如何创建和管理 Python 虚拟环境,并创建了第一个在 Supervisor 和 Nginx 反向代理后台运行的 Flask 应用。如需进一步学习,你可以尝试使用 MySQL/MariaDB、PostgreSQL 等关系型数据库(RDBMS)创建 Flask 应用。