# Multi-stage Dockerfile for Next.js Application (Debian-based to avoid musl issues) # Builder installs ALL deps (including dev) to support Tailwind/PostCSS during build # Build stage FROM node:24-bookworm-slim AS builder WORKDIR /app # Set to production for build ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 # Install dependencies (including dev deps for build) COPY package*.json ./ RUN npm ci # Copy source COPY . . # Build the Next.js application RUN npm run build # Production stage FROM node:24-bookworm-slim AS runner WORKDIR /app ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 # Install curl for healthcheck RUN apt-get update && apt-get install -y --no-install-recommends curl \ && rm -rf /var/lib/apt/lists/* # Install only production deps COPY package*.json ./ RUN npm ci --omit=dev # Copy built assets and public files COPY --from=builder /app/.next ./.next COPY --from=builder /app/public ./public # Fix permissions for the fonts directory and other public assets RUN chown -R node:node /app/public && \ chmod -R 755 /app/public # Use non-root user provided by the official Node image USER node EXPOSE 3000 # Health check HEALTHCHECK --interval=30s --timeout=30s --start-period=10s --retries=3 \ CMD curl -f http://localhost:3000/ || exit 1 # Start command CMD ["npm", "start"]