334 lines
6.7 KiB
Markdown
334 lines
6.7 KiB
Markdown
|
|
# 音乐库唱歌视频功能 - 部署清单
|
|||
|
|
|
|||
|
|
## 📋 部署前检查
|
|||
|
|
|
|||
|
|
### 1. 文件完整性
|
|||
|
|
|
|||
|
|
- [x] `开发/2026年2月4日/音乐库唱歌视频数据库修改.sql` - 数据库修改脚本
|
|||
|
|
- [x] `lover/models.py` - 数据模型已更新
|
|||
|
|
- [x] `lover/routers/music_library.py` - 转换 API 已添加
|
|||
|
|
- [x] `lover/routers/sing.py` - 导入已更新
|
|||
|
|
- [x] `test_music_library_sing.py` - 测试脚本
|
|||
|
|
- [ ] `xuniYou/pages/index/index.vue` - 前端代码(待修改)
|
|||
|
|
|
|||
|
|
### 2. 代码质量检查
|
|||
|
|
|
|||
|
|
- [x] Python 语法检查 - 无错误
|
|||
|
|
- [x] 数据模型验证 - 正确
|
|||
|
|
- [x] API 端点验证 - 正确
|
|||
|
|
- [ ] 前端代码检查 - 待修改
|
|||
|
|
|
|||
|
|
## 🚀 部署步骤
|
|||
|
|
|
|||
|
|
### 步骤 1: 备份数据库 ⚠️ 重要
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 备份整个数据库
|
|||
|
|
mysqldump -u root -p fastadmin > backup_before_music_sing_$(date +%Y%m%d_%H%M%S).sql
|
|||
|
|
|
|||
|
|
# 或者只备份相关表
|
|||
|
|
mysqldump -u root -p fastadmin nf_sing_song_video nf_song_library nf_music_library > backup_music_sing_tables_$(date +%Y%m%d_%H%M%S).sql
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- [ ] 数据库已备份
|
|||
|
|
- [ ] 备份文件已验证
|
|||
|
|
|
|||
|
|
### 步骤 2: 执行数据库修改(可选但推荐)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
mysql -u root -p fastadmin < "开发/2026年2月4日/音乐库唱歌视频数据库修改.sql"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**验证**:
|
|||
|
|
```sql
|
|||
|
|
-- 查看表结构
|
|||
|
|
SHOW COLUMNS FROM nf_sing_song_video;
|
|||
|
|
|
|||
|
|
-- 应该看到新字段:
|
|||
|
|
-- music_library_id
|
|||
|
|
-- music_source
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- [ ] SQL 执行成功
|
|||
|
|
- [ ] 新字段已添加
|
|||
|
|
- [ ] 索引已创建
|
|||
|
|
|
|||
|
|
### 步骤 3: 重启 Python 后端
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 停止现有服务
|
|||
|
|
# Ctrl+C 或关闭终端
|
|||
|
|
|
|||
|
|
# 启动新服务
|
|||
|
|
cd lover
|
|||
|
|
python -m uvicorn main:app --host 0.0.0.0 --port 30101 --reload
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**验证**:
|
|||
|
|
- [ ] 服务启动成功
|
|||
|
|
- [ ] 无错误日志
|
|||
|
|
- [ ] 可以访问 http://localhost:30101/docs
|
|||
|
|
- [ ] 可以看到新 API: `POST /music/convert-to-song`
|
|||
|
|
|
|||
|
|
### 步骤 4: 测试后端 API
|
|||
|
|
|
|||
|
|
#### 4.1 使用 Swagger UI 测试
|
|||
|
|
|
|||
|
|
1. 访问 http://localhost:30101/docs
|
|||
|
|
2. 找到 `POST /music/convert-to-song`
|
|||
|
|
3. 点击 "Try it out"
|
|||
|
|
4. 输入 `music_id: 1`
|
|||
|
|
5. 点击 "Execute"
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 1,
|
|||
|
|
"message": "success",
|
|||
|
|
"data": {
|
|||
|
|
"song_id": 123,
|
|||
|
|
"title": "Sunny",
|
|||
|
|
"from_cache": false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- [ ] API 调用成功
|
|||
|
|
- [ ] 返回 song_id
|
|||
|
|
- [ ] 数据正确
|
|||
|
|
|
|||
|
|
#### 4.2 使用测试脚本
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. 编辑测试脚本,设置 TOKEN
|
|||
|
|
notepad test_music_library_sing.py
|
|||
|
|
|
|||
|
|
# 2. 运行测试
|
|||
|
|
python test_music_library_sing.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- [ ] 转换音乐 - 成功
|
|||
|
|
- [ ] 拒绝外部链接 - 成功
|
|||
|
|
- [ ] 生成视频 - 成功
|
|||
|
|
- [ ] 查询任务 - 成功
|
|||
|
|
- [ ] 获取历史 - 成功
|
|||
|
|
|
|||
|
|
### 步骤 5: 修改前端代码
|
|||
|
|
|
|||
|
|
按照 `音乐库唱歌视频前端修改指南.md` 修改前端代码。
|
|||
|
|
|
|||
|
|
**修改位置**: `xuniYou/pages/index/index.vue`
|
|||
|
|
|
|||
|
|
1. 找到 `selectMusicFromLibrary` 方法(约第 2387 行)
|
|||
|
|
2. 替换方法内容
|
|||
|
|
3. 添加 `generateSingVideoFromLibrary` 方法
|
|||
|
|
4. 添加 `generateSingVideoWithSongId` 方法
|
|||
|
|
|
|||
|
|
- [ ] 前端代码已修改
|
|||
|
|
- [ ] 代码语法正确
|
|||
|
|
- [ ] 方法添加完整
|
|||
|
|
|
|||
|
|
### 步骤 6: 前端测试
|
|||
|
|
|
|||
|
|
#### 6.1 基本功能测试
|
|||
|
|
|
|||
|
|
1. 打开应用
|
|||
|
|
2. 进入"唱歌"页面
|
|||
|
|
3. 切换到"音乐库" tab
|
|||
|
|
4. 点击一首直链音乐(Bensound)
|
|||
|
|
5. 确认生成
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- [ ] 显示"准备中..."
|
|||
|
|
- [ ] 显示"生成中..."
|
|||
|
|
- [ ] 自动切换到"历史记录" tab
|
|||
|
|
- [ ] 生成成功后显示视频
|
|||
|
|
|
|||
|
|
#### 6.2 外部链接测试
|
|||
|
|
|
|||
|
|
1. 点击一首外部链接音乐(网易云)
|
|||
|
|
2. 查看提示
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- [ ] 显示"外部平台音乐无法生成视频"提示
|
|||
|
|
- [ ] 不会开始生成
|
|||
|
|
|
|||
|
|
#### 6.3 历史记录测试
|
|||
|
|
|
|||
|
|
1. 切换到"历史记录" tab
|
|||
|
|
2. 查看生成的视频
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- [ ] 显示新生成的视频
|
|||
|
|
- [ ] 可以播放视频
|
|||
|
|
- [ ] 显示正确的标题
|
|||
|
|
|
|||
|
|
#### 6.4 缓存测试
|
|||
|
|
|
|||
|
|
1. 再次点击相同的音乐
|
|||
|
|
2. 确认生成
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- [ ] 立即生成成功(有缓存)
|
|||
|
|
- [ ] 不需要等待
|
|||
|
|
- [ ] 复用之前的视频
|
|||
|
|
|
|||
|
|
## ✅ 部署后验证
|
|||
|
|
|
|||
|
|
### 1. 功能验证
|
|||
|
|
|
|||
|
|
- [ ] 可以转换音乐为系统歌曲
|
|||
|
|
- [ ] 可以生成唱歌视频
|
|||
|
|
- [ ] 可以查看历史记录
|
|||
|
|
- [ ] 外部链接被正确拒绝
|
|||
|
|
- [ ] 缓存机制正常工作
|
|||
|
|
|
|||
|
|
### 2. 数据验证
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
-- 查询转换的系统歌曲
|
|||
|
|
SELECT id, title, artist, gender, audio_hash
|
|||
|
|
FROM nf_song_library
|
|||
|
|
WHERE createtime > UNIX_TIMESTAMP(NOW() - INTERVAL 1 DAY)
|
|||
|
|
ORDER BY id DESC
|
|||
|
|
LIMIT 10;
|
|||
|
|
|
|||
|
|
-- 查询生成的视频
|
|||
|
|
SELECT id, user_id, song_id, music_library_id, music_source, status
|
|||
|
|
FROM nf_sing_song_video
|
|||
|
|
WHERE created_at > NOW() - INTERVAL 1 DAY
|
|||
|
|
ORDER BY id DESC
|
|||
|
|
LIMIT 10;
|
|||
|
|
|
|||
|
|
-- 查询生成任务
|
|||
|
|
SELECT id, user_id, task_type, status, payload
|
|||
|
|
FROM nf_generation_tasks
|
|||
|
|
WHERE task_type = 'video'
|
|||
|
|
AND created_at > NOW() - INTERVAL 1 DAY
|
|||
|
|
ORDER BY id DESC
|
|||
|
|
LIMIT 10;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- [ ] 数据正确
|
|||
|
|
- [ ] 无重复记录
|
|||
|
|
- [ ] 关联正确
|
|||
|
|
|
|||
|
|
### 3. 性能验证
|
|||
|
|
|
|||
|
|
- [ ] API 响应时间 < 500ms
|
|||
|
|
- [ ] 视频生成时间正常
|
|||
|
|
- [ ] 无内存泄漏
|
|||
|
|
- [ ] 无数据库连接泄漏
|
|||
|
|
|
|||
|
|
### 4. 日志检查
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看后端日志
|
|||
|
|
tail -f lover/logs/app.log
|
|||
|
|
|
|||
|
|
# 查看数据库日志
|
|||
|
|
tail -f /var/log/mysql/error.log
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- [ ] 无错误日志
|
|||
|
|
- [ ] 无警告日志
|
|||
|
|
- [ ] API 调用正常
|
|||
|
|
|
|||
|
|
## 🔄 回滚计划
|
|||
|
|
|
|||
|
|
如果部署失败,按以下步骤回滚:
|
|||
|
|
|
|||
|
|
### 1. 恢复数据库
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 恢复备份
|
|||
|
|
mysql -u root -p fastadmin < backup_before_music_sing_YYYYMMDD_HHMMSS.sql
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 恢复代码
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 使用 Git 回滚
|
|||
|
|
git checkout HEAD~1 lover/models.py
|
|||
|
|
git checkout HEAD~1 lover/routers/music_library.py
|
|||
|
|
git checkout HEAD~1 lover/routers/sing.py
|
|||
|
|
git checkout HEAD~1 xuniYou/pages/index/index.vue
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 重启服务
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd lover
|
|||
|
|
python -m uvicorn main:app --host 0.0.0.0 --port 30101 --reload
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📊 部署结果
|
|||
|
|
|
|||
|
|
### 成功标准
|
|||
|
|
|
|||
|
|
- ✅ 所有测试通过
|
|||
|
|
- ✅ 无错误日志
|
|||
|
|
- ✅ 性能正常
|
|||
|
|
- ✅ 数据完整
|
|||
|
|
- ✅ 用户体验良好
|
|||
|
|
|
|||
|
|
### 部署记录
|
|||
|
|
|
|||
|
|
- **部署日期**: ___________
|
|||
|
|
- **部署人员**: ___________
|
|||
|
|
- **部署结果**: [ ] 成功 [ ] 失败
|
|||
|
|
- **问题记录**: ___________
|
|||
|
|
- **解决方案**: ___________
|
|||
|
|
|
|||
|
|
## 📞 问题处理
|
|||
|
|
|
|||
|
|
### 常见问题
|
|||
|
|
|
|||
|
|
**问题 1: 转换 API 返回 404**
|
|||
|
|
```
|
|||
|
|
解决方案:
|
|||
|
|
1. 检查后端是否重启
|
|||
|
|
2. 检查 API 路由是否正确
|
|||
|
|
3. 查看后端日志
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**问题 2: 生成视频失败**
|
|||
|
|
```
|
|||
|
|
解决方案:
|
|||
|
|
1. 检查视频生成次数
|
|||
|
|
2. 检查音乐 URL 是否可访问
|
|||
|
|
3. 检查恋人形象是否存在
|
|||
|
|
4. 查看任务错误信息
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**问题 3: 前端无法调用 API**
|
|||
|
|
```
|
|||
|
|
解决方案:
|
|||
|
|
1. 检查 TOKEN 是否有效
|
|||
|
|
2. 检查 API 地址是否正确
|
|||
|
|
3. 检查网络连接
|
|||
|
|
4. 查看浏览器控制台
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**问题 4: 历史记录不显示**
|
|||
|
|
```
|
|||
|
|
解决方案:
|
|||
|
|
1. 刷新页面
|
|||
|
|
2. 检查 API 返回数据
|
|||
|
|
3. 检查数据库记录
|
|||
|
|
4. 查看前端日志
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📝 部署签名
|
|||
|
|
|
|||
|
|
- **部署人员**: ___________
|
|||
|
|
- **审核人员**: ___________
|
|||
|
|
- **部署日期**: ___________
|
|||
|
|
- **签名**: ___________
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**部署清单版本**: 1.0
|
|||
|
|
**更新时间**: 2026-02-04
|
|||
|
|
**状态**: 待部署
|