| 1234567891011121314151617181920212223242526 |
- # DoTouch.AI Web 容器镜像(Next.js standalone 多阶段构建)
- FROM node:22-alpine AS base
- RUN npm i -g pnpm@10
- WORKDIR /app
- # 1. 依赖层
- FROM base AS deps
- COPY pnpm-workspace.yaml package.json pnpm-lock.yaml .npmrc ./
- COPY apps/web/package.json apps/web/package.json
- COPY packages/shared/package.json packages/shared/package.json
- RUN pnpm install --frozen-lockfile --filter @dotouch/web... --filter @dotouch/shared...
- # 2. 构建层
- FROM deps AS build
- COPY . .
- RUN pnpm --filter @dotouch/shared build && pnpm --filter @dotouch/web build
- # 3. 运行层(standalone 最小产物)
- FROM node:22-alpine AS runner
- WORKDIR /app
- ENV NODE_ENV=production
- COPY --from=build /app/apps/web/.next/standalone ./
- COPY --from=build /app/apps/web/.next/static ./apps/web/.next/static
- EXPOSE 3000
- ENV PORT=3000 HOSTNAME=0.0.0.0
- CMD ["node", "apps/web/server.js"]
|