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

相关推荐
用户9562562542916 小时前
跟做:Firecrawl 单页转 Markdown 再丢进沙箱总结
python·api
威哥爱编程16 小时前
模拟面试智能体开发实战 02:回答等半分钟,谁还愿意练?把服务端和流式输出搭起来
python·agent·harmonyos
威哥爱编程17 小时前
模拟面试智能体开发实战 01:面试挂了都不知道挂在哪?用 Python 给自己造一个随叫随到的 AI 面试官
python·agent·harmonyos
2601_9679801117 小时前
Python行情API量化 02:顺序拉 20 要 2 秒?并发批量把时间压到 0.5 秒
python·api·限流·并发·量化
伞伞悦读17 小时前
【第81期】特征缩放怎么选:标准化、MinMax 与 Robust 的原理、泄漏对照和完整实验
人工智能·python·深度学习·机器学习
新*18 小时前
从一段 WebSocket 代码聊开:bytes 不是 zlib、binaryType 决定一切,15MB 大消息的零拷贝优化
javascript·python·websocket·性能优化·blob·zlib·arraybuffer
卷无止境20 小时前
mathmodel-figure-templates 以及两个上手案例
后端·python
锋行天下20 小时前
服务器 Python 2.7 装不了 langgraph-cli?用本地生成 Dockerfile 曲线救国
人工智能·后端·python
一条大祥脚20 小时前
深入理解 PyTorch FlexAttention:从 Score Mod 到 Mask Mod 的稀疏加速之道
人工智能·pytorch·python·注意力机制·flex attention·可编程注意力
2601_9679801121 小时前
Python自动化办公:模块、库与样式调整教程
python·excel·自动化办公·openpyxl·样式调整