# syntax=docker/dockerfile:1 # Base-Image per Digest gepinnt, derselbe wie im Backend (siehe dort). FROM node:22-alpine@sha256:0a7108bf6c7bf5de370ffb1a3ed6be93d405b43ff159f681a8d18c0e2bc2e402 AS builder WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci COPY . . RUN npx next typegen # Qualitaets-Gate: ein Image entsteht nur, wenn Lint, Typecheck und # Unit-Tests gruen sind. RUN npm run lint && npx tsc --noEmit && npm test RUN npm run build FROM node:22-alpine@sha256:0a7108bf6c7bf5de370ffb1a3ed6be93d405b43ff159f681a8d18c0e2bc2e402 AS runtime ENV NODE_ENV=production WORKDIR /app COPY --from=builder /app/public ./public COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static EXPOSE 3000 USER node CMD ["node", "server.js"]