服务器性能差,镜像 builder 阶段(1238 个包的 bun install + bun compile + vite build)首次约 5 分钟,光前端就 160s。改成在 runner 上编好 dist/oj2-api 和 apps/web/dist,rsync 过去,服务器那边只剩几条 COPY。 服务器自己编的能力没有砍掉。Dockerfile 顶部加了全局 ARG ARTIFACTS: build(默认) builder 阶段自己编,只要有 docker 就能手动部署 prebuilt 用构建上下文里现成的产物,builder 不进构建图 实现是两个 scratch 阶段归一成 /artifacts/ 布局,再用变量阶段名 FROM artifacts-${ARTIFACTS} 选一个,运行时阶段不关心产物是谁编的。 deploy.sh 加 --prebuilt:产物缺失在自检就 die;顺带检测 buildx —— 没装的话 compose 会退回 classic builder,那个不看依赖图、所有阶段挨个跑,产物白编 (结果正确但不省时间),黄字提醒不阻断。 .dockerignore 末尾放行两个产物路径,必须在 dist/ 那些规则之后, dockerignore 是最后一条匹配说了算。 顺手删掉 apps/web/.github/ —— 从 ojnext 抄来的残留,路径不对(GitHub 只认 仓库根的 .github/workflows/)从来没跑过,内容也是 ojnext 的。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>