如何在 Debian 12 上使用 Nginx 和 Gunicorn 安装 Flask
Flask 是一个用 Python 编写的微框架,用于开发现代 Web 应用程序和 API(应用程序编程接口)。它基于 Werkzeug 工具包和 Jinja2 模板。 Flask 没有使用复杂的架构,而是一个小型 Web 框架,易于扩展核心,并且由于 Flask 代码较少而易于学习。 Flask 不包含 ORM,但仍然具有 URL 路由和模板引擎等很酷的功能。
Gunicorn 或“Green Unicorn”是一个具有 pre-fork 工作模式的 WSGI HTTP 服务器。它是从 Ruby 的 Unicorn 项目移植来的。 Gunicorn 可以与多种 Web 框架搭配使用,它对服务器资源的占用轻量级且速度快。 Gunicorn 位于您的应用程序和 Web 服务器之间,因此您可以将 Gunicorn 与 Nginx 和 Apache2 等 Web 服务器配对。
以下指南将向您展示如何在 Debian 12 上开始使用 Flask。您将安装 Flask,并创建第一个 Flask 应用程序,然后您还将配置 Flask 应用程序以运行 Gunicorn、Supervisor 和 Nginx Web 服务器。
先决条件
要继续阅读本指南,请准备好:
- Debian 12 机器 - 服务器版或桌面版。
- 具有 sudo 管理员权限的非 root 用户。
安装依赖项
在安装 Flask 之前,您必须确保系统上已安装依赖项,例如用于创建 Python 虚拟环境的 Python 3.11、Pip 和 venv 模块、将用作反向代理的 Nginx 以及用于创建 Python 虚拟环境的 Supervisor管理 Flask 应用程序。
完成以下步骤来安装 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 将在系统启动时自动启动。状态活动(正在运行)表示 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 服务器网关接口 HTTP 服务器,支持多种 Web 框架,包括 Flask。
使用以下编辑器在与 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
如果成功,您应该看到如下输出:
现在启动您的网络浏览器并访问服务器 IP 地址和端口 8080,即:http://192.168.01.15:8080/。如果一切顺利,您应该会获得您创建的 index.html 页面。
最后,按Ctrl+c终止Gunicorn进程。
使用 Supervisor 运行 Flask 应用程序
使用 Guncorn 配置 Flask 后,下一步您将把 Flask 应用程序与 Supervisor 集成。这使您可以通过单个命令行supervisorctl(Supervisor 的命令行界面)轻松管理 Flask 应用程序。
使用以下 nano 编辑器命令创建新的主管配置 /etc/supervisor/conf.d/testapp.conf。
sudo nano /etc/supervisor/conf.d/testapp.conf
插入以下配置,并确保更改详细信息用户、路径 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
下面的输出表明主管服务正在运行。
最后,执行下面的supervisorctl命令来验证在supervisor下运行的进程列表。
sudo supervisorctl status
如果顺利的话,您应该看到 testapp 正在supervisor下运行,它通过unix套接字/home/alice/testapp/testapp.sock运行。
您还可以使用以下命令验证 UNIX 套接字 /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 success.
最后,运行下面的 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 上完成了 Flask 与 Gunicorn 和 Nginx 的安装。您还学习了如何创建和管理 Python 虚拟环境,并创建了第一个在 Supervisor 和 Nginx 下在后台运行的 Flask 应用程序反向代理。进一步的指导,您可能有兴趣使用 RDBMS 数据库(例如 MySQL/MariaDB 和 PostgreSQL)创建 Flask 应用程序。