# Multi-stage Dockerfile for better build performance with Docker Bake FROM node:20-alpine AS base # Install dependencies only when needed FROM base AS deps RUN apk add --no-cache libc6-compat WORKDIR /app # Copy package files COPY package*.json ./ RUN npm install --production=false && npm cache clean --force # Development stage FROM base AS development WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3444 ENV PORT 3444 ENV NODE_ENV development CMD ["npm", "run", "dev"] # Build stage FROM base AS builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . # Build the application RUN npm run build # Production stage FROM base AS production WORKDIR /app ENV NODE_ENV production ENV PORT 3444 RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs # Copy production dependencies COPY --from=deps /app/node_modules ./node_modules COPY --from=deps /app/package*.json ./ # Copy built application COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static COPY --from=builder --chown=nextjs:nodejs /app/public ./public USER nextjs EXPOSE 3444 CMD ["node", "server.js"]