Zum Inhalt springen

Architektur

Wie die Teile zusammenspielen und warum das Image so gebaut ist, wie es ist.

Was im Image steckt

Das Repo erzeugt ein einziges, in sich geschlossenes Keycloak-Image. Drei Bestandteile werden zur Build-Zeit eingebacken, damit der Produktivcontainer nichts weiter als eine Datenbank benötigt:

  • Stage 1 kompiliert das keycloakify/-Login-Theme zu einem Keycloak-Provider-JAR.
  • Stage 2 lädt die rockyou-Liste geleakter Passwörter herunter.
  • Stage 3 kopiert das Theme-JAR hinein und führt kc.sh build aus - ein optimierter Build, fest auf Postgres eingestellt, mit aktivierten Health-/Metrics-Endpunkten, damit der Produktivstart schnell geht.
  • Stage 4 setzt das Runtime-Image zusammen: den optimierten Server, die Sperrliste und die Importdateien des schuly-Realms.

Warum ein optimierter Build

kc.sh build löst den Datenbank-Vendor und die Feature-Flags im Voraus auf. Die Runtime startet dann mit start --optimized und überspringt den Build-Schritt bei jedem Boot. Der Kompromiss: Build-Zeit-Einstellungen (insbesondere KC_DB) sind im Image fest verankert - eine Änderung erfordert einen neuen Build. Verbindungsdetails und der Hostname bleiben Umgebungsvariablen zur Laufzeit. Siehe die Konfigurationsreferenz.

Request-/Login-Ablauf

Die Schuly-App authentifiziert sich über OIDC gegen das schuly-Realm (den öffentlichen Client schuly-app, PKCE). Keycloak liefert die gebrandeten Login-Seiten aus, erzwingt den 2FA-Flow browser-2fa und persistiert Nutzer und Sessions in Postgres. Health- und Metrics-Endpunkte werden getrennt auf Port 9000 ausschliesslich für internes Monitoring bereitgestellt.

Source Map

Siehe die Tabelle zur Repository-Struktur im Dokuindex dafür, welche Datei wofür zuständig ist.