# ---- Build stage ---- FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY tsconfig.json ./ COPY src/ ./src/ RUN npm run build # ---- Production stage ---- FROM node:20-alpine WORKDIR /app # System dependencies required by Playwright / Chromium and healthcheck RUN apk add --no-cache \ chromium \ nss \ freetype \ freetype-dev \ harfbuzz \ ca-certificates \ ttf-freefont \ curl # Tell Playwright to use the system Chromium instead of downloading its own ENV PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 ENV PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/chromium-browser COPY package*.json ./ RUN npm ci --omit=dev COPY --from=builder /app/dist ./dist # Runtime directories for reports and logs RUN mkdir -p reports logs EXPOSE 3001 HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD curl -f http://localhost:3001/health || exit 1 CMD ["node", "dist/server/index.js"]