# 自动部署功能使用指南

## 概述

`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 密钥认证
- [ ] 支持多服务器部署
- [ ] 部署历史记录和版本管理
- [ ] 自动回滚机制
- [ ] 部署前后钩子脚本
- [ ] 部署通知（邮件/钉钉/企业微信）
