# ---- Dependency install stage ---- FROM node:20-alpine AS deps WORKDIR /app COPY package.json ./ RUN npm install --omit=dev # ---- Runtime stage ---- FROM node:20-alpine WORKDIR /app # Non-root user RUN addgroup -S appgroup && adduser -S appuser -G appgroup USER appuser COPY --from=deps /app/node_modules ./node_modules COPY package.json ./ COPY src/ ./src/ EXPOSE 3000 HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \ CMD wget -qO- http://localhost:3000/health | grep -q 'UP' || exit 1 CMD ["node", "src/index.js"]