# Build stage FROM node:20-alpine as builder WORKDIR /build # Copy package files COPY package.json package-lock.json* ./ # Install dependencies RUN npm install # Copy source code COPY . . # Build production bundle RUN npm run build # Production stage FROM nginx:alpine # Create non-root user RUN addgroup -g 1001 -S nodejs && adduser -S nextjs -u 1001 # Copy custom nginx config COPY nginx.conf /etc/nginx/conf.d/default.conf # Copy built assets from builder COPY --from=builder --chown=nextjs:nodejs /build/dist /usr/share/nginx/html # Create required directories RUN mkdir -p /var/cache/nginx /var/run && \ chown -R nextjs:nodejs /var/cache/nginx /var/run /usr/share/nginx/html # Switch to non-root user USER nextjs # Expose port EXPOSE 80 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD wget --quiet --tries=1 --spider http://localhost/ || exit 1 # Start nginx CMD ["nginx", "-g", "daemon off;"]