build(docker): optimize image build workflow

This commit is contained in:
2026-07-07 10:59:38 +08:00
parent c0d20e650b
commit ed0ed99450
6 changed files with 74 additions and 25 deletions
+7 -5
View File
@@ -186,11 +186,13 @@ Docker 构建使用 Next.js standalone 输出:
1. `next.config.ts` 设置 `output: "standalone"`
2. `Dockerfile` 使用 multi-stage build。
3. build 阶段通过 Docker BuildKit secret 挂载 `.env.local``.env.production`
4. build 完成后删除临时 env 文件,避免 env 文件被复制到最终镜像
5. runtime 阶段复制 `.next/standalone``.next/static``public` 和生产依赖 `node_modules`
6. 生产依赖用于支持 Serwist 在运行时生成 `/serwist/sw.js`,避免手动修复 pnpm symlink
7. 容器通过 `node server.js` 启动,不再使用 `next start`
3. pnpm 依赖安装使用 BuildKit cache mount 复用 `/pnpm/store`
4. Next.js 构建使用 BuildKit cache mount 复用 `.next/cache`
5. build 阶段通过 Docker BuildKit secret 挂载 `.env.local``.env.production`
6. build 完成后删除临时 env 文件,避免 env 文件被复制到最终镜像
7. runtime 阶段复制 `.next/standalone``.next/static``public` 和生产依赖 `node_modules`
8. 生产依赖用于支持 Serwist 在运行时生成 `/serwist/sw.js`,避免手动修复 pnpm symlink。
9. 容器通过 `node server.js` 启动,不再使用 `next start`
注意:`NEXT_PUBLIC_*` 变量会在 `next build` 时固化到前端 bundle,因此测试环境和生产环境必须分别构建镜像,不能共用同一个镜像。