Zum Inhalt springen

Konfigurationsreferenz

Alles, was sich am Schuly-Keycloak-Image konfigurieren lässt, an einem Ort. Das Image ist ein optimierter Keycloak-26.6-Build - Datenbank-Vendor, Health- und Metrics-Endpunkte sind also bereits zur Build-Zeit eingebacken. Zur Laufzeit gibst du im Wesentlichen nur die Datenbankverbindung, den öffentlichen Hostnamen und einen Bootstrap-Admin an.

Ports

PortZweckÖffentlich freigeben?
8080HTTP - Login-Seiten, OIDC-/SAML-Endpunkte, Admin-Konsole, Admin-REST-API.Ja, über deinen Reverse Proxy (der TLS terminiert).
9000Management - /health, /health/ready, /health/live, /metrics.Nein. Intern halten; niemals ins Internet proxyen.

Umgebungsvariablen zur Laufzeit

Setze diese am Container (z. B. environment: in Compose oder -e bei docker run).

VariableErforderlichZweck
KC_DB_URLJaJDBC-URL der Postgres-Datenbank, z. B. jdbc:postgresql://db:5432/keycloak.
KC_DB_USERNAMEJaDatenbank-Benutzer.
KC_DB_PASSWORDJaDatenbank-Passwort.
KC_HOSTNAMEJa (prod)Öffentliche URL, unter der Keycloak ausgeliefert wird, z. B. https://auth.schuly.dev. Keycloak baut daraus alle Issuer-/Redirect-URLs.
KC_PROXY_HEADERSJa (hinter einem Proxy)Auf xforwarded setzen, wenn ein Reverse Proxy TLS terminiert und X-Forwarded-*-Header weiterleitet (forwarded verwenden, falls er den RFC-7239-Header Forwarded sendet).
KC_HTTP_ENABLEDJa (hinter einem Proxy)true, damit das Backend auf 8080 einfaches HTTP ausliefert, während der Proxy HTTPS übernimmt.
KC_BOOTSTRAP_ADMIN_USERNAMEnur beim ersten StartTemporärer Bootstrap-Admin-Benutzername. Einmalig verwenden, um einen echten Admin anzulegen, danach entfernen.
KC_BOOTSTRAP_ADMIN_PASSWORDnur beim ersten StartTemporäres Bootstrap-Admin-Passwort.
KC_HTTP_PORT-HTTP-Port überschreiben (Standard 8080).
KC_LOG_LEVEL-Root-Log-Level (z. B. info, debug).

Setze KC_DB nicht - das Image ist für Postgres gebaut. Den Vendor umzustellen würde einen neuen Build des optimierten Images erfordern.

SMTP (Realm-E-Mail)

Der Mailserver des schuly-Realms wird beim Start aus der Container-Umgebung befüllt - das Realm liefert ${env.SMTP_*}-Platzhalter, die scripts/resolve-realm-env.sh vor dem Import auflöst. Lässt du sie ungesetzt, wird das Realm ohne funktionierenden Mailserver importiert - das ist unproblematisch, bis du verifizierte E-Mails oder die Self-Service-Passwort-Zurücksetzung brauchst.

VariableErforderlichZweck
SMTP_HOSTfür MailHostname des Mailservers.
SMTP_PORTfür MailPort des Mailservers, z. B. 587.
SMTP_FROM-Absenderadresse. Standardmässig noreply@localhost; setze eine echte Adresse, bevor du Mail aktivierst.
SMTP_USERfür MailSMTP-Benutzername (das Realm sendet auth: true).
SMTP_PASSWORDfür MailSMTP-Passwort.
SMTP_SSL-true für implizites TLS.
SMTP_STARTTLS-true für STARTTLS.

Diese gelten nur beim ersten Start, wenn das Realm importiert wird. Änderungen danach wirken sich nicht auf ein bestehendes Realm aus - passe die Mail-Einstellungen stattdessen in der Admin-Konsole an (Realm-Einstellungen → E-Mail).

Fest eingebackene Build-Einstellungen

Diese sind zur Image-Build-Zeit (kc.sh build) fixiert und werden in der Regel nicht zur Laufzeit geändert:

EinstellungWertWo
Datenbank-VendorKC_DB=postgresDockerfile (Builder-Stage)
Health-EndpunkteKC_HEALTH_ENABLED=trueDockerfile (Builder-Stage)
Metrics-EndpunktKC_METRICS_ENABLED=trueDockerfile (Builder-Stage)
Start-Kommandostart --optimized --import-realmDockerfile (CMD)
Pfad der Passwort-SperrlisteJAVA_OPTS_APPEND=-Dkeycloak.password.blacklists.path=…Dockerfile (ENV)

Fest eingebackenes Verhalten

  • Realm-Import - das schuly-Realm wird beim ersten Start importiert. Bei späteren Starts bleibt ein bestehendes Realm unangetastet. Siehe Realm-Verwaltung.
  • Sperrliste geleakter Passwörter - die rockyou-Liste liegt unter /opt/keycloak/password-blacklists/rockyou.txt; die Passwort-Policy des Realms nutzt passwordBlacklist(rockyou.txt).
  • Login-Theme - das Keycloakify-Theme schuly ist als Provider-JAR installiert und wird vom Realm ausgewählt (loginTheme: "schuly"). Siehe Theme-Entwicklung.

Volumes

Im Produktivbetrieb (Postgres) liegt der gesamte Zustand in der Datenbank, es ist also kein Volume erforderlich. Die Realm-Importdateien sind im Image unter /opt/keycloak/data/import eingebacken.

Die lokale Entwicklung ist anders: Sie verwendet eine eingebettete H2-Datenbank, die im benannten Volume keycloak-data-dev persistiert wird - siehe Entwicklungsumgebung.