5.6 KiB
5.6 KiB
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
操作规范
- 数据库修改前必须备份
- 部署默认正式系统,明确要求才部署影子
- 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