Zum Inhalt

Keycloak

Diese Rolle installiert/deinstalliert Keycloak mit einer eigenen PostgreSQL-Datenbank über Docker Compose. Keycloak läuft mit start hinter einem Reverse Proxy, der TLS terminiert. Docker mit Compose-Plugin und die Collection community.docker müssen installiert sein. Das externe Proxy-Netzwerk muss bereits existieren.

Variablen

Die Konfiguration erfolgt wie bei der Zitadel-Rolle über die Gruppen-/Host-Variablen:

1
2
3
4
5
keycloak_domain: keycloak.example.org
keycloak_proxy_network: proxy
keycloak_admin_user: admin
keycloak_admin_password: "{{ vault_keycloak_admin_password }}"
keycloak_pg_password: "{{ vault_keycloak_pg_password }}"

Beide Passwörter müssen gesetzt und mit Ansible Vault gespeichert werden. Die Admin-Zugangsdaten erstellen beim ersten Start einen temporären Bootstrap-Admin. Danach einen dauerhaften Administrator anlegen und den temporären Benutzer löschen. Eine spätere Änderung der Variablen setzt bestehende Admin- oder Datenbankpasswörter nicht zurück.

Verwendung

Die Rolle im gewünschten Playbook ergänzen:

1
2
3
4
- name: Deploy Keycloak
  hosts: docker_idp
  roles:
    - role: keycloak
1
2
uv run ansible-playbook -i inventory/hosts.yml playbooks/keycloak.yml --tags keycloak-install
uv run ansible-playbook -i inventory/hosts.yml playbooks/keycloak.yml --tags keycloak-uninstall

playbooks/keycloak.yml ist hier der Pfad des selbst angelegten Playbooks. Wie bei Zitadel führt ein Aufruf ohne Tag zuerst die Deinstallation und dann die Installation aus. Für Updates gezielt keycloak-install verwenden.

Die Deinstallation entfernt beide Container; das Volume keycloak_postgres und die Netzwerke bleiben erhalten. Vor Versionsupdates ein Datenbank-Backup erstellen.

Reverse Proxy

Beispiel für Caddy im selben Docker-Netzwerk:

1
2
3
keycloak.example.org {
    reverse_proxy keycloak:8080
}

DNS muss auf den Proxy zeigen. Der Proxy muss die X-Forwarded-*-Header zuverlässig setzen/überschreiben. Nur vertrauenswürdige Container dürfen Zugriff auf das Proxy-Netzwerk haben. Keycloak und PostgreSQL veröffentlichen keine Host-Ports.

Referenzen: Keycloak Container, Reverse Proxy.