欢迎光临
我们一直在努力

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文件夹下

# 进入项目所在文件夹下
cd /usr/project/rc_project01
# 创建虚拟环境
python3 -m venv .venv
# 激活虚拟环境
source .venv/bin/activate
# 安装项目依赖
pip install -r requirements.txt
# 退出虚拟环境
deactivate

如果依赖安装失败报下面错误

/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版本

# 先安装低版本greenlet
pip install greenlet==1.1.3
# 再安装项目依赖
pip install -r requirements.txt
# 退出虚拟环境
deactivate

配置Supervisor文件

Supervisor 可以监控 Gunicorn 进程,在崩溃时自动重启。安装 Supervisor 后,创建配置文件 /etc/supervisor.d/your_project.ini:

[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常用命令

# 启动 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没有启动,需要先启动然后再配置开机自启

# 启动 Supervisor 服务
sudo systemctl start supervisor
# 配置开机自启
sudo systemctl enable supervisor

读取配置的项目

# 重新读取配置并更新
supervisorctl reread
# 更新后启动项目
supervisorctl update

在这里插入图片描述 在这里插入图片描述

启动项目

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

在这里插入图片描述 项目状态为RUNING说明项目正在运行,如果出现问题,需要排查,可以使用下面命令查看日志

# 查看最近报错的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:

[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

两种方案的对比如下:

对比项SupervisorSystemd
安装成本 需要额外安装 Supervisor 系统自带,无需安装
配置复杂度 配置项较多,需要单独管理日志文件 配置简洁,日志交给 journald 管理
进程守护 支持崩溃自动重启 支持崩溃自动重启
开机自启 需手动 enable supervisor 通过 enable 服务实现
适用场景 适合管理多个项目、需要统一管理界面 适合单机单项目、追求简洁部署

如果项目规模较小、希望减少依赖,推荐使用 Systemd 方案;如果需要同时管理多个 Python 项目,Supervisor 的集中管理能力会更有优势。

赞(0)
未经允许不得转载:171主机测评 » Python之Flask项目部署到阿里云
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址