meldestelle/docs/99_Journal/2026-03-06_Session_Log_Keycloak_Fix.md

2.8 KiB

type status owner last_update
Journal ACTIVE Curator 2026-03-06

Journal - 2026-03-06

📝 Zusammenfassung

Keycloak funktionierte lokal einwandfrei, aber auf dem Meldestellen-Host war das Admin-Dashboard (:8180) nicht erreichbar und der Login schlug fehl — obwohl der Health-Port (:9000) grün war. Root Cause: Das pre-built Registry-Image wurde mit start-dev gestartet (Konflikt) und KC_HOSTNAME=localhost war auf dem Server falsch.

🛠️ Änderungen

1. dc-infra.yaml — Keycloak-Service bereinigt

  • Command: start-dev --import-realmstart --optimized --import-realm (nutzt das pre-built Image korrekt).
  • Neu: KC_HOSTNAME_STRICT=false und KC_HOSTNAME_STRICT_HTTPS=false — erlaubt HTTP-Betrieb ohne TLS-Zwang.
  • Neu: KC_HTTP_MANAGEMENT_PORT=9000 — Management-Interface explizit konfiguriert.
  • Fix: KC_DEBUG_PORTKC_MANAGEMENT_PORT umbenannt (war falsch benannt).
  • Fix: Image-Pfad von grandmomocode-software korrigiert.
  • Neu: Healthcheck auf http://localhost:9000/health/ready ergänzt.

2. .env — Keycloak-Block erweitert

  • KC_HOSTNAME_STRICT=false, KC_HOSTNAME_STRICT_HTTPS=false, KC_MANAGEMENT_PORT=9000:9000 hinzugefügt.
  • Erklärende Kommentare: LOKAL vs. SERVER für KC_COMMAND und KC_HOSTNAME.

3. .env.example — Als Server-Vorlage optimiert

  • Default KC_COMMAND=start --optimized --import-realm (Server-Default).
  • <PLACEHOLDER>-Werte für alle Secrets (KC_ADMIN_PASSWORD, KC_DB_PASSWORD) und KC_HOSTNAME.
  • SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_ISSUER_URI mit <SERVER_IP_ODER_DOMAIN>-Platzhalter.
  • Klare LOKAL/SERVER-Kommentare bei allen kritischen Variablen.

📚 Gelerntes

  • kc.sh build + start-dev = Konflikt: Ein mit kc.sh build optimiertes Image muss mit start --optimized gestartet werden. start-dev ignoriert den Pre-Build und startet im Dev-Modus — das bricht das Registry-Image auf dem Server.
  • KC_HOSTNAME steuert den HTTP-Port, nicht den Management-Port: Port 9000 (Health) ist immer auf 0.0.0.0 gebunden. Port 8080/8180 (HTTP) wird durch KC_HOSTNAME gesteuert — daher war Health grün, aber Admin-Dashboard nicht erreichbar.
  • KC_HOSTNAME_STRICT=false ist Pflicht für HTTP-only Server: Ohne dieses Flag lehnt Keycloak alle Requests ab, deren Host-Header nicht exakt mit KC_HOSTNAME übereinstimmt.

🔜 Nächste Schritte

  • Auf dem Meldestellen-Host die .env anpassen:
    • KC_HOSTNAME=<SERVER_IP>
    • KC_COMMAND=start --optimized --import-realm
    • SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_ISSUER_URI=http://<SERVER_IP>:8180/realms/meldestelle
  • Container neu starten und Admin-Dashboard + Login verifizieren.
  • Langfristig: TLS/HTTPS einrichten, dann KC_HOSTNAME_STRICT_HTTPS=true setzen.