From 3b7a06272d7ddd6cd8e941faa6892ab228c99806 Mon Sep 17 00:00:00 2001 From: kang Date: Mon, 18 May 2026 21:18:54 +0800 Subject: [PATCH] chore: persist resource libraries in production --- RULES.md | 4 ++-- deploy/.env.production.example | 2 ++ docker-compose.prod.yml | 5 +++++ docs/source-analysis.html | 4 ++-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/RULES.md b/RULES.md index a0ae43f..708437d 100644 --- a/RULES.md +++ b/RULES.md @@ -15,7 +15,7 @@ ## 部署事实 - 平台:VPS `76.13.31.179`(Ubuntu 24.04 / Docker Compose / Coolify Traefik) -- 发布状态:已部署并验证(2026-05-15);`https://marketing.skg.com` 已启用应用内登录页,认证后首页 200,`/api/health` 返回 `ok:true` +- 发布状态:已部署并验证(2026-05-18);`https://marketing.skg.com` 已启用应用内登录页,认证后首页 200,`/api/health` 返回 `ok:true` - 主站 / 前端:`https://marketing.skg.com` - API / 后端:`https://marketing.skg.com/api` - 代码仓库 / Gitea:`https://git.kang-kang.com/kangwan/20260512-skg-tk` @@ -24,7 +24,7 @@ - 服务器目录:`/opt/skg-marketing-studio` - 生产启动:`docker compose -f docker-compose.prod.yml --env-file deploy/.env.production up -d --build` - 生产架构:`web` 容器用 Nginx 承载 Next 静态导出;`/login/`、`/_next/`、`/assets/`、`/skg-logo-black.svg`、`/oasis-source/` 等登录页必需静态资源公开访问;未登录访问工作台跳转 `/login/`,`/api/` 通过 Nginx `auth_request` 校验 FastAPI 会话 Cookie 后反代到 `skg-marketing-api:4291`;Traefik 通过 `coolify` 外部网络接入 80/443 -- 持久化目录:服务器 `./data/jobs` 挂载到后端 `/data/jobs` +- 持久化目录:服务器 `./data/jobs` 挂载到后端 `/data/jobs`;全局资源中心持久化在 `./data/asset_library`、`./data/prompt_library` 和 `./data/_trash` - 登录凭证:用户名写下方快捷登录;密码明文备份只放服务器 `/root/skg-marketing-studio-login.txt`,生产环境变量 `WEB_AUTH_PASSWORD` / `WEB_AUTH_SESSION_SECRET` 只放服务器 `deploy/.env.production` ## 快捷登录 diff --git a/deploy/.env.production.example b/deploy/.env.production.example index d8f1bfe..4454b22 100644 --- a/deploy/.env.production.example +++ b/deploy/.env.production.example @@ -3,6 +3,8 @@ # Runtime JOBS_DIR=/data/jobs +ASSET_LIBRARY_DIR=/data/asset_library +PROMPT_LIBRARY_DIR=/data/prompt_library KEYFRAME_COUNT=12 CORS_ORIGINS=https://marketing.skg.com API_PORT=4291 diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 791eb39..67da0a4 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -10,9 +10,14 @@ services: - ./deploy/.env.production environment: JOBS_DIR: /data/jobs + ASSET_LIBRARY_DIR: /data/asset_library + PROMPT_LIBRARY_DIR: /data/prompt_library CORS_ORIGINS: https://marketing.skg.com volumes: - ./data/jobs:/data/jobs + - ./data/asset_library:/data/asset_library + - ./data/prompt_library:/data/prompt_library + - ./data/_trash:/data/_trash restart: unless-stopped networks: - skg-marketing-internal diff --git a/docs/source-analysis.html b/docs/source-analysis.html index 719a300..a23a614 100644 --- a/docs/source-analysis.html +++ b/docs/source-analysis.html @@ -541,7 +541,7 @@ 生产部署 docker compose -f docker-compose.prod.yml --env-file deploy/.env.production up -d --build - 服务器目录为 /opt/skg-marketing-studio;后端任务文件挂载到 ./data/jobs,真实 Key 只放服务器 deploy/.env.production。 + 服务器目录为 /opt/skg-marketing-studio;后端任务文件挂载到 ./data/jobs,全局资源中心挂载到 ./data/asset_library./data/prompt_library./data/_trash,真实 Key 只放服务器 deploy/.env.production。 前端开发服务 @@ -1099,7 +1099,7 @@ ProductRefStateItem {

问题:主体、产品、首尾帧、视频候选和常用 prompt 都散落在单个 job 里,跨任务复用时容易重新上传、重新生成或误把旧 job 文件当公共引用,后续也缺少删除保护和使用次数记录。

-

改动:后端新增和 jobs/ 平级的 asset_library/prompt_library/,服务启动扫描目录重建索引;提示词提供 CRUD、复制计数和 5 类分类;素材提供主体/产品/场景/视频四类 CRUD、引用检查、强删移入 _trash/copy-to-job。前端新增 LibraryDrawer 浮窗,顶部“资源库”按钮打开;浮窗记忆尺寸、位置和 Tab,提示词按“常用 + 月份”分列,素材按月份分列,节点不能拖动;提示词支持一键复制英文/中文/双语,素材应用到当前 job 时只走复制模式。

+

改动:后端新增和 jobs/ 平级的 asset_library/prompt_library/,服务启动扫描目录重建索引;提示词提供 CRUD、复制计数和 5 类分类;素材提供主体/产品/场景/视频四类 CRUD、引用检查、强删移入 _trash/copy-to-job。前端新增 LibraryDrawer 浮窗,顶部“资源库”按钮打开;浮窗记忆尺寸、位置和 Tab,提示词按“常用 + 月份”分列,素材按月份分列,节点不能拖动;提示词支持一键复制英文/中文/双语,素材应用到当前 job 时只走复制模式。生产 compose 同步挂载 /data/asset_library/data/prompt_library/data/_trash,避免容器重建后库文件丢失。

影响:后续保存产品图、首尾帧、主体模板和分镜 prompt 时优先进入资源中心。库素材永远不要直接写成 job 引用,必须通过 POST /asset-library/{kind}/{id}/copy-to-job/{job_id} 复制成普通 job asset;删除库素材前必须查 /refs 并让用户确认。