# Multi-stage Dockerfile for Next.js 16 static export # Stage 1: Dependencies FROM node:22-alpine AS deps RUN apk add --no-cache libc6-compat WORKDIR /app # Install pnpm RUN corepack enable && corepack prepare pnpm@latest --activate # Copy package files COPY package.json pnpm-lock.yaml ./ # Install dependencies RUN pnpm install --frozen-lockfile # Stage 2: Builder FROM node:22-alpine AS builder WORKDIR /app # Install pnpm RUN corepack enable && corepack prepare pnpm@latest --activate # Copy dependencies from deps stage COPY --from=deps /app/node_modules ./node_modules # Copy source code COPY . . # Build the application (static export) RUN pnpm build # Stage 3: Runner (serve static files) FROM nginx:alpine AS runner # Install curl for health check RUN apk add --no-cache curl # Copy custom nginx config COPY --from=builder /app/nginx.conf /etc/nginx/nginx.conf # Copy static files from build COPY --from=builder /app/out /usr/share/nginx/html # Expose port 80 EXPOSE 80 # Health check HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost/ || exit 1 # Start nginx CMD ["nginx", "-g", "daemon off;"]