compose.yaml aus docs/11-betrieb.md, ergänzt um Healthchecks für db-backup und offsite-backup. Das Dokument verlangt für jeden Dienst einen, die abgedruckte Fassung hatte für die beiden keinen, und ohne ihn zeigt Dockge nur "läuft", auch wenn seit Wochen nichts mehr gesichert wird. Die Migration läuft im Startkommando von web, nicht in einem Init-Container. Die Prisma-CLI samt Schema-Engine liegt dafür unter /app/migrator im Image: ein Container, der nur startet, wenn gerade eine Registry erreichbar ist, wäre auf einem Homeserver die falsche Bauart. Alle drei Images gebaut und laufen gegen eine echte Postgres-Instanz geprüft: web wendet Migrationen an und liefert /api/health aus, worker schreibt sein Lebenszeichen, pdf rendert ein echtes PDF. Die CI prüft Lint, Typen, Tests und E2E gegen den Standalone-Server, also so, wie der Container startet, und hält das Bündel-Budget aus docs/09-performance-und-ux.md ein. Phase 0 aus TASKS.md ist damit abgehakt.
40 lines
1.1 KiB
Docker
40 lines
1.1 KiB
Docker
# Image für den Dienst `pdf`. Playwright-Basis mit vorinstalliertem Chromium,
|
|
# rendert die Druckansicht der Akte. Nur im Stack-Netz erreichbar.
|
|
|
|
ARG PLAYWRIGHT_VERSION=v1.62.1-noble
|
|
ARG PNPM_VERSION=9.15.4
|
|
|
|
FROM mcr.microsoft.com/playwright:${PLAYWRIGHT_VERSION} AS build
|
|
ARG PNPM_VERSION
|
|
RUN npm install -g pnpm@${PNPM_VERSION}
|
|
WORKDIR /repo
|
|
|
|
COPY pnpm-workspace.yaml package.json pnpm-lock.yaml .npmrc tsconfig.base.json ./
|
|
COPY packages/db/package.json packages/db/
|
|
COPY web/package.json web/
|
|
COPY worker/package.json worker/
|
|
COPY pdf/package.json pdf/
|
|
|
|
RUN pnpm install --frozen-lockfile --filter @afis/pdf...
|
|
|
|
COPY pdf/ pdf/
|
|
RUN pnpm --filter @afis/pdf build && \
|
|
pnpm --filter @afis/pdf --prod --no-optional deploy /bundle && \
|
|
cp -r pdf/dist /bundle/dist
|
|
|
|
FROM mcr.microsoft.com/playwright:${PLAYWRIGHT_VERSION} AS runtime
|
|
WORKDIR /app
|
|
|
|
ENV NODE_ENV=production \
|
|
PORT=3000
|
|
|
|
COPY --from=build --chown=pwuser:pwuser /bundle ./
|
|
|
|
USER pwuser
|
|
EXPOSE 3000
|
|
|
|
HEALTHCHECK --interval=60s --timeout=10s --start-period=30s --retries=3 \
|
|
CMD wget -qO- http://localhost:3000/health || exit 1
|
|
|
|
CMD ["node", "dist/index.js"]
|