auto_deploy_guide.md 7.0 KB

自动部署功能使用指南

概述

auto_execute_tasks.py 脚本现已支持自动将完成的任务脚本和 n8n 工作流部署到生产服务器。

生产服务器配置

  • 服务器地址: 192.168.3.143
  • SSH 端口: 22
  • 用户名: ubuntu
  • 密码: citumxl2357
  • 脚本保存路径: /opt/dataops-platform/datafactory/scripts
  • 工作流保存路径: /opt/dataops-platform/n8n/workflows

依赖安装

自动部署功能需要 paramiko 库来实现 SSH 连接和文件传输:

pip install paramiko

功能特性

1. 自动部署(默认启用)

当任务完成并同步到数据库时,系统会自动:

  • 将生成的 Python 脚本上传到生产服务器
  • 查找并上传相关的 n8n 工作流文件
  • 设置脚本文件为可执行权限(755)

2. 工作流文件查找策略

系统会按以下顺序查找相关的 n8n 工作流文件:

  1. 与脚本同目录下的 n8n_workflow_*.json 文件
  2. datafactory/n8n_workflows/ 目录下的所有 .json 文件
  3. 根据任务名称匹配的工作流文件

使用方式

测试 SSH 连接

在首次使用前,建议先测试到生产服务器的连接:

python scripts/auto_execute_tasks.py --test-connection

成功输出示例:

============================================================
🔍 测试生产服务器连接
============================================================
正在连接生产服务器 ubuntu@192.168.3.143:22...
✅ SSH 连接成功
✅ 命令执行成功: Connection test successful
✅ 脚本目录存在: /opt/dataops-platform/datafactory/scripts
============================================================
✅ 连接测试完成
============================================================

启用自动部署(默认)

正常运行脚本时,自动部署功能默认启用:

# Agent 循环模式(推荐)
python scripts/auto_execute_tasks.py --chat-loop --use-agent

# 单次执行
python scripts/auto_execute_tasks.py --once

# Agent 运行模式
python scripts/auto_execute_tasks.py --agent-run

禁用自动部署

如果需要临时禁用自动部署功能:

python scripts/auto_execute_tasks.py --chat-loop --use-agent --no-deploy

手动部署指定任务

可以手动部署已完成的特定任务:

# 部署任务 ID 为 123 的脚本和工作流
python scripts/auto_execute_tasks.py --deploy-now 123

部署流程

  1. 任务完成检测

    • 系统检测到 tasks/pending_tasks.json 中有状态为 completed 的任务
  2. 数据库同步

    • 更新数据库中任务状态为 completed
    • 更新 DataFlow 节点的 script_path 字段
  3. 自动部署触发

    • 读取任务的 code_namecode_path 信息
    • 建立 SSH 连接到生产服务器
  4. 脚本部署

    • 确保远程目录存在(不存在则自动创建)
    • 上传 Python 脚本文件
    • 设置文件权限为 755(可执行)
  5. 工作流部署

    • 查找相关的 n8n 工作流 JSON 文件
    • 上传所有找到的工作流文件到生产服务器
  6. 部署日志

    • 记录详细的部署过程和结果
    • 显示成功/失败状态

部署日志示例

============================================================
🚀 开始自动部署任务: 销售数据生成脚本
============================================================
📦 部署 Python 脚本: datafactory/scripts/sales_data_generator.py
正在连接生产服务器 ubuntu@192.168.3.143:22...
✅ SSH 连接成功
正在上传: G:\code-lab\DataOps-platform-new\datafactory\scripts\sales_data_generator.py -> /opt/dataops-platform/datafactory/scripts/sales_data_generator.py
✅ 脚本部署成功: /opt/dataops-platform/datafactory/scripts/sales_data_generator.py
📦 发现 1 个工作流文件
📦 部署工作流: n8n_workflow_sales_data.json
正在连接生产服务器 ubuntu@192.168.3.143:22...
✅ SSH 连接成功
正在上传工作流: G:\code-lab\DataOps-platform-new\datafactory\n8n_workflows\n8n_workflow_sales_data.json -> /opt/dataops-platform/n8n/workflows/n8n_workflow_sales_data.json
✅ 工作流部署成功: /opt/dataops-platform/n8n/workflows/n8n_workflow_sales_data.json
============================================================
✅ 任务 销售数据生成脚本 部署完成
============================================================

故障排查

1. SSH 连接失败

问题: SSH 连接失败: [Errno 10060] A connection attempt failed...

解决方案:

  • 检查网络连接,确保能够访问 192.168.3.143
  • 确认防火墙未阻止 SSH 端口 22
  • 验证服务器 SSH 服务是否正常运行

2. 认证失败

问题: SSH 连接失败: Authentication failed

解决方案:

  • 检查用户名和密码是否正确
  • 确认服务器允许密码认证(检查 /etc/ssh/sshd_config

3. 权限不足

问题: Permission denied 错误

解决方案:

  • 确认 ubuntu 用户对目标目录有写权限
  • 如需要,在服务器上执行:

    sudo chown -R ubuntu:ubuntu /opt/dataops-platform/datafactory/scripts
    sudo chmod -R 755 /opt/dataops-platform/datafactory/scripts
    

    4. paramiko 未安装

    问题: 未安装 paramiko 库

    解决方案:

    pip install paramiko
    

5. 文件未找到

问题: 本地脚本文件不存在

解决方案:

  • 检查 tasks/pending_tasks.json 中的 code_pathcode_name 是否正确
  • 确认脚本文件已成功创建

安全建议

  1. 密码管理

    • 考虑使用 SSH 密钥认证替代密码认证
    • 将敏感配置移至环境变量或配置文件
  2. 网络安全

    • 确保生产服务器仅在内网访问
    • 考虑使用 VPN 或堡垒机
  3. 权限控制

    • 使用最小权限原则
    • 定期审计部署日志

配置自定义

如需修改生产服务器配置,编辑 scripts/auto_execute_tasks.py 中的 PRODUCTION_SERVER 字典:

PRODUCTION_SERVER = {
    "host": "192.168.3.143",
    "port": 22,
    "username": "ubuntu",
    "password": "citumxl2357",
    "script_path": "/opt/dataops-platform/datafactory/scripts",
    "workflow_path": "/opt/dataops-platform/n8n/workflows",
}

常见问题

Q: 如何查看部署历史?

A: 部署日志会输出到控制台,建议使用日志重定向保存:

python scripts/auto_execute_tasks.py --chat-loop --use-agent 2>&1 | tee deploy.log

Q: 可以部署到多个服务器吗?

A: 当前版本仅支持单个生产服务器。如需多服务器部署,需要修改代码实现。

Q: 部署失败会影响任务状态吗?

A: 不会。任务状态更新和部署是独立的流程。即使部署失败,任务仍会标记为 completed。

Q: 如何回滚部署?

A: 当前版本不支持自动回滚。需要手动在生产服务器上恢复旧版本文件。

未来改进

  • 支持 SSH 密钥认证
  • 支持多服务器部署
  • 部署历史记录和版本管理
  • 自动回滚机制
  • 部署前后钩子脚本
  • 部署通知(邮件/钉钉/企业微信)