gongxiangp2/.kiro/steering/项目记忆库.md

5.6 KiB
Raw Blame History

inclusion
inclusion
always

由壹点3D素材平台 - 项目记忆库

企业内部素材分享系统,支持15种素材类型的上传、管理和下载。


用户偏好

  • 能用中文就用中文(文档、注释)
  • 不写不重要的文档
  • 不喜欢垃圾文件、残留文件
  • 修复原则: 优先找到问题根源彻底解决,不要打补丁(除非不得已)

技术栈

Next.js 14 + React 18 + TypeScript + TailwindCSS + Prisma + PostgreSQL + MinIO S3 + NextAuth + 钉钉登录

处理库:FFmpeg(视频)、Sharp(图片)、music-metadata(音频)、ag-psd(PSD)


生产环境

  • 数据库: lobechat @ 192.168.58.20:5432(影子: lobechat_stage)
  • S3: https://s3.yydd.ai,Bucket: gongxiangpan,前缀: 由壹点AI/
  • 正式: 端口4320 | 影子: 端口5320
  • 本地存储: /mnt/PoolOne/apps/youyidian-3d/uploads

SSH 远程调用

推荐方式:使用专用查询脚本

# 查询3D原图等类型的资产信息
.\scripts\query-3d-original-assets.ps1

# 查询所有素材类型
.\scripts\query-material-types.ps1

# 指定正式环境
.\scripts\query-3d-original-assets.ps1 -Target production

原始方式(如需手动调用):

# 使用 ssh(推荐)
ssh root@192.168.58.20 '命令'

# 查询数据库(通过 PostgreSQL 容器)
ssh root@192.168.58.20 "docker exec -i gongxiangpan-postgres-1 psql -U gongxiangpan -d lobechat -c 'SQL语句'"

注意事项:

  • PostgreSQL 容器名:gongxiangpan-postgres-1
  • 数据库表名:materials(复数,全小写)
  • 列名:驼峰式(如 materialType),需要用双引号包裹
  • 外键列名:下划线式(如 material_id),不需要引号
  • 复杂 SQL 查询建议使用专用脚本(Base64 编码避免引号问题)

分界点:2025-10-27

项目 老素材 新素材
S3 s3.1080p.hk/jsxiangche s3.yydd.ai/gongxiangpan/由壹点AI/
识别 previewUrl不含由壹点AI/ previewUrl含由壹点AI/

原则: 不改老素材 | 视频/音频存本地(MinIO机械盘慢)| 下载兼容新老路径


关键文件

  • 上传: components/UploadModal.tsx、components/upload/
  • API: app/api/materials/upload/(含init/chunk/complete)、download/、transcode/
  • Lib: lib/s3.ts、lib/video-processor.ts、lib/url-rewrite.ts

文件命名

  • 视频: video-{ts}-{hash}.mp4(不是video-source)
  • 音频: audio-source-{id}-{ts}.mp3
  • 其他: material-{ts}-{hash}.zip

要点

  • 分片上传: >5MB自动启用,IndexedDB断点续传
  • 视频转码: 自动触发,720P预览+10秒片段+封面,状态pending→processing→done/failed
  • 图片: 预览图压缩800×2000,展示图>1500px自动切片
  • 数据库: 所有查询必须 deletedAt: null

操作规范

  1. 数据库修改前必须备份
  2. 部署默认正式系统,明确要求才部署影子
  3. uploads目录不可删除

部署方式:

  • 本地构建:.\deploy-local-build.ps1(影子加 -Target shadow)
  • 远程构建(内网):.\deploy-remote-build.ps1(使用专用构建机)
  • 远程构建(公网):.\deploy-public-build.ps1(通过frp内网穿透)

专用构建机部署

构建机: 192.168.42.134(Ubuntu,密码:Jsjj@8888)

架构: 本地电脑 → 构建机(构建+Registry)→ 生产服务器(SSH密钥免密登录)

组件:

  • Docker Compose v5.0.1
  • Registry API: http://192.168.42.134:5000
  • Registry UI: http://192.168.42.134:5001
  • SSH 免密登录(构建机 → 生产服务器)
  • Clash 代理:127.0.0.1:7897(已运行,可选使用)

部署命令:

# 内网部署 - 影子系统
.\deploy-remote-build.ps1 -Target shadow

# 内网部署 - 正式系统
.\deploy-remote-build.ps1 -Target production

# 公网部署 - 影子系统
.\deploy-public-build.ps1 -Target shadow

# 公网部署 - 正式系统
.\deploy-public-build.ps1 -Target production

智能缓存:

  • 自动检测依赖文件变化(package-lock.json)
  • 只有依赖变化时才重新构建
  • Docker 层缓存自动复用(依赖安装层会被缓存)
  • 基础镜像预先缓存(使用本地 node:18-alpine)
  • npm 使用淘宝镜像加速(https://registry.npmmirror.com)

构建优化:

  • 首次构建:约 3-5 分钟(下载依赖)
  • 后续构建:约 1-2 分钟(利用 Docker 层缓存)
  • 镜像大小:约 580MB
  • 容器启动:约 120ms

优势:

  • 保护本地 SSD(构建在远程)
  • 智能缓存(大幅减少构建时间)
  • 可视化管理(Registry UI)
  • 镜像版本管理
  • 代码传输小(15MB),镜像走内网

安全保证:

  • ❌ 不操作 uploads 目录(只挂载)
  • ❌ 不操作数据库
  • ❌ 不操作存储桶
  • ✅ 只操作应用容器和 Docker 资源

关键配置:

  • 基础镜像:node:18-alpine(Alpine Linux 3.21)
  • Prisma 引擎:binaryTargets = ["native", "linux-musl-openssl-3.0.x"]
  • 依赖安装:直接 npm install,利用 Docker 层缓存
  • 构建时警告:DATABASE_URL 缺失警告可忽略(运行时从环境变量读取)

故障排查:

  • 如遇 Docker Hub 超时:使用本地已有镜像或淘宝镜像
  • 如遇 Prisma OpenSSL 警告:可忽略,不影响运行
  • 如遇 Sharp 错误:npm install 会自动下载正确版本

终端提示

推荐 Git Bash 作为默认终端(PowerShell批量操作语法差)

VSCode: terminal.integrated.defaultProfile.windows: "Git Bash"


更新: 2025-01-19