gongxiangp2/docs/生产存储桶接入信息.md
chenpei 7326e273e1 fix: harden media upload and release safety
Protect upload cleanup and atomic completion paths, add durable media worker leases and brand asset validation, and introduce verified migration/bootstrap/deployment gates.
2026-08-12 18:04:08 +08:00

5.4 KiB
Raw Blame History

生产存储桶接入信息

更新时间:2026-07-09 本文记录当前素材平台的 MinIO / S3 / uploads 存储事实。

1. 当前结论

  • 新素材预览 / 展示文件:写入生产 MinIO 新桶路径,公开 URL 统一为 https://s3.jiansun.vip/gongxiangpan/由壹点AI/public-display/...。
  • 源文件 / 下载型文件:写入生产服务器独立 ZFS uploads 数据集:/mnt/PoolOne/youyidian-uploads。历史路径 /mnt/PoolOne/apps/youyidian-3d/uploads 仅作人工明确的兼容选项,不再是默认值。
  • 旧 1080p.hk 桶:只用于极少数老素材兼容,不作为新素材写入目标。
  • /gongxiangpan/uploads/ 是历史混合区,不再作为新展示资源的默认路径。

2. 生产 MinIO 信息

  • 存储服务:MinIO
  • 生产服务器:192.168.58.20
  • API 端口:9000
  • 控制台端口:9001
  • 存储服务容器:minio
  • 线上应用容器:youyidian-3d-material

应用实际接入参数:

S3_ENDPOINT=http://192.168.58.20:9000
S3_BUCKET=gongxiangpan
S3_REGION=us-east-1
S3_PUBLIC_DOMAIN=https://s3.jiansun.vip/gongxiangpan
S3_FILE_PATH=由壹点AI/

代码固定行为:

  • S3 客户端使用 path-style 访问,代码里固定 forcePathStyle: true。
  • 上传对象默认设置 public-read ACL,代码里固定处理。
  • S3_PUBLIC_DOMAIN 用来拼出公开访问地址。

下面这些不是当前代码必须读取的部署变量,不要再作为新项目接入必填项传播:

  • S3_ENABLE_PATH_STYLE
  • S3_SET_ACL
  • S3_PREVIEW_URL_EXPIRE_IN

3. 对象路径规则

3.1 新预览 / 展示资源

正式路径:

https://s3.jiansun.vip/gongxiangpan/由壹点AI/public-display/...

常见前缀:

由壹点AI/public-display/materials/...
由壹点AI/public-display/task-detail/...
由壹点AI/public-display/white-background/...
由壹点AI/public-display/certificate-report/...

这些资源用于页面展示、AI 平台预览、钉钉返回地址和外部接口展示直链。

3.2 默认 S3 业务前缀

生产环境仍可能存在默认业务前缀:

由壹点AI/

它是当前生产环境的默认业务前缀。新素材展示图应落在 由壹点AI/public-display/...,不要写入旧桶。

4. uploads 目录规则

生产 uploads 目录:

/mnt/PoolOne/youyidian-uploads

容器内路径:

/app/uploads

当前会落在这里的内容包括:

  • 素材源文件
  • ZIP / PSD / PDF 等下载型文件
  • 视频源文件
  • 音频源文件
  • 分片上传合并后的最终文件
  • 上传过程中的临时文件

对外访问时,代码会根据场景返回:

  • 内网:可能返回 /uploads/... 或内网 MinIO / 生产机地址。
  • 外网:通常通过 /api/uploads/... 或带 token 的下载接口流式返回。

不要把 uploads 理解成“少量视频临时区”。它是当前生产源文件和下载型文件的核心落点。

5. 历史素材正式导入要求

历史素材导入有一个特殊约束:执行机要能读取历史素材源目录,同时下载型文件必须最终落到生产 uploads。

当前天蓝盘批量导入的标准做法:

  • Windows 维护机读取 Z:\... 源素材。
  • 预览图上传到新桶 gongxiangpan 的 由壹点AI/public-display/...。
  • ZIP / PSD / 源文件先在本机生成,再通过远程同步写入生产机 /mnt/PoolOne/youyidian-uploads,并校验远程文件大小。

正式 --apply 如果在 Windows 上连接生产库,必须同时配置:

HISTORY_IMPORT_REMOTE_UPLOADS_HOST=prod
HISTORY_IMPORT_REMOTE_UPLOADS_DIR=/mnt/PoolOne/youyidian-uploads

没有远程 uploads 同步时,脚本必须阻止正式导入。否则会把数据库写到生产库,但 ZIP / PSD 留在本机 uploads,线上下载会 404。

6. 历史兼容

6.1 旧 1080p.hk 桶

s3.1080p.hk/jsxiangche 只保留给极少数老素材兼容。新素材、批量新录入素材、后续上传素材都不应继续写入旧桶。

6.2 旧资源域名

s3.yydd.ai 不再作为默认对接口径,只用于识别历史链接。

6.3 品牌资源迁移门禁

存储切换不能只核对素材预览。每次迁移或域名切换必须同时核对:

  • SystemSettings.headerLogoUrl 与 loginLogoUrl
  • 首页 Header、登录页、注册页、完善资料页
  • /api/favicon
  • 后台“恢复默认”值与 Prisma 默认值
  • 管理员 GET → 不修改 Logo → PUT 往返不会把 /api/proxy-media?... 写回数据库

上述配置只能使用镜像内 /brand/... 或当前 https://s3.jiansun.vip/gongxiangpan/...;旧域名仅允许历史素材只读兼容。

6.4 历史混合区

/gongxiangpan/uploads/ 保留历史兼容,不再作为新展示图默认路径。

7. 只读核对命令

核对应用环境变量:

ssh root@192.168.58.20 "docker exec youyidian-3d-material sh -lc 'env | grep -E \"^(S3_|UPLOAD_DIR|APP_PUBLIC_URL|NEXTAUTH_URL)\"'"

核对 MinIO 挂载:

ssh root@192.168.58.20 "docker inspect minio --format '{{json .Mounts}}'"

核对 uploads 目录:

ssh root@192.168.58.20 "ls -la /mnt/PoolOne/youyidian-uploads | head -20"

核对资源域名解析:

Resolve-DnsName s3.jiansun.vip

当前资源域名应解析到正式入口 218.93.9.38,再经入口机 nginx / FRP 回源到 192.168.58.20:9000。103.118.245.6 是历史入口,不再作为当前默认排障入口。