From d357134e9768741ebf16f7d81073aaead66d5626 Mon Sep 17 00:00:00 2001 From: Sakurasan <26715255+Sakurasan@users.noreply.github.com> Date: Fri, 30 Oct 2026 02:20:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=20Docker=20=E6=9E=84=E5=BB=BA?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=EF=BC=8Ccompose=20=E8=A1=A5=E4=B8=8A?= =?UTF-8?q?=E7=94=9F=E4=BA=A7=E5=BF=85=E9=9C=80=E7=9A=84=20OT=5FJWT=5FCOOK?= =?UTF-8?q?IE=5FSECURE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - pnpm 11 默认拒绝发布不足 1 天的依赖(供应链策略),锁文件里 tailwind v4 的 @csstools 传递依赖会踩中,导致镜像构建失败且 pnpm build 的 run 前自检(隐式 install)还会再次踩中。pnpm 11 该配置只认 pnpm-workspace.yaml(.npmrc/ENV 均不生效),在 web-builder 阶段写入 minimumReleaseAge: 0;frozen-lockfile + --ignore-scripts 两道闸仍在,放开无风险 - config.validate 的生产 fail-fast 要求 refresh cookie 必须 Secure, compose 漏配 OT_JWT_COOKIE_SECURE 导致新镜像启动即被拒绝 --- Dockerfile | 5 +++++ docker-compose.yml | 2 ++ 2 files changed, 7 insertions(+) diff --git a/Dockerfile b/Dockerfile index 42ad55a..cdd20f9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,6 +16,11 @@ WORKDIR /src # --ignore-scripts:依赖 postinstall(esbuild/vue-demi)非必需且被 pnpm 拦截, # esbuild 走 optionalDependencies 自带平台二进制;跳过脚本更安全、可复现。 RUN corepack enable && corepack prepare pnpm@11.21.0 --activate +# pnpm 11 默认拒绝发布不足 1 天的依赖(供应链策略):锁文件里 tailwind v4 的 +# @csstools 传递依赖偶尔踩中,且 pnpm build 的 run 前依赖自检会隐式再跑一次 +# install,命令行参数覆盖不到。pnpm 11 该配置只认 pnpm-workspace.yaml(.npmrc/ENV 均不读); +# 镜像构建有 frozen-lockfile(版本钉死)+ --ignore-scripts(不执行依赖脚本)两道闸,可放开。 +RUN printf 'minimumReleaseAge: 0\n' > pnpm-workspace.yaml COPY web/package.json web/pnpm-lock.yaml ./ RUN pnpm install --frozen-lockfile --ignore-scripts COPY web/ ./ diff --git a/docker-compose.yml b/docker-compose.yml index f588c04..835d747 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -27,6 +27,8 @@ services: OT_MASTER_KEY: ${OT_MASTER_KEY:?请在 .env 中设置 OT_MASTER_KEY} OT_ADMIN_PASSWORD: ${OT_ADMIN_PASSWORD:?请在 .env 中设置 OT_ADMIN_PASSWORD} OT_JWT_SECRET: ${OT_JWT_SECRET:?请在 .env 中设置 OT_JWT_SECRET} + # 生产 fail-fast 要求:refresh cookie 必须标记 Secure(服务在 TLS 反代后暴露) + OT_JWT_COOKIE_SECURE: "true" # 入口脚本据此 chown 数据目录并降权运行(默认 1000:1000) OT_UID: "${OT_UID:-1000}" OT_GID: "${OT_GID:-1000}"