对于使用Python的Flask框架开发的项目部署,我们可以使用Gunicorn + Supervisor或者使用Gunicorn + Systemd实现项目的快速部署。要想隐藏项目在服务器中的真实路径,可以配置nginx实现项目的反向代理,nginx服务器也可作为前端服务器,实现前端部署。本文主要讲解Gunicorn + Supervisor实现项目的快速部署,具体部署过程如下。
Gunicorn + Supervisor部署方案详解
将项目拷贝到阿里云服务器中
将所需要的文件上传到阿里云服务器,本文使用FinalShell工具连接阿里云服务器,可以使用Xshell+Xftp进行服务器连接及文件上传。上传的文件,需要排除掉依赖包文件venv或.venv文件,.idea文件,__pycache__文件等。

创建虚拟环境并安装项目依赖
进入项目路径,创建虚拟环境,比如项目在usr/project/rc_project01文件夹下
bash
# 进入项目所在文件夹下
cd /usr/project/rc_project01
# 创建虚拟环境
python3 -m venv .venv
# 激活虚拟环境
source .venv/bin/activate
# 安装项目依赖
pip install -r requirements.txt
# 退出虚拟环境
deactivate
如果依赖安装失败报下面错误
error
/usr/include/c++/4.8.2/bits/c++0x_warning.h:32:2: 错误:
#error This file requires compiler and library
support for the ISO C++ 2011 standard.
This support is currently experimental, and must be enabled with
the -std=c++11 or -std=gnu++11 compiler options.
需要安装低版本greenlet,本文安装了1.1.3版本
bash
# 先安装低版本greenlet
pip install greenlet==1.1.3
# 再安装项目依赖
pip install -r requirements.txt
# 退出虚拟环境
deactivate
配置Supervisor文件
Supervisor 可以监控 Gunicorn 进程,在崩溃时自动重启。安装 Supervisor 后,创建配置文件 /etc/supervisor.d/your_project.ini:
bash
[program:rc_todo_project]
command=/usr/project/rc_todo_project/.venv/bin/gunicorn -w 4 -b 0.0.0.0:5100 app:app
directory=/usr/project/rc_todo_project
user=root
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
stderr_logfile=/usr/project/rc_todo_project/log/rc_todo_project.err.log
stdout_logfile=/usr/project/rc_todo_project/log/rc_todo_project.out.log
如果项目中没有日志文件的话,需要先创建日志文件rc_todo_project.err.log和rc_todo_project.out.log
更新并重启Supervisor文件
Supervisor常用命令
bash
# 启动 Supervisor 服务
sudo systemctl start supervisor
# 配置开机自启
sudo systemctl enable supervisor
# 查看所有进程状态
sudo supervisorctl status
# 重新读取配置
supervisorctl reread
# 更新配置
supervisorctl update
# 启动项目
supervisorctl start your_project
# 重启指定程序
sudo supervisorctl restart your_project
# 停止项目
sudo supervisorctl stop your_project
# 查看实时日志
sudo supervisorctl tail your_project
# 查看最近100行标准错误日志
supervisorctl tail -100 your_project stderr
# 查看实时错误日志
sudo supervisorctl tail your_project stderr
Supervisor没有启动,需要先启动然后再配置开机自启
bash
# 启动 Supervisor 服务
sudo systemctl start supervisor
# 配置开机自启
sudo systemctl enable supervisor
读取配置的项目
bash
# 重新读取配置并更新
supervisorctl reread
# 更新后启动项目
supervisorctl update


启动项目
bash
# 启动项目
supervisorctl start your_project
# 查看项目状态
supervisorctl status

项目状态为RUNING说明项目正在运行,如果出现问题,需要排查,可以使用下面命令查看日志
bash
# 查看最近报错的100条信息
supervisorctl tail -100 your_project stderr
# 查看实时报错信息
supervisorctl tail your_project stderr
项目访问验证
输入项目网址进行访问测试,部署了古诗文学习网站
点击冉成古诗文,或者访问http://rcfuture.cn:5300便可访问

Gunicorn + Systemd 部署方案简介
除了使用 Supervisor 管理 Gunicorn 进程外,我们还可以使用 Systemd 来实现同样的功能。Systemd 是 Linux 系统默认的初始化系统,无需额外安装第三方进程管理工具,配置更加简洁,适合单机部署场景。
创建 Systemd 服务文件 /etc/systemd/system/your_project.service:
bash
[Unit]
Description=Gunicorn instance to serve your_project
After=network.target
[Service]
User=root
Group=root
WorkingDirectory=/usr/project/rc_todo_project
ExecStart=/usr/project/rc_todo_project/.venv/bin/gunicorn -w 4 -b 0.0.0.0:5100 app:app
Restart=always
[Install]
WantedBy=multi-user.target
两种方案的对比如下:
| 对比项 | Supervisor | Systemd |
|---|---|---|
| 安装成本 | 需要额外安装 Supervisor | 系统自带,无需安装 |
| 配置复杂度 | 配置项较多,需要单独管理日志文件 | 配置简洁,日志交给 journald 管理 |
| 进程守护 | 支持崩溃自动重启 | 支持崩溃自动重启 |
| 开机自启 | 需手动 enable supervisor | 通过 enable 服务实现 |
| 适用场景 | 适合管理多个项目、需要统一管理界面 | 适合单机单项目、追求简洁部署 |
如果项目规模较小、希望减少依赖,推荐使用 Systemd 方案;如果需要同时管理多个 Python 项目,Supervisor 的集中管理能力会更有优势。