# ---- 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 . . # VERSION must be copied into the build context before `docker build`. # In CI / deploy scripts run: cp VERSION backend/VERSION (or pass --build-arg) COPY VERSION ./ 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, New Relic preload, and VERSION from builder COPY --from=builder /app/dist ./dist COPY --from=builder /app/newrelic-preload.js ./newrelic-preload.js COPY --from=builder /app/VERSION ./VERSION # 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"]