# ========================================== # Production-Ready Multi-Stage Dockerfile # ========================================== # Stage 1: Dependencies FROM node:20-alpine AS deps WORKDIR /app # Copy package files COPY package*.json ./ # Install production dependencies only RUN npm ci --only=production && npm cache clean --force # ========================================== # Stage 2: Production Image # ========================================== FROM node:20-alpine AS runner WORKDIR /app # Set production environment ENV NODE_ENV=production ENV PORT=8080 # Create non-root user for security RUN addgroup --system --gid 1001 nodejs && \ adduser --system --uid 1001 nodeuser # Copy dependencies from deps stage COPY --from=deps /app/node_modules ./node_modules # Copy application code COPY --chown=nodeuser:nodejs . . # Switch to non-root user USER nodeuser # Expose port EXPOSE 8080 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:8080/health || exit 1 # Start the application CMD ["node", "index.js"]