Liefert das reproduzierbare Compose-Setup hinter EXTERNEM Traefik: - Dockerfile (multi-stage deps/builder/runner, Next.js standalone, non-root UID/GID 1001, HEALTHCHECK gegen /api/health). - docker/entrypoint.sh: wartet via pg_isready auf Postgres, wendet Migrationen idempotent an (docker/migrate.mjs, plain ESM ohne tsx/drizzle-kit), optionaler Seed (RUN_SEED), dann exec node server.js. - docker-compose.yml: genau vier Services (app, postgres, osrm, nominatim), KEIN Proxy-Service; externes traefik-Netz + internes Netz; Traefik-Labels (Host, websecure, tls.certresolver, Security-Header-Middleware); Postgres-/App-Healthchecks; AUTH_URL/AUTH_TRUST_HOST/Forwarded-Header. - docker-compose.override.yml.example: lokal :3000 ohne TLS (http AUTH_URL). - .dockerignore, Makefile (build/up/down/logs/deploy/data/config). - .env.example: voller Vertrag inkl. APP_HOST, TRAEFIK_*, POSTGRES_*, RUN_SEED. - docs/reference/deployment-traefik.md: externes Netz, Authentik-Redirect-URI https://${APP_HOST}/api/auth/callback/authentik, Forwarded-Header/Cookies, /api/health-Allowlist. - tests/unit/deployment.test.ts (TDD): statische Offline-Verifikation der Artefakte; vitest.config.ts nimmt tests/unit/** auf. Offline verifiziert: tsc --noEmit sauber; vitest run grün (200 passed, 7 db-roundtrip skipped); next build erzeugt .next/standalone/server.js; sh -n docker/entrypoint.sh ok; make -n deploy zeigt build->up. Deferred (kein Docker/Postgres in der Sandbox): docker build/run id -u=1001, docker compose config --services, /api/health anonym 200, End-to-End Traefik. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
41 lines
1.5 KiB
Plaintext
41 lines
1.5 KiB
Plaintext
# FlorianNetz — Umgebungsvariablen (Beispiel; KEINE echten Geheimnisse committen)
|
|
|
|
# Node
|
|
NODE_ENV=development
|
|
|
|
# Datenbank (Postgres)
|
|
DATABASE_URL=postgres://floriannetz:floriannetz@localhost:5432/floriannetz
|
|
|
|
# Auth.js / NextAuth
|
|
# AUTH_SECRET muss >= 32 Zeichen sein (z. B. `openssl rand -base64 32`)
|
|
AUTH_SECRET=bitte-mindestens-32-zeichen-langes-geheimnis-setzen
|
|
# AUTH_URL bestimmt Cookie-secure: http:// = lokal (unsicher), https:// = Produktion
|
|
AUTH_URL=http://localhost:3000
|
|
AUTH_TRUST_HOST=true
|
|
|
|
# Authentik (OIDC-Provider)
|
|
AUTHENTIK_ISSUER=http://localhost:9000/application/o/floriannetz/
|
|
AUTHENTIK_CLIENT_ID=floriannetz
|
|
AUTHENTIK_CLIENT_SECRET=bitte-setzen
|
|
|
|
# Geo (interne Dienste; Defaults zeigen auf Docker-Compose-Hostnamen)
|
|
OSRM_URL=http://osrm:5000
|
|
NOMINATIM_URL=http://nominatim:8080
|
|
GEO_HTTP_TIMEOUT_MS=4000
|
|
HAVERSINE_KMH=50
|
|
|
|
# Deployment / externes Traefik
|
|
# APP_HOST ist der öffentliche Hostname (Traefik-Routing + AUTH_URL-Basis).
|
|
# In Produktion: AUTH_URL=https://${APP_HOST} und AUTH_TRUST_HOST=true setzen.
|
|
APP_HOST=floriannetz.example.at
|
|
# Traefik-Zertifikatsauflöser (muss in der externen Traefik-Instanz definiert sein).
|
|
TRAEFIK_CERTRESOLVER=letsencrypt
|
|
# Name des externen, von Traefik verwalteten Docker-Netzes.
|
|
TRAEFIK_NETWORK=traefik
|
|
# Optionaler Katalog-Seed beim Container-Start (idempotent).
|
|
RUN_SEED=false
|
|
# Postgres-Zugangsdaten für den Compose-Postgres-Service.
|
|
POSTGRES_USER=floriannetz
|
|
POSTGRES_PASSWORD=floriannetz
|
|
POSTGRES_DB=floriannetz
|