# ---------- 构建阶段 ---------- FROM node:24-alpine AS builder # pnpm 版本与 package.json 的 packageManager 字段保持一致 RUN npm install -g pnpm@11.21.0 WORKDIR /app # 构建期关闭遥上报,避免容器构建时产生外部请求 ENV NUXT_TELEMETRY_DISABLED=1 # 先只复制依赖清单,让 pnpm install 这一层可以被缓存复用 COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ COPY apps/web/package.json apps/web/package.json COPY packages/cook/package.json packages/cook/package.json COPY docs/package.json docs/package.json RUN pnpm install --frozen-lockfile # 再复制源码并构建 COPY . . # 统计配置在构建期编译进静态产物 ARG NUXT_PUBLIC_CLARITY_PROJECT_ID=ks1ebw03i5 ARG NUXT_PUBLIC_CLARITY_DOMAINS=cook.yunyoujun.cn,cook.yunle.fun ENV NUXT_PUBLIC_CLARITY_PROJECT_ID=${NUXT_PUBLIC_CLARITY_PROJECT_ID} ENV NUXT_PUBLIC_CLARITY_DOMAINS=${NUXT_PUBLIC_CLARITY_DOMAINS} # 镜像里没有 .git,版本号组件拿不到 commit;传入该值即可显示版本信息 ARG CF_PAGES_COMMIT_SHA= ENV CF_PAGES_COMMIT_SHA=${CF_PAGES_COMMIT_SHA} # 构建产物输出到仓库根目录的 dist/(见 scripts/copy-web-output.ts) RUN pnpm run build # ---------- 运行阶段 ---------- FROM nginx:stable-alpine COPY docker/nginx.conf /etc/nginx/conf.d/default.conf COPY --from=builder /app/dist /usr/share/nginx/html EXPOSE 2229 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD wget -qO- http://127.0.0.1:2229/ >/dev/null || exit 1