Files
1818web-hoduan/DEPLOYMENT_CHECKLIST.md
2025-11-14 17:41:15 +08:00

446 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# RunningHub集成部署检查清单
**版本:** v2.1.0
**日期:** 2025-10-20
---
## ✅ 部署前检查
### 1. 代码文件完整性
- [ ] **Provider核心接口** (5个文件)
- [ ] `src/main/java/com/dora/service/provider/AIProvider.java`
- [ ] `src/main/java/com/dora/dto/provider/ProviderTaskRequest.java`
- [ ] `src/main/java/com/dora/dto/provider/ProviderTaskResponse.java`
- [ ] `src/main/java/com/dora/dto/provider/ProviderTaskStatus.java`
- [ ] `src/main/java/com/dora/dto/provider/ProviderTaskResult.java`
- [ ] **Provider实现** (2个文件)
- [ ] `src/main/java/com/dora/service/provider/impl/OpenAIProviderImpl.java`
- [ ] `src/main/java/com/dora/service/provider/impl/RunningHubProviderImpl.java`
- [ ] **RunningHub DTO** (5个文件)
- [ ] `src/main/java/com/dora/dto/runninghub/RunningHubSubmitRequest.java`
- [ ] `src/main/java/com/dora/dto/runninghub/RunningHubNodeInfo.java`
- [ ] `src/main/java/com/dora/dto/runninghub/RunningHubSubmitResponse.java`
- [ ] `src/main/java/com/dora/dto/runninghub/RunningHubStatusResponse.java`
- [ ] `src/main/java/com/dora/dto/runninghub/RunningHubOutputResponse.java`
- [ ] **核心服务** (2个文件)
- [ ] `src/main/java/com/dora/service/AIProviderService.java`
- [ ] `src/main/java/com/dora/scheduler/RunningHubPollingScheduler.java`
- [ ] **修改的文件** (7个文件)
- [ ] `src/main/resources/application.yml` - 添加providers配置
- [ ] `src/main/java/com/dora/entity/AiTask.java` - 添加provider字段
- [ ] `src/main/java/com/dora/entity/PointsConfig.java` - 添加provider字段
- [ ] `src/main/java/com/dora/mapper/AiTaskMapper.java` - 添加查询方法
- [ ] `src/main/resources/mapper/AiTaskMapper.xml` - 更新SQL
- [ ] `src/main/java/com/dora/service/impl/AiTaskServiceImpl.java` - 集成Provider
- [ ] `V5__add_provider_support.sql` - 数据库迁移脚本
### 2. 配置文件检查
```bash
# 检查application.yml中的RunningHub配置
grep -A 10 "runninghub:" src/main/resources/application.yml
```
**必须包含:**
```yaml
runninghub:
enabled: true
base-url: https://www.runninghub.cn
submit-url: /task/openapi/ai-app/run
status-url: /task/openapi/status
output-url: /task/openapi/outputs
default-webapp-id: "1973555977595301890"
api-key: "5c44cef12da3470e9f24da70c63787dc"
polling-interval: 5000
max-polling-times: 120
```
---
## 🗄️ 数据库部署
### 1. 执行迁移脚本
```bash
# 1. 备份数据库
mysqldump -u root -p 1818ai > backup_before_v5_$(date +%Y%m%d_%H%M%S).sql
# 2. 执行迁移
mysql -u root -p 1818ai < V5__add_provider_support.sql
# 3. 验证表结构
mysql -u root -p 1818ai -e "DESC ai_task;" | grep provider
mysql -u root -p 1818ai -e "DESC points_config;" | grep provider
```
**预期输出:**
```
provider_type | varchar(50) | YES | | NULL |
provider_task_id | varchar(100) | YES | | NULL |
provider_response | text | YES | | NULL |
```
### 2. 验证模型配置
```sql
-- 查看插入的RunningHub模型数量
SELECT COUNT(*) as rh_model_count
FROM points_config
WHERE provider_type = 'runninghub';
-- 预期结果12
-- 查看所有模型
SELECT model_name, description, points_cost, provider_type
FROM points_config
WHERE provider_type = 'runninghub'
ORDER BY points_cost;
```
---
## 🔧 编译部署
### 1. 编译项目
```bash
# 清理并编译
mvn clean package -DskipTests
# 检查编译结果
ls -lh target/1818_user_server-1.0-SNAPSHOT.jar
```
### 2. 部署到服务器
```bash
# 1. 停止服务
sudo systemctl stop spring_1818_user_server
# 2. 备份当前版本
sudo cp /www/wwwroot/1818_user_server/1818_user_server-1.0-SNAPSHOT.jar \
/www/wwwroot/1818_user_server/backups/1818_user_server-$(date +%Y%m%d_%H%M%S).jar
# 3. 部署新版本
sudo cp target/1818_user_server-1.0-SNAPSHOT.jar \
/www/wwwroot/1818_user_server/
# 4. 启动服务
sudo systemctl start spring_1818_user_server
# 5. 查看启动日志
sudo journalctl -u spring_1818_user_server -f --lines=100
```
---
## ✅ 部署后验证
### 1. 服务启动检查
```bash
# 1. 检查进程
ps aux | grep spring_1818_user_server
# 2. 检查端口
netstat -tlnp | grep 8081
# 3. 检查日志中的Provider注册
sudo journalctl -u spring_1818_user_server | grep "注册AI Provider"
```
**预期日志输出:**
```
注册AI Provider: openai, 异步: false
注册AI Provider: runninghub, 异步: true
```
### 2. Provider初始化检查
```bash
# 查看日志确认Provider初始化成功
sudo journalctl -u spring_1818_user_server | grep -E "(Provider|AIProviderService)" | tail -20
```
**预期日志:**
```
INFO AIProviderService - 注册AI Provider: openai, 异步: false
INFO AIProviderService - 注册AI Provider: runninghub, 异步: true
INFO RunningHubPollingScheduler - RunningHub轮询调度器已启动
```
### 3. API健康检查
```bash
# 检查服务健康
curl http://localhost:8081/actuator/health
# 预期响应
{"status":"UP"}
```
---
## 🧪 功能测试
### 测试1OpenAI模型兼容性测试
```bash
# 提交OpenAI模型任务
curl -X POST "http://localhost:8081/user/ai/tasks/submit" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"modelName": "sora_image",
"prompt": "测试猫咪图片"
}' | jq '.'
```
**验证点:**
- [ ] 返回200状态码
- [ ] 返回taskNo
- [ ] status为"queued"或"processing"
- [ ] 30秒内任务完成
### 测试2RunningHub文生视频
```bash
# 提交RunningHub文生视频任务
RESPONSE=$(curl -X POST "http://localhost:8081/user/ai/tasks/submit" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"modelName": "rh_sora2_text_portrait",
"prompt": "一个人在海边奔跑"
}')
echo $RESPONSE | jq '.'
# 提取taskNo
TASK_NO=$(echo $RESPONSE | jq -r '.data.taskNo')
echo "TaskNo: $TASK_NO"
```
**验证点:**
- [ ] 返回200状态码
- [ ] 返回taskNo
- [ ] status为"processing"
- [ ] 查看数据库确认provider_type='runninghub'
```sql
SELECT task_no, model_name, provider_type, provider_task_id, status
FROM ai_task
WHERE task_no = 'YOUR_TASK_NO';
```
### 测试3RunningHub图生视频
```bash
# 提交RunningHub图生视频任务
curl -X POST "http://localhost:8081/user/ai/tasks/submit" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"modelName": "rh_sora2_img_landscape",
"prompt": "让场景动起来",
"imageUrl": "https://example.com/test-image.jpg"
}' | jq '.'
```
**验证点:**
- [ ] 返回200状态码
- [ ] 任务提交成功
- [ ] 查看日志确认image节点包含完整URL
```bash
sudo journalctl -u spring_1818_user_server | grep "RunningHub Provider - 请求体" | tail -1
```
### 测试4轮询机制
```bash
# 实时查看轮询日志
sudo journalctl -u spring_1818_user_server -f | grep "RunningHub轮询"
```
**验证点:**
- [ ] 每5秒输出一次轮询日志
- [ ] 显示待处理任务数量
- [ ] 任务状态正确更新QUEUED → RUNNING → SUCCESS
---
## 📊 监控指标
### 1. 任务状态分布
```sql
SELECT
provider_type,
status,
COUNT(*) as count
FROM ai_task
WHERE create_time > DATE_SUB(NOW(), INTERVAL 1 HOUR)
GROUP BY provider_type, status;
```
### 2. 平均处理时间
```sql
SELECT
provider_type,
model_name,
AVG(TIMESTAMPDIFF(SECOND, start_time, complete_time)) as avg_seconds,
COUNT(*) as total_tasks
FROM ai_task
WHERE status = 'completed'
AND create_time > DATE_SUB(NOW(), INTERVAL 24 HOUR)
GROUP BY provider_type, model_name;
```
### 3. 失败任务分析
```sql
SELECT
provider_type,
error_message,
COUNT(*) as error_count
FROM ai_task
WHERE status = 'failed'
AND create_time > DATE_SUB(NOW(), INTERVAL 24 HOUR)
GROUP BY provider_type, error_message
ORDER BY error_count DESC;
```
---
## 🔧 常见问题排查
### 问题1Provider未注册
**症状:** 日志中没有"注册AI Provider"
**排查:**
```bash
# 检查是否有编译错误
sudo journalctl -u spring_1818_user_server | grep -i "error" | tail -20
# 检查Provider类是否加载
sudo journalctl -u spring_1818_user_server | grep "Provider" | tail -30
```
### 问题2RunningHub任务卡在processing
**排查:**
```bash
# 1. 检查轮询是否正常
sudo journalctl -u spring_1818_user_server | grep "轮询" | tail -10
# 2. 检查网络连接
curl -I https://www.runninghub.cn/task/openapi/status
# 3. 手动查询任务状态
curl -X POST "https://www.runninghub.cn/task/openapi/status" \
-H "Content-Type: application/json" \
-d '{
"apiKey": "YOUR_API_KEY",
"taskId": "PROVIDER_TASK_ID"
}' | jq '.'
```
### 问题3图生视频失败
**排查:**
```bash
# 查看详细错误日志
sudo journalctl -u spring_1818_user_server | grep -A 5 "图生视频"
# 检查提交的请求体
sudo journalctl -u spring_1818_user_server | grep "RunningHub Provider - 请求体"
```
**常见原因:**
- 图片URL无法访问
- 图片包含真人RunningHub不支持
- 未提供imageUrl或imageBase64
---
## 📋 回滚方案
如果部署后发现问题,可以快速回滚:
```bash
# 1. 停止服务
sudo systemctl stop spring_1818_user_server
# 2. 恢复旧版本
sudo cp /www/wwwroot/1818_user_server/backups/1818_user_server_BACKUP_TIME.jar \
/www/wwwroot/1818_user_server/1818_user_server-1.0-SNAPSHOT.jar
# 3. 回滚数据库(如果需要)
mysql -u root -p 1818ai < backup_before_v5_TIMESTAMP.sql
# 4. 启动服务
sudo systemctl start spring_1818_user_server
```
---
## ✅ 部署成功标志
全部验证通过后,确认以下所有项:
- [x] **服务正常启动**
- 进程存在
- 端口8081监听
- 日志无ERROR
- [x] **Provider注册成功**
- 日志显示openai和runninghub都已注册
- AIProviderService初始化完成
- [x] **数据库表结构正确**
- ai_task包含provider_*字段
- points_config包含provider_*字段
- 12个RunningHub模型已插入
- [x] **OpenAI模型正常**(兼容性)
- 能提交任务
- 能正常完成
- 积分正确扣除
- [x] **RunningHub文生视频正常**
- 能提交任务
- provider_task_id正确保存
- 轮询机制工作
- 2-5分钟后获得结果
- [x] **RunningHub图生视频正常**
- 支持imageUrl参数
- image节点正确构建
- 能够完成任务
- [x] **轮询调度器正常**
- 每5秒执行一次
- 正确更新任务状态
- 失败任务自动退款
---
## 📞 技术支持
如有问题,请提供以下信息:
1. 错误日志最近100行
2. 数据库中的任务记录
3. 具体的API请求和响应
4. 环境信息Java版本、MySQL版本等
**祝部署顺利!** 🚀