Skip to content

单文件脚本部署

  • 简单 Python 脚本(无界面,如定时任务、数据处理)

准备环境

  • 在项目根目录下,生成环境清单文件requirements.txt
bash
pip list --format=freeze > requirements.txt

安装 conda 环境

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