build(docker): optimize image build workflow
This commit is contained in:
@@ -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,因此测试环境和生产环境必须分别构建镜像,不能共用同一个镜像。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user