Dockerfile.web 860 B

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