# ---- Production Dockerfile for NestJS backend ---- # Multi-stage build: compile TypeScript, then run with minimal image # Stage 1: Build FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build # Stage 2: Production FROM node:20-alpine WORKDIR /app # Only install production dependencies COPY package*.json ./ RUN npm ci --omit=dev && npm cache clean --force # Copy compiled output and New Relic preload from builder COPY --from=builder /app/dist ./dist COPY --from=builder /app/newrelic-preload.js ./newrelic-preload.js # New Relic agent — configured entirely via environment variables ENV NEW_RELIC_NO_CONFIG_FILE=true ENV NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true ENV NEW_RELIC_LOG=stdout EXPOSE 3000 # Preload the New Relic agent (activates only when NEW_RELIC_ENABLED=true) CMD ["node", "-r", "./newrelic-preload.js", "dist/main"]