Python之Flask项目部署到阿里云

对于使用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 的集中管理能力会更有优势。

相关推荐
liwulin05061 小时前
【PYTORCH】迷你DECODER-ONLY模型
pytorch·python·深度学习
全栈练习生1 小时前
Agent工程化三层架构
python·ai
大狼鲸2 小时前
阿里云ECS数据备份怎么做?3种备份方式对比和配置步骤
阿里云·云计算
高洁012 小时前
边缘AI与大模型轻量化:让智能跑进每一个终端
人工智能·python·深度学习·机器学习·迁移学习
MoRanzhi12033 小时前
第6篇(中)· 使用 PyQt5 实现 2048 高性能计算版:无头后台求解与三档运行模式
python·pyqt·数据持久化·多进程·进程间通讯·后台任务·断点续跑
Metaphor6925 小时前
Python 自动化办公:如何轻松在 PDF 中导入与导出表单数据
python·pdf·自动化
外收内放13 小时前
面向对象高级(实战案例)
开发语言·python·学习
专业程序开发源14 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
FPGA小迷弟14 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
c++·python·ai·plotly·django·ai编程·claude