Appearance
单文件脚本部署
- 简单 Python 脚本(无界面,如定时任务、数据处理)
准备环境
- 在项目根目录下,生成环境清单文件
requirements.txt
bash
pip list --format=freeze > requirements.txt安装 conda 环境
- 防止多个项目依赖冲突,每个项目使用独立的 conda 环境
- 官方文档:https://www.anaconda.com/docs/getting-started/miniconda/install#linux-terminal-installer
bash
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
source ~/.bashrc
# 检查 conda 是否安装成功
conda --version- 每个项目创建一个独立的 conda 环境,环境名称与项目名称相同
bash
conda create -n test_project python=3.13- 激活 conda 环境
bash
# 激活环境
conda activate test_project- 在项目根目录下,上传项目代码和依赖清单文件
requirements.txt上传到服务器
bash
# 上传项目代码
scp -r ./ root@212.64.13.112:/www/wwwroot/test_project
# 或者把代码上传到git仓库,在服务器项目目录下,执行git clone命令
git clone https://github.com/yourusername/test_project.git- 在服务器项目目录下,安装依赖
bash
pip install -r requirements.txt- 退出 conda 环境
bash
conda deactivate后台运行
- 使用
supervisor管理进程
安装 supervisor
bash
# 安装 supervisor
pip install supervisor
# 生成 supervisor 配置文件
echo_supervisord_conf > /etc/supervisord.conf配置 supervisor
- 去掉
supervisord.conf配置文件中的[include]files = relative/directory/*.ini的注释 - 把
files = relative/directory/*.ini改成files = /etc/supervisord.d/*.ini - 创建
/etc/supervisord.d目录
bash
# 编辑 supervisor 配置文件
vim /etc/supervisord.conf
# 创建 supervisor 配置目录
mkdir /etc/supervisord.d自定义配置文件
- 在
/etc/supervisord.d目录下,创建项目配置文件test_project.ini
ini
; 项目组
; 每个项目可以有多个进程
[group:test_project]
programs=task1, task2
; 进程1
; 每个进程对应一个 Python 脚本
[program:task1]
; 执行命令 要用 conda 环境的 python 解释器
command=/root/miniconda3/envs/test_project/bin/python task1.py
; 运行目录
directory=/www/wwwroot/test_project/
; 自动启动
autostart=true
; 自动重启
autorestart=true
; 将 stderr 重定向到 stdout
redirect_stderr=true
; 日志文件输出路径
stdout_logfile=/www/wwwlogs/test_project/task1.log
; 日志文件最大大小
stdout_logfile_maxbytes=10MB
; 日志文件备份数量
stdout_logfile_backups=10
; 进程2
; 每个进程对应一个 Python 脚本
[program:task2]
; 执行命令 要用 conda 环境的 python 解释器
command=/root/miniconda3/envs/test_project/bin/python task2.py
; 运行目录
directory=/www/wwwroot/test_project/
; 自动启动
autostart=true
; 自动重启
autorestart=true
; 将 stderr 重定向到 stdout
redirect_stderr=true
; 日志文件输出路径
stdout_logfile=/www/wwwlogs/test_project/task2.log
; 日志文件最大大小
stdout_logfile_maxbytes=10MB
; 日志文件备份数量
stdout_logfile_backups=10启动项目
- 先更新配置文件
- 每次修改配置文件,都要执行下面命令
bash
# 重新加载配置文件
supervisorctl reread
# 更新配置
supervisorctl update- 分组启动
bash
# 启动test_project 所有进程
supervisorctl start test_project:
# 启动test_project task1进程
supervisorctl start test_project:task1
# 查看项目状态 所有进程
supervisorctl status test_project:
# 查看项目状态 task1进程
supervisorctl status test_project:task1
# 停止项目 所有进程
supervisorctl stop test_project:
# 停止项目 task1进程
supervisorctl stop test_project:task1
# 重启项目 所有进程
supervisorctl restart test_project:
# 重启项目 task1进程
supervisorctl restart test_project:task1