# 自动部署功能使用指南 ## 概述 `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 连接和文件传输: ```bash pip install paramiko ``` ## 功能特性 ### 1. 自动部署(默认启用) 当任务完成并同步到数据库时,系统会自动: - 将生成的 Python 脚本上传到生产服务器 - 查找并上传相关的 n8n 工作流文件 - 设置脚本文件为可执行权限(755) ### 2. 工作流文件查找策略 系统会按以下顺序查找相关的 n8n 工作流文件: 1. 与脚本同目录下的 `n8n_workflow_*.json` 文件 2. `datafactory/n8n_workflows/` 目录下的所有 `.json` 文件 3. 根据任务名称匹配的工作流文件 ## 使用方式 ### 测试 SSH 连接 在首次使用前,建议先测试到生产服务器的连接: ```bash python scripts/auto_execute_tasks.py --test-connection ``` 成功输出示例: ``` ============================================================ 🔍 测试生产服务器连接 ============================================================ 正在连接生产服务器 ubuntu@192.168.3.143:22... ✅ SSH 连接成功 ✅ 命令执行成功: Connection test successful ✅ 脚本目录存在: /opt/dataops-platform/datafactory/scripts ============================================================ ✅ 连接测试完成 ============================================================ ``` ### 启用自动部署(默认) 正常运行脚本时,自动部署功能默认启用: ```bash # 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 ``` ### 禁用自动部署 如果需要临时禁用自动部署功能: ```bash python scripts/auto_execute_tasks.py --chat-loop --use-agent --no-deploy ``` ### 手动部署指定任务 可以手动部署已完成的特定任务: ```bash # 部署任务 ID 为 123 的脚本和工作流 python scripts/auto_execute_tasks.py --deploy-now 123 ``` ## 部署流程 1. **任务完成检测** - 系统检测到 `tasks/pending_tasks.json` 中有状态为 `completed` 的任务 2. **数据库同步** - 更新数据库中任务状态为 `completed` - 更新 DataFlow 节点的 `script_path` 字段 3. **自动部署触发** - 读取任务的 `code_name` 和 `code_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 用户对目标目录有写权限 - 如需要,在服务器上执行: ```bash sudo chown -R ubuntu:ubuntu /opt/dataops-platform/datafactory/scripts sudo chmod -R 755 /opt/dataops-platform/datafactory/scripts ``` ### 4. paramiko 未安装 **问题**: `未安装 paramiko 库` **解决方案**: ```bash pip install paramiko ``` ### 5. 文件未找到 **问题**: 本地脚本文件不存在 **解决方案**: - 检查 `tasks/pending_tasks.json` 中的 `code_path` 和 `code_name` 是否正确 - 确认脚本文件已成功创建 ## 安全建议 1. **密码管理** - 考虑使用 SSH 密钥认证替代密码认证 - 将敏感配置移至环境变量或配置文件 2. **网络安全** - 确保生产服务器仅在内网访问 - 考虑使用 VPN 或堡垒机 3. **权限控制** - 使用最小权限原则 - 定期审计部署日志 ## 配置自定义 如需修改生产服务器配置,编辑 `scripts/auto_execute_tasks.py` 中的 `PRODUCTION_SERVER` 字典: ```python 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: 部署日志会输出到控制台,建议使用日志重定向保存: ```bash python scripts/auto_execute_tasks.py --chat-loop --use-agent 2>&1 | tee deploy.log ``` ### Q: 可以部署到多个服务器吗? A: 当前版本仅支持单个生产服务器。如需多服务器部署,需要修改代码实现。 ### Q: 部署失败会影响任务状态吗? A: 不会。任务状态更新和部署是独立的流程。即使部署失败,任务仍会标记为 completed。 ### Q: 如何回滚部署? A: 当前版本不支持自动回滚。需要手动在生产服务器上恢复旧版本文件。 ## 未来改进 - [ ] 支持 SSH 密钥认证 - [ ] 支持多服务器部署 - [ ] 部署历史记录和版本管理 - [ ] 自动回滚机制 - [ ] 部署前后钩子脚本 - [ ] 部署通知(邮件/钉钉/企业微信)