# ── Datenbank ──────────────────────────────────────────────────────── # # Die Datenbank läuft als eigener Container (Dienst `db` in # docker-compose.yml). Diese drei Werte richten ihn ein: # # POSTGRES_PASSWORD das des Verwalters (postgres) — nur für Migrationen, # Sicherungen und Wartung # APP_DB_PASSWORD das der Anwendungsrolle alpenwerk_app # POSTGRES_DB Name der Datenbank; Vorgabe alpenwerk # # Beide Passwörter selbst erzeugen: `openssl rand -base64 24` # # Sie werden nur beim **allerersten** Start ausgewertet, solange das # Datenverzeichnis leer ist. Ein späterer Wechsel braucht ein # `alter role … password …` in der laufenden Datenbank. POSTGRES_PASSWORD= APP_DB_PASSWORD= POSTGRES_DB=alpenwerk POSTGRES_USER=postgres # Womit die Anwendung sich verbindet. Im Compose-Netz heisst die Datenbank # `db`; von aussen ist sie nicht erreichbar, es gibt bewusst keinen Port. # # Die Rolle in diesem String darf KEIN BYPASSRLS haben: fehlt der # Sitzungskontext, sollen die Policies nichts zurückgeben statt alles. # `alpenwerk_app` wird in deploy/db-init genau so angelegt. DATABASE_URL=postgresql://alpenwerk_app:@db:5432/alpenwerk # Im Compose-Netz läuft Postgres ohne TLS — die Verbindung verlässt den # Server nicht. Bei einer Datenbank ausserhalb diesen Wert entfernen. DATABASE_SSL=false # Verbindungen im Pool; Vorgabe 10. DATABASE_POOL_MAX= # Der **direkte** Zugang für Migrationen (scripts/migrate.mjs). Als Verwalter, # weil Migrationen Schemaänderungen vornehmen, die die Anwendungsrolle nicht # darf. Bei Betrieb über docker compose wird er nicht gebraucht — der Dienst # `migrate` setzt ihn selbst aus POSTGRES_PASSWORD zusammen. MIGRATE_DATABASE_URL= # ── Anmeldung (Auth.js + Microsoft Entra ID) ───────────────────────── # Schlüssel, mit dem das Sitzungscookie signiert und verschlüsselt wird. # Erzeugen mit `npx auth secret` oder `openssl rand -base64 32`. Ein Wechsel # meldet alle ab — was im Ernstfall genau das gewünschte Mittel ist. AUTH_SECRET= # Aus der Anwendungsregistrierung im Entra-Portal: Anwendungs-ID (Client), # ein Geheimnis daraus, und der Aussteller mit der Verzeichnis-ID (Mandant). # # Der Aussteller darf NICHT auf /common/ stehen bleiben — sonst könnte sich # jedes Microsoft-Konto anmelden, auch ein privates. AUTH_MICROSOFT_ENTRA_ID_ID= AUTH_MICROSOFT_ENTRA_ID_SECRET= AUTH_MICROSOFT_ENTRA_ID_ISSUER=https://login.microsoftonline.com//v2.0 # Nur nötig, wenn die Anwendung hinter einem Reverse Proxy unter einer # anderen Adresse erreichbar ist, als sie selbst sieht. Ohne diesen Wert baut # Auth.js die Rückruf-Adresse aus den Request-Headern. AUTH_URL= # Gemeinsames Geheimnis, mit dem sich der nächtliche Lauf ausweist: der # `cron`-Container schickt es als `Authorization: Bearer ` an # /api/cron/apply-pending-changes. Ohne angemeldete Person gibt es keine # Sitzung, an der die Route den Aufruf prüfen könnte. # Erzeugen mit: openssl rand -hex 32 CRON_SECRET=