446 lines
11 KiB
Markdown
446 lines
11 KiB
Markdown
# 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"}
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 功能测试
|
||
|
||
### 测试1:OpenAI模型(兼容性测试)
|
||
|
||
```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秒内任务完成
|
||
|
||
### 测试2:RunningHub文生视频
|
||
|
||
```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';
|
||
```
|
||
|
||
### 测试3:RunningHub图生视频
|
||
|
||
```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;
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 常见问题排查
|
||
|
||
### 问题1:Provider未注册
|
||
|
||
**症状:** 日志中没有"注册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
|
||
```
|
||
|
||
### 问题2:RunningHub任务卡在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版本等)
|
||
|
||
**祝部署顺利!** 🚀
|
||
|