# Build stage FROM node:18-alpine AS builder WORKDIR /app # Copy package files COPY package*.json ./ # Install dependencies RUN npm install \ && npm ci --only=production # Production stage FROM node:18-alpine # Install dumb-init for proper signal handling RUN apk add --no-cache dumb-init # Create app user RUN addgroup -g 1001 -S nodejs && \ adduser -S nodejs -u 1001 WORKDIR /app # Copy dependencies from builder COPY --from=builder /app/node_modules ./node_modules # Copy application files COPY --chown=nodejs:nodejs . . # Switch to non-root user USER nodejs # Expose port EXPOSE 8080 # Use dumb-init to handle signals ENTRYPOINT ["dumb-init", "--"] # Start application CMD ["node", "src/server.js"]