# ── Build stage ────────────────────────────────────────────────────────────── FROM node:22-slim AS builder WORKDIR /app COPY package*.json ./ COPY server/package.json ./server/ RUN npm ci -w server COPY server/nest-cli.json ./server/ COPY server/tsconfig*.json ./server/ COPY server/src ./server/src RUN npm run -w server build # ── Runtime stage ───────────────────────────────────────────────────────────── FROM node:22-slim AS runtime # Playwright / Chromium system dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ chromium \ fonts-noto \ ca-certificates \ && rm -rf /var/lib/apt/lists/* # 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 WORKDIR /app COPY package*.json ./ COPY server/package.json ./server/ RUN npm ci --omit=dev -w server COPY --from=builder /app/server/dist ./dist # Runtime directories (keys and SQLite DB mounted via volumes) RUN mkdir -p data EXPOSE 3000 CMD ["node", "dist/main"]