478 lines
16 KiB
Markdown
478 lines
16 KiB
Markdown
# 实施计划:从正式系统恢复源码
|
||
|
||
## 概述
|
||
|
||
**重要发现**:
|
||
- 生产容器使用 Next.js standalone 模式部署,只包含编译后的代码
|
||
- **2.2.0版本的TypeScript源码已丢失**
|
||
- 服务器上只有1.0.0版本的旧源码
|
||
|
||
**恢复策略**:
|
||
1. ✅ 从生产容器提取编译后的代码(已完成)
|
||
2. **反编译编译后的JavaScript代码,恢复TypeScript源码**
|
||
3. 对比本地1.0.0源码,补充缺失部分
|
||
4. 重建完整的2.2.0版本源码
|
||
5. 在影子系统测试验证
|
||
6. 部署到生产系统
|
||
|
||
本计划描述了从编译代码反编译恢复源码、构建验证、部署测试的完整步骤。
|
||
|
||
## 任务
|
||
|
||
- [x] 1. 连接正式系统并提取编译后的代码(只读操作)
|
||
- ✅ 已确认:生产容器只有编译后的代码(.next目录)
|
||
- ✅ 已下载:编译后的API代码(nextjs-api-compiled.tar.gz)
|
||
- ✅ 已下载:完整的.next构建目录(nextjs-full-build.tar.gz)
|
||
- ✅ 已下载:生产配置文件(package.json等)
|
||
- 📋 结论:**必须通过反编译恢复源码**
|
||
- _需求: 1.1, 1.2, 1.3, 1.4_
|
||
|
||
- [ ] 2. 反编译JavaScript代码恢复TypeScript源码
|
||
- [ ] 2.1 分析编译后的代码结构
|
||
- 查看 nextjs-build/.next/server/app 目录结构
|
||
- 识别所有API路由文件
|
||
- 识别所有页面组件文件
|
||
- 列出需要反编译的文件清单
|
||
- _需求: 2.1_
|
||
|
||
- [ ] 2.2 反编译API路由代码
|
||
- 反编译 app/api/materials/route.js → route.ts
|
||
- 反编译 app/api/materials/stats/route.js → route.ts
|
||
- 反编译 app/api/materials/download/route.js → route.ts
|
||
- 反编译 app/api/materials/upload/route.js → route.ts
|
||
- 反编译 app/api/categories/route.js → route.ts
|
||
- 反编译其他API路由文件
|
||
- _需求: 2.1, 2.2_
|
||
|
||
- [ ] 2.3 反编译页面组件代码
|
||
- 反编译 app/page.js → page.tsx
|
||
- 反编译 app/profile/page.js → page.tsx
|
||
- 反编译 app/admin/page.js → page.tsx
|
||
- 反编译 app/edit/[id]/page.js → page.tsx
|
||
- 反编译其他页面文件
|
||
- _需求: 2.1, 2.2_
|
||
|
||
- [ ] 2.4 反编译工具库代码
|
||
- 从编译代码中提取 lib/prisma.ts
|
||
- 从编译代码中提取 lib/s3.ts
|
||
- 从编译代码中提取其他lib文件
|
||
- _需求: 2.1, 2.2_
|
||
|
||
- [ ] 2.5 对比本地1.0.0源码
|
||
- 对比反编译代码与本地代码的差异
|
||
- 识别新增的功能和文件
|
||
- 识别修改的逻辑
|
||
- 生成差异报告
|
||
- _需求: 2.3_
|
||
|
||
- [ ] 2.6 补充缺失的源码文件
|
||
- 从本地1.0.0复制未改动的文件
|
||
- 合并反编译代码和本地代码
|
||
- 补充类型定义文件
|
||
- 补充配置文件
|
||
- _需求: 2.3_
|
||
|
||
- [ ] 2.7 重建完整的项目结构
|
||
- 创建完整的 app/ 目录结构
|
||
- 创建完整的 components/ 目录
|
||
- 创建完整的 lib/ 目录
|
||
- 创建完整的 prisma/ 目录
|
||
- 确保所有import路径正确
|
||
- _需求: 2.4_
|
||
|
||
- [ ] 3. 检查点 - 审查反编译结果
|
||
- 确认所有关键文件都已反编译
|
||
- 确认代码逻辑完整
|
||
- 询问用户是否继续构建
|
||
|
||
- [ ] 4. 验证环境配置(关键步骤!)
|
||
- [ ] 4.1 检查 `.env` 文件
|
||
- ⚠️ **必须确认**以下配置:
|
||
- `DATABASE_URL` 包含 `lobechat_stage`(不是 `lobechat`)
|
||
- `REDIS_PORT=6380`(不是 `6379`)
|
||
- `NEXTAUTH_URL` 指向影子系统端口 5320
|
||
- _需求: 4.1, 4.3_
|
||
|
||
- [ ] 4.2 检查部署脚本
|
||
- 确认 `deploy-local-build.ps1` 存在
|
||
- 确认使用 `-Target shadow` 参数会操作影子系统容器
|
||
- _需求: 4.1, 4.3_
|
||
|
||
- [ ] 5. 验证文件完整性
|
||
- [ ] 5.1 检查关键 API 路由
|
||
- 验证 app/api/materials/route.ts 存在
|
||
- 验证 app/api/materials/download/route.ts 存在
|
||
- 验证 app/api/materials/favorite/route.ts 存在
|
||
- 验证 app/api/user/materials/route.ts 存在
|
||
- 验证 app/api/admin/users/route.ts 存在
|
||
- _需求: 3.1_
|
||
|
||
- [ ] 5.2 检查关键页面组件
|
||
- 验证 app/page.tsx 存在
|
||
- 验证 app/profile/page.tsx 存在
|
||
- 验证 app/admin/page.tsx 存在
|
||
- 验证 app/edit/[id]/page.tsx 存在
|
||
- _需求: 3.2_
|
||
|
||
- [ ] 5.3 检查工具库文件
|
||
- 验证 lib/prisma.ts 存在
|
||
- 验证 lib/s3.ts 存在
|
||
- 验证 lib/chunk-upload.ts 存在
|
||
- 验证 lib/image-processor.ts 存在
|
||
- 验证 lib/video-processor.ts 存在
|
||
- _需求: 3.3_
|
||
|
||
- [ ] 5.4 生成功能完整性报告
|
||
- 列出所有已验证的文件
|
||
- 标注缺失的文件(如有)
|
||
- _需求: 3.4_
|
||
|
||
- [ ] 6. 检查点 - 审查完整性报告
|
||
- 确认所有关键文件都已恢复
|
||
- 询问用户是否继续构建
|
||
|
||
- [ ] 7. 安装依赖并构建项目
|
||
- [ ] 7.1 安装 npm 依赖
|
||
- 执行 `npm install`
|
||
- 检查是否有依赖安装错误
|
||
- _需求: 5.1_
|
||
|
||
- [ ] 7.2 执行项目构建
|
||
- 执行 `npm run build`
|
||
- 监控构建过程
|
||
- _需求: 5.2_
|
||
|
||
- [ ] 7.3 处理构建错误(如有)
|
||
- 查看构建日志
|
||
- 识别错误原因
|
||
- 修复错误并重新构建
|
||
- _需求: 5.3_
|
||
|
||
- [ ] 7.4 验证构建输出
|
||
- 检查 .next 目录是否存在
|
||
- 检查 .next/server 目录是否包含必要文件
|
||
- 检查 .next/static 目录是否包含静态资源
|
||
- _需求: 5.4_
|
||
|
||
- [ ] 8. 检查点 - 确认构建成功并验证环境配置
|
||
- 确认构建无错误
|
||
- ⚠️ **关键检查**: 打开 `.env` 文件,逐行验证:
|
||
- [ ] `DATABASE_URL` 包含 `lobechat_stage`
|
||
- [ ] `REDIS_PORT=6380`
|
||
- [ ] `NEXTAUTH_URL` 包含端口 `5320`
|
||
- [ ] 没有任何配置指向正式系统
|
||
- 询问用户确认环境配置正确后再继续部署
|
||
|
||
- [ ] 9. 部署到影子系统(严格验证环境隔离)
|
||
- [ ] 9.1 部署前最终检查
|
||
- ⚠️ **停止!先完成以下检查**:
|
||
- [ ] 确认 `deploy-local-build.ps1` 脚本存在
|
||
- [ ] 打开脚本,确认 `-Target shadow` 参数会:
|
||
- 操作容器 `youyidian-3d-material-shadow`(不是 `youyidian-3d-material`)
|
||
- 使用端口 `5320`(不是 `4320`)
|
||
- 使用数据库 `lobechat_stage`(不是 `lobechat`)
|
||
- [ ] 确认 `.env` 文件配置正确(再次检查)
|
||
- _需求: 6.1, 6.2_
|
||
|
||
- [ ] 9.2 执行部署脚本
|
||
- 运行 `.\deploy-local-build.ps1 -Target shadow`
|
||
- 监控部署过程,注意任何错误信息
|
||
- ⚠️ 如果看到任何关于正式系统的提示,**立即停止**
|
||
- _需求: 6.1, 6.2_
|
||
|
||
- [ ] 9.3 验证容器状态
|
||
- 检查影子系统容器 `youyidian-3d-material-shadow` 是否正在运行
|
||
- 检查容器日志是否有错误
|
||
- ⚠️ **同时检查**正式系统容器 `youyidian-3d-material` 状态,确认未受影响
|
||
- _需求: 6.3_
|
||
|
||
- [ ] 9.4 验证网络访问
|
||
- 使用浏览器访问 http://192.168.58.20:5320
|
||
- 确认页面能够正常加载
|
||
- ⚠️ **不要访问** http://192.168.58.20:4320(正式系统)
|
||
- _需求: 6.4_
|
||
|
||
- [ ] 9.5 验证数据库连接
|
||
- 在影子系统上执行一个简单操作(如查看素材列表)
|
||
- 通过数据库工具连接 `lobechat_stage`,确认有新的操作记录
|
||
- ⚠️ **同时检查** `lobechat` 数据库,确认没有新的记录(证明影子系统没有连接到正式数据库)
|
||
- _需求: 6.3_
|
||
|
||
- [ ] 10. 功能测试 - 用户认证
|
||
- [ ] 10.1 测试钉钉登录
|
||
- 点击钉钉登录按钮
|
||
- 完成钉钉授权流程
|
||
- 验证登录成功
|
||
- _需求: 7.1_
|
||
|
||
- [ ] 10.2 测试邮箱登录
|
||
- 使用测试账号登录
|
||
- 验证登录成功
|
||
- _需求: 7.1_
|
||
|
||
- [ ] 11. 功能测试 - 素材管理
|
||
- [ ] 11.1 测试素材浏览
|
||
- 访问首页
|
||
- 验证瀑布流布局正常显示
|
||
- 验证素材卡片信息完整
|
||
- _需求: 7.2_
|
||
|
||
- [ ] 11.2 测试素材筛选
|
||
- 测试按素材类型筛选
|
||
- 测试按使用店铺筛选
|
||
- 测试按场景类别筛选
|
||
- 测试按产品类别筛选
|
||
- 测试按月份筛选
|
||
- _需求: 7.3_
|
||
|
||
- [ ] 11.3 测试搜索功能
|
||
- 在搜索框输入关键词
|
||
- 验证防抖处理(输入后500ms才触发搜索)
|
||
- 验证搜索结果正确
|
||
- _需求: 7.4_
|
||
|
||
- [ ] 11.4 测试滚动位置保存
|
||
- 滚动到页面中间位置
|
||
- 点击某个素材进入详情页
|
||
- 返回首页
|
||
- 验证滚动位置保持不变
|
||
- _需求: 7.5_
|
||
|
||
- [ ] 11.5 测试素材上传
|
||
- 点击上传按钮
|
||
- 选择素材类型
|
||
- 上传文件
|
||
- 验证上传成功
|
||
- _需求: 7.2_
|
||
|
||
- [ ] 11.6 测试素材下载
|
||
- 点击下载按钮
|
||
- 验证下载开始
|
||
- 验证下载完成
|
||
- _需求: 7.2_
|
||
|
||
- [ ] 11.7 测试模特类素材下载
|
||
- 找到一个模特类素材
|
||
- 点击下载按钮
|
||
- 验证自动打包成 ZIP 文件
|
||
- 验证 ZIP 文件包含所有图片
|
||
- _需求: 7.6_
|
||
|
||
- [ ] 11.8 测试素材编辑
|
||
- 点击编辑按钮
|
||
- 修改素材信息
|
||
- 保存修改
|
||
- 验证修改成功
|
||
- _需求: 7.2_
|
||
|
||
- [ ] 11.9 测试点赞功能
|
||
- 点击点赞按钮
|
||
- 验证点赞数增加
|
||
- 再次点击取消点赞
|
||
- 验证点赞数减少
|
||
- _需求: 7.2_
|
||
|
||
- [ ] 11.10 测试收藏功能
|
||
- 点击收藏按钮
|
||
- 验证收藏成功提示
|
||
- 在个人中心查看收藏列表
|
||
- 验证素材已收藏
|
||
- _需求: 7.2_
|
||
|
||
- [ ] 12. 功能测试 - 管理员功能
|
||
- [ ] 12.1 测试用户管理
|
||
- 访问管理员页面
|
||
- 查看用户列表
|
||
- 测试用户搜索
|
||
- 测试权限管理
|
||
- _需求: 7.7_
|
||
|
||
- [ ] 12.2 测试素材管理
|
||
- 查看所有素材列表
|
||
- 测试素材编辑
|
||
- 测试素材删除(软删除)
|
||
- _需求: 7.7_
|
||
|
||
- [ ] 12.3 测试回收站
|
||
- 查看回收站
|
||
- 测试恢复素材
|
||
- 测试永久删除
|
||
- _需求: 7.7_
|
||
|
||
- [ ] 12.4 测试分类管理
|
||
- 测试使用店铺管理
|
||
- 测试场景类别管理
|
||
- 测试平台分类管理
|
||
- 测试产品类别管理
|
||
- _需求: 7.7_
|
||
|
||
- [ ] 13. 功能测试 - 辅助功能
|
||
- [ ] 13.1 测试排行榜
|
||
- 打开排行榜面板
|
||
- 查看下载榜
|
||
- 查看上传榜
|
||
- 查看点赞榜
|
||
- 测试拖动功能
|
||
- _需求: 7.7_
|
||
|
||
- [ ] 13.2 测试 AI 聊天
|
||
- 打开 AI 聊天窗口
|
||
- 发送测试消息
|
||
- 验证 AI 回复
|
||
- _需求: 7.7_
|
||
|
||
- [ ] 13.3 测试网络诊断
|
||
- 打开网络诊断弹窗
|
||
- 执行下载测速
|
||
- 执行上传测速
|
||
- 查看诊断结果
|
||
- _需求: 7.7_
|
||
|
||
- [ ] 14. 检查点 - 审查测试结果并验证正式系统未受影响
|
||
- 汇总所有测试结果
|
||
- 识别失败的测试项
|
||
- ⚠️ **关键验证**:
|
||
- [ ] 访问正式系统 http://192.168.58.20:4320,确认正常运行
|
||
- [ ] 检查正式系统数据库 `lobechat`,确认没有测试数据
|
||
- [ ] 检查正式系统容器日志,确认没有异常
|
||
- 询问用户是否需要修复失败的测试项
|
||
|
||
- [ ] 15. 生成测试报告
|
||
- [ ] 15.1 创建功能测试报告
|
||
- 列出所有测试项
|
||
- 标注通过/失败状态
|
||
- 记录测试时间
|
||
- _需求: 7.1-7.7_
|
||
|
||
- [ ] 15.2 对比正式系统和影子系统
|
||
- 列出功能差异
|
||
- 分析差异原因
|
||
- 提出修复建议
|
||
- _需求: 7.1-7.7_
|
||
|
||
- [ ] 16. 更新文档
|
||
- [ ] 16.1 更新功能恢复进度文档
|
||
- 记录恢复的文件列表
|
||
- 记录测试结果
|
||
- 更新完成状态
|
||
- _需求: 8.1, 8.4_
|
||
|
||
- [ ] 16.2 记录问题和解决方案
|
||
- 记录遇到的问题
|
||
- 记录解决方案
|
||
- 提供参考链接
|
||
- _需求: 8.2_
|
||
|
||
- [ ] 16.3 更新部署文档
|
||
- 更新部署步骤
|
||
- 更新配置说明
|
||
- 更新注意事项
|
||
- _需求: 8.3_
|
||
|
||
- [ ] 17. 最终检查点
|
||
- 确认所有功能已恢复
|
||
- 确认所有测试已通过
|
||
- 确认文档已更新
|
||
- 询问用户是否可以部署到正式系统
|
||
|
||
- [ ] 18. (可选)修复已知BUG
|
||
- ⚠️ **注意**: 此任务仅在源码恢复完成后,如果需要修复BUG时执行
|
||
- [ ] 18.1 修复统计API(如需要)
|
||
- 文件: `app/api/materials/stats/route.ts`
|
||
- 问题: 统计可能包含软删除数据
|
||
- 修复: 添加 `where: { deletedAt: null }` 过滤
|
||
- _需求: 可选_
|
||
|
||
- [ ] 18.2 修复分页API(如需要)
|
||
- 文件: `app/api/materials/route.ts`
|
||
- 问题: 分页逻辑可能有问题
|
||
- 修复: 确认 skip 和 take 参数正确应用
|
||
- _需求: 可选_
|
||
|
||
- [ ] 18.3 修复分类统计(如需要)
|
||
- 文件: `app/api/categories/route.ts`
|
||
- 问题: 分类统计可能包含软删除数据
|
||
- 修复: 添加 `deletedAt: null` 过滤
|
||
- _需求: 可选_
|
||
|
||
## ⚠️ 重要注意事项
|
||
|
||
### 🔴 环境隔离 - 绝对不能混淆!
|
||
|
||
**正式系统配置(端口 4320):**
|
||
- 数据库:`lobechat`(192.168.58.20:5432)
|
||
- Redis:端口 `6379`
|
||
- 容器名:`youyidian-3d-material`
|
||
- 文件存储:容器内 `/app/uploads`
|
||
- S3存储:`https://s3.yydd.ai/gongxiangpan`(生产数据)
|
||
|
||
**影子系统配置(端口 5320):**
|
||
- 数据库:`lobechat_stage`(192.168.58.20:5432)
|
||
- Redis:端口 `6380`
|
||
- 容器名:`youyidian-3d-material-shadow`
|
||
- 文件存储:容器内 `/app/uploads`(独立目录)
|
||
- S3存储:`https://s3.yydd.ai/gongxiangpan`(可能共享,但要注意文件前缀)
|
||
|
||
### 🚨 关键操作规则
|
||
|
||
1. **只读访问正式系统**:
|
||
- 只从正式系统**读取**源码文件
|
||
- 绝对不要修改正式系统的任何文件
|
||
- 绝对不要在正式系统容器内执行写操作
|
||
|
||
2. **环境变量检查**:
|
||
- 提取源码后,**必须**检查 `.env` 文件
|
||
- **必须**确认数据库连接指向 `lobechat_stage`
|
||
- **必须**确认 Redis 端口是 `6380`
|
||
- **绝对不要**使用正式系统的 `.env` 配置
|
||
|
||
3. **数据库隔离**:
|
||
- 影子系统**只能**连接 `lobechat_stage` 数据库
|
||
- 部署前**必须**验证数据库配置
|
||
- 如果连接错误,**立即停止**部署
|
||
|
||
4. **文件存储隔离**:
|
||
- 影子系统的 uploads 目录与正式系统完全独立
|
||
- 不要挂载正式系统的 uploads 目录
|
||
- S3 存储如果共享,要注意文件命名避免冲突
|
||
|
||
5. **部署验证**:
|
||
- 部署到影子系统前,**必须**检查 `deploy-local-build.ps1` 脚本
|
||
- **必须**确认使用 `-Target shadow` 参数
|
||
- **必须**确认脚本不会影响正式系统容器
|
||
|
||
6. **测试隔离**:
|
||
- 所有测试**只在**影子系统(5320端口)进行
|
||
- 测试数据**只写入** `lobechat_stage` 数据库
|
||
- 绝对不要在正式系统上进行任何测试操作
|
||
|
||
### 📋 部署前检查清单
|
||
|
||
在执行任务 9(部署到影子系统)之前,**必须**完成以下检查:
|
||
|
||
- [ ] 确认 `.env` 文件中 `DATABASE_URL` 包含 `lobechat_stage`
|
||
- [ ] 确认 `.env` 文件中 `REDIS_PORT=6380`
|
||
- [ ] 确认 `deploy-local-build.ps1` 使用 `-Target shadow` 参数
|
||
- [ ] 确认部署脚本不会操作 `youyidian-3d-material` 容器
|
||
- [ ] 确认部署脚本只操作 `youyidian-3d-material-shadow` 容器
|
||
- [ ] 确认 Docker Compose 配置(如有)使用正确的端口和数据库
|
||
|
||
### 🛡️ 安全措施
|
||
|
||
1. **备份**: 虽然只读访问正式系统,但建议先备份正式系统数据库
|
||
2. **监控**: 部署后监控正式系统,确认没有受到影响
|
||
3. **回滚**: 如果影子系统出现问题,可以快速停止容器,不影响正式系统
|
||
|
||
## 预计时间
|
||
|
||
- 任务 1: 提取编译代码 - ✅ 已完成
|
||
- 任务 2: 反编译恢复源码 - **120 分钟**(核心任务)
|
||
- 任务 3-4: 环境配置和验证 - 20 分钟
|
||
- 任务 5-6: 文件完整性验证 - 20 分钟
|
||
- 任务 7-8: 构建验证 - 15 分钟
|
||
- 任务 9: 部署到影子系统 - 20 分钟
|
||
- 任务 10-13: 功能测试 - 60 分钟
|
||
- 任务 14-17: 报告和文档 - 25 分钟
|
||
|
||
**总计**: 约 **4.5 小时**(反编译是最耗时的部分)
|