# --- Stage 1: Build --- FROM node:18-alpine AS builder WORKDIR /app # Install build dependencies COPY package*.json ./ RUN npm ci # Copy source and compile COPY . . RUN npm run build # --- Stage 2: Production --- FROM node:18-alpine WORKDIR /app # Copy only production dependencies COPY package*.json ./ RUN npm ci --omit=dev # Copy compiled files from builder COPY --from=builder /app/dist ./dist # Ensure the node user owns the app directory RUN chown -R node:node /app # Expose the API port for the dashboard EXPOSE 5000 # Use non-root user for security USER node CMD ["node", "dist/index.js"]