From 1d4977a9743ee15d1cdd742f803bff9d58c146e1 Mon Sep 17 00:00:00 2001 From: jim800121chen Date: Sun, 28 Jun 2026 07:46:43 +0800 Subject: [PATCH] =?UTF-8?q?fix(stage):=20Dockerfile.stage=20=E8=A3=9C=20pr?= =?UTF-8?q?eset=20=E6=A8=A1=E5=9E=8B=20COPY=EF=BC=88B8=20stage=20=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit B8 的 preset COPY 原本只加到 dev 的 Dockerfile.api-server,漏了 stage 實際用的 docker/Dockerfile.stage(multi-stage nginx runtime)→ stage image 無 preset 檔、/preset-models/* 下載 404。 runtime stage 補: - COPY --from=backend-builder /src/assets/preset-models → /app/assets/preset-models - ENV VISIONA_PRESET_MODELS_DIR=/app/assets/preset-models(baked 資產、隨 image 走) docker build --check 通過。Reviewer 複審通過。 注意:VISIONA_PRESET_BASE_URL + nginx /preset-models/ location 由 devops 在 stage 部署時補(Reviewer 指出的兩個 DevOps 配套缺口)。 Co-Authored-By: Claude Opus 4.8 (1M context) --- docker/Dockerfile.stage | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docker/Dockerfile.stage b/docker/Dockerfile.stage index f8d3d51..d11b932 100644 --- a/docker/Dockerfile.stage +++ b/docker/Dockerfile.stage @@ -130,6 +130,20 @@ COPY --from=backend-builder --chown=visiona:visiona /out/api-server /usr/local COPY --from=backend-builder --chown=visiona:visiona /out/remote-proxy /usr/local/bin/remote-proxy RUN chmod +x /usr/local/bin/api-server /usr/local/bin/remote-proxy +# ──────────── 系統預設模型(B8) ──────────── +# 7 個公用預設模型 .nef 打包進 image(GET /preset-models/* 直接串流、不簽 token)。 +# 來源:backend-builder 的 /src/assets/preset-models(= repo 的 visionA-backend/assets/preset-models, +# 經 `COPY visionA-backend/ ./` 帶進 builder;.dockerignore 未排除 assets)。 +# 與其他 backend 產物(api-server / remote-proxy)同樣自 backend-builder COPY,來源一致。 +COPY --from=backend-builder --chown=visiona:visiona /src/assets/preset-models /app/assets/preset-models + +# VISIONA_PRESET_MODELS_DIR 設成 image 內 COPY 目標的絕對路徑。 +# 用 Dockerfile ENV(而非 .env.stage)的理由:preset 檔是 baked 進 image 的固定資產(不像 +# /data/storage 是掛載 volume),路徑與 COPY 目標綁定、應隨 image 走,避免 .env.stage 漏設導致 +# config/load.go 預設的相對路徑 `./assets/preset-models` 在 runtime workdir 讀不到而 404。 +# 注意:VISIONA_PRESET_BASE_URL 不在此設(由 .env.stage 帶部署域名,devops 範圍)。 +ENV VISIONA_PRESET_MODELS_DIR=/app/assets/preset-models + # ──────────── 共享資料目錄(local-fs storage 雛形用) ──────────── # api-server 預設 VISIONA_STORAGE_LOCALFS_ROOT=/data/storage # 由 docker-compose volume 掛 host 路徑進來;image 預建 dir + chown 確保權限