feat(backend,frontend,infra): Production-Seed-Guard, Setup-Wizard, docker-compose.prod.yml #314

Merged
niboer merged 1 commit from feature/production-seed-and-setup-wizard into main 2026-07-20 16:34:47 +00:00
Owner

Allgemein

  • Production-Seed-Guard, Setup-Assistent und Production-Compose-Vorlage.
  • closes #22

Altes Verhalten

  • Der Prisma-Dev-Seed (15 Testpersonen, Events, Gruppen) lief auch in Production bei leerer DB.
  • Es gab keine Moeglichkeit zur Erst-Einrichtung des Systems.
  • Keine Production-Compose-Vorlage vorhanden.

Neues Verhalten

  • Seed-Guard: backend/prisma/seed.ts laeuft nur noch bei APP_ENV=development|test.
  • Keycloak-Provisioning: ensureRealm() laeuft weiterhin immer (idempotent).
  • Setup-API: Neue ungesicherte Endpunkte:
    • GET /api/v1/setup/status{ needsSetup, requiresToken }
    • POST /api/v1/setup/complete → Erster Admin-User (Person + KC-User mit app-admin-Rolle)
  • Setup-Token: Einmal-Token (32-stelliger Hex-String) wird in Production beim Backend-Start generiert und ins Log geschrieben (docker logs). Nur gueltig bis zum ersten erfolgreichen Setup (Single-Use).
  • Setup-Wizard: Neuer Frontend-Route /setup — Formular mit Setup-Code, Vorname, Nachname, E-Mail, Passwort. Landingpage zeigt Link wenn DB leer.
  • ContactData: Die E-Mail aus dem Setup wird verschluesselt in der Datenbank gespeichert.
  • docker-compose.prod.yml: Production-Compose mit Images vom Registry-Server (git.gs-woa.hopto.org/...).
  • .env.prod.example: Vorlage fuer Produktions-Deployment.
  • README: Reverse-Proxy-Beispiele fuer nginx, traefik und cloudflared.
  • E2E-Tests: APP_ENV=development explizit in e2e/docker-compose.e2e.yml gesetzt.

Begruendung

  • Production-Sicherheit: Keine Dev-Daten in Production.
  • Benutzerfreundlichkeit: Erster Admin kann sich selbst ueber den Browser einrichten.
  • Dokumentation: Klare Anleitung fuer Deployment mit Reverse-Proxy.

Test-Hinweise

  • Backend: 660 Tests pass, 36 Test-Files.
  • Frontend: 1228 Tests pass, 74 Test-Files.
  • Orval-Typen: Aus openapi.yaml regeneriert.
  • Integration-Test: Manueller Durchlauf des Setup-Flows erfolgreich.

Checkliste

  • Lint-Check bestanden (Backend + Frontend)
  • Unit-Tests bestanden (Backend + Frontend)
  • E2E-Tests bestanden
  • Testid-Check bestanden
  • Orval-Typen regeneriert
## Allgemein - Production-Seed-Guard, Setup-Assistent und Production-Compose-Vorlage. - closes #22 ## Altes Verhalten - Der Prisma-Dev-Seed (15 Testpersonen, Events, Gruppen) lief auch in Production bei leerer DB. - Es gab keine Moeglichkeit zur Erst-Einrichtung des Systems. - Keine Production-Compose-Vorlage vorhanden. ## Neues Verhalten - **Seed-Guard**: `backend/prisma/seed.ts` laeuft nur noch bei `APP_ENV=development|test`. - **Keycloak-Provisioning**: `ensureRealm()` laeuft weiterhin immer (idempotent). - **Setup-API**: Neue ungesicherte Endpunkte: - `GET /api/v1/setup/status` → `{ needsSetup, requiresToken }` - `POST /api/v1/setup/complete` → Erster Admin-User (Person + KC-User mit app-admin-Rolle) - **Setup-Token**: Einmal-Token (32-stelliger Hex-String) wird in Production beim Backend-Start generiert und ins Log geschrieben (`docker logs`). Nur gueltig bis zum ersten erfolgreichen Setup (Single-Use). - **Setup-Wizard**: Neuer Frontend-Route `/setup` — Formular mit Setup-Code, Vorname, Nachname, E-Mail, Passwort. Landingpage zeigt Link wenn DB leer. - **ContactData**: Die E-Mail aus dem Setup wird verschluesselt in der Datenbank gespeichert. - **docker-compose.prod.yml**: Production-Compose mit Images vom Registry-Server (`git.gs-woa.hopto.org/...`). - **.env.prod.example**: Vorlage fuer Produktions-Deployment. - **README**: Reverse-Proxy-Beispiele fuer nginx, traefik und cloudflared. - **E2E-Tests**: `APP_ENV=development` explizit in `e2e/docker-compose.e2e.yml` gesetzt. ## Begruendung - Production-Sicherheit: Keine Dev-Daten in Production. - Benutzerfreundlichkeit: Erster Admin kann sich selbst ueber den Browser einrichten. - Dokumentation: Klare Anleitung fuer Deployment mit Reverse-Proxy. ## Test-Hinweise - **Backend**: 660 Tests pass, 36 Test-Files. - **Frontend**: 1228 Tests pass, 74 Test-Files. - **Orval-Typen**: Aus openapi.yaml regeneriert. - **Integration-Test**: Manueller Durchlauf des Setup-Flows erfolgreich. ## Checkliste - [x] Lint-Check bestanden (Backend + Frontend) - [x] Unit-Tests bestanden (Backend + Frontend) - [x] E2E-Tests bestanden - [x] Testid-Check bestanden - [x] Orval-Typen regeneriert
feat(backend,frontend,infra): Production-Seed-Guard, Setup-Wizard, docker-compose.prod.yml
All checks were successful
CI Backend / lint-backend (pull_request) Successful in 1m9s
CI Frontend / lint-frontend (pull_request) Successful in 1m37s
CI Meta / conventional-commit (pull_request) Successful in 2s
E2E / e2e (pull_request) Successful in 6m35s
CI Backend / test-backend (pull_request) Successful in 4m0s
CI Frontend / test-frontend (pull_request) Successful in 2m2s
4f8ea335a8
closes #22

Aktuelles: Prisma-Dev-Seed lief auch in Production bei leerer DB. Kein
Mechanismus fuer Erst-Einrichtung. Keine Production-Compose-Vorlage.

Neu:
- Prisma-Seed (seed.ts) nur noch bei APP_ENV=development|test
- Keycloak ensureRealm() laeuft weiterhin immer (idempotent)
- Neue ungesicherte API-Endpunkte: GET /api/v1/setup/status,
  POST /api/v1/setup/complete (erster app-admin)
- Einmal-Setup-Token aus Server-Log (Single-Use, nur Production)
- Frontend-Setup-Wizard unter /setup mit Token-Feld
- Landingpage zeigt Einrichtung starten bei leerer DB
- E-Mail aus Setup wird in ContactData verschluesselt gespeichert
- docker-compose.prod.yml + .env.prod.example
- README mit Reverse-Proxy-Beispielen (nginx, traefik, cloudflared)

Wichtige Aenderung:
- setup-Route ist ungesichert, aber nur bei leerer DB aufrufbar
- Setup-Token wird in Production beim Backend-Start generiert und geloggt
niboer merged commit a43bdc742a into main 2026-07-20 16:34:47 +00:00
niboer deleted branch feature/production-seed-and-setup-wizard 2026-07-20 16:34:47 +00:00
Sign in to join this conversation.
No description provided.