build: Build-Zeit-Platzhalter-Env in builder-Stage (next build)

next build evaluiert beim 'Collecting page data' Server-Routen (u. a.
/api/auth/[...nextauth]); src/lib/env.ts validiert beim Import (Fail-Fast) und
brach ohne gesetzte Variablen ab. Platzhalter-Env (erfüllt das Zod-Schema) nur
für den Build ergänzt — Server-env wird nicht ins Bundle inlined, die builder-
Stage landet nicht im Runtime-Image; echte Werte kommen zur Laufzeit aus Compose.

Lokal verifiziert: next build läuft mit den Platzhaltern sauber durch (alle Routen).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude
2026-06-10 13:34:06 +02:00
parent 4863eadcce
commit 5d4afb5936

View File

@@ -24,6 +24,18 @@ RUN npm install --no-audit --no-fund
FROM node:${NODE_VERSION}-alpine AS builder
WORKDIR /app
ENV NEXT_TELEMETRY_DISABLED=1
# Build-Zeit-Platzhalter: src/lib/env.ts validiert beim Import (Fail-Fast).
# `next build` evaluiert beim "Collecting page data" die Server-Routen (u. a.
# /api/auth/[...nextauth]) -> ohne gesetzte Variablen bricht der Import ab.
# Diese Werte sind NUR für den Build (erfüllen das Zod-Schema); Server-env wird
# NICHT ins Bundle inlined und die builder-Stage landet NICHT im Runtime-Image.
# Echte Werte kommen zur Laufzeit aus docker-compose.
ENV DATABASE_URL=postgresql://build:build@localhost:5432/build \
AUTH_SECRET=build_only_placeholder_secret_min_32_chars_long \
AUTH_URL=https://build.invalid \
AUTHENTIK_ISSUER=https://build.invalid/application/o/floriannetz/ \
AUTHENTIK_CLIENT_ID=build \
AUTHENTIK_CLIENT_SECRET=build
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# next.config.ts setzt output:"standalone" -> erzeugt .next/standalone/server.js.