Set-OPS-Public/roles/serveur_keycloak
Daniel Allaire 840b21bfb6 artefacts : le controleur telecharge et pousse, la cible ne tire plus
Inventaire mesure de ce qu'une reconstruction de tenant telecharge — ~1,5 Gio :
Nextcloud 230 Mio, image collabora/code 471 Mio (Docker Hub), Keycloak 140,
Forgejo 101, oauth2-proxy 18, plus les paquets apt (Debian + Grafana +
smallstep + Icinga) sur 14 hotes.

Les quatre archives sont EPINGLEES EN VERSION et vont chacune sur UN SEUL
hote. Les retelecharger a chaque reconstruction est un gaspillage et une
dependance de plus sur le chemin critique — un serveur tiers lent a deja fait
tomber un deploiement le 2026-08-09, sur le binaire Forgejo precisement.

POURQUOI POUSSER PLUTOT QUE SERVIR UN CACHE. L'exploitant proposait son poste
comme cache HTTP ; l'intention est juste mais elle butait sur ce qu'on avait
ferme le matin meme : les regles sortantes visent !SETOPS_INTERNES, donc une
VM de tenant ne peut plus atteindre le poste. Servir un cache aurait exige de
ROUVRIR un flux vers le plan d'administration.

L'inversion evite le probleme entier : le controleur telecharge dans son cache
(~/.cache/setops, garde par un stat), puis pousse par le canal SSH qui existe
deja. Aucun port, aucun service, aucune regle, aucun couplage. Et ces
artefacts deviennent deployables HORS LIGNE une fois le cache rempli.

Ce que ca ne couvre pas, et qu'il faut nommer : l'image collabora/code, seule
entorse a la doctrine « zero Docker » du depot — elle merite sa propre
decision, pas un contournement discret ; et les paquets apt, dont le cache a
sa place cote HEBERGEUR, partage entre tenants.

Et une mesure qui a contredit mon hypothese : le .zip de Nextcloud pese
271 Mio contre 230 pour le .tar.bz2. Il telecharge PLUS pour decompresser
moins lentement. Le changement de format attend une mesure, pas une intuition.

Verifie : cache rempli (491 Mio, 4/4), ansible-lint production sur 79 fichiers,
prouver.py 35 OK, plus aucun get_url n'ecrit sur la cible.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 20:58:58 -04:00
..
defaults artefacts : le controleur telecharge et pousse, la cible ne tire plus 2026-08-10 20:58:58 -04:00
files/themes/alliance-boreale docs(keycloak) : documenter le thème Alliance + la compatibilité MAJ 2026-07-04 10:05:58 -04:00
handlers Rendre le dry-run (--check) fiable sur les rôles applicatifs 2026-07-01 21:01:53 -04:00
meta keycloak : realm-admin par appartenance, et la boucle de mot de passe 2026-08-07 19:47:10 -04:00
tasks artefacts : le controleur telecharge et pousse, la cible ne tire plus 2026-08-10 20:58:58 -04:00
templates Zéro-confiance : Keycloak→PG en verify-full + root_ca lisible (0644) 2026-07-04 18:45:16 -04:00
README.md docs(keycloak) : documenter le thème Alliance + la compatibilité MAJ 2026-07-04 10:05:58 -04:00

serveur_keycloak

SSO / IAM Keycloak (distribution Quarkus) — hub d'authentification centralisée (OIDC/SAML) pour les services internes.

Rôle

  • Installe un JRE, télécharge et extrait la distribution Keycloak dans /opt/keycloak.
  • Configure la base PostgreSQL via le registre instance/plan/bases-donnees.yml (entrée keycloak).
  • Publie derrière serveur_nginx (TLS à l'edge) : hostname, proxy-headers=xforwarded, http-enabled=true.
  • Secrets (mot de passe BD + admin bootstrap) dans /etc/keycloak/keycloak.env (0640, no_log).
  • kc.sh build --db=postgres (une fois par version) puis service systemd start --optimized.

Premier consommateur du registre de BD

L'entrée keycloak de instance/plan/bases-donnees.yml fait que :

  1. serveur_postgresql crée la base keycloak + le compte propriétaire keycloak.
  2. Ce rôle lit la même entrée pour bâtir sa connexion (db-url-database, db-username, mot de passe = vault_bd_keycloak).

Mot de passe partagé, source unique. Dépendance serveur_keycloak requiert serveur_postgresql actif déjà dans docs/dependances-groupes.yml.

Secrets requis (Vault)

serveur_keycloak_admin_password: "{{ vault_keycloak_admin }}"   # admin bootstrap
vault_bd_keycloak: "..."                                          # mot de passe BD (partage avec postgres)

Variables principales

Variable Défaut Rôle
serveur_keycloak_version 26.0.7 Version (à vérifier/bumper sur keycloak.org/downloads)
serveur_keycloak_hostname keycloak.exemple.internal Hostname public (via nginx)
serveur_keycloak_db_host 10.0.13.11 IP de data-01 (serveur_postgresql)
serveur_keycloak_admin_user admin Admin bootstrap
serveur_keycloak_login_theme "" Thème de login du realm (vide = défaut Keycloak)
serveur_keycloak_account_theme "" Thème de la console de compte
serveur_keycloak_theme_cache true Cache des ressources de thème (true=prod/perf, false=lab/itération)

Thème (identité Alliance Boréale)

Un thème alliance-boreale (dans files/themes/) applique l'identité visuelle du site de l'Alliance : ciel nocturne aurore + constellation animée, cartes en verre, accents aurore, logo étoile, police système. Il couvre le login (login/) et la console de compte (account/).

Comment ça marche :

  • theme.properties : parent=keycloak (login) / parent=keycloak.v3 (account) + styles= (CSS)
    • scripts= (la constellation JS). C'est un calque CSS/JS posé sur la structure PatternFly de Keycloak.
  • Déployé dans {{ serveur_keycloak_home }}/themes/ (copie inconditionnelle, à chaque déploiement, après l'extraction de Keycloak) et appliqué au realm via kcadm -s loginTheme/accountTheme.
  • serveur_keycloak_theme_cache: false (lab) sert les ressources en no-cache — sinon Keycloak les marque « immuables » et le navigateur garde l'ancien CSS même en Ctrl+Shift+R (piège classique ; utiliser une fenêtre privée pour vérifier un changement).
  • Le JS de constellation s'initialise sur DOMContentLoaded (Keycloak injecte le <script> dans <head>, avant que <body> existe).

⚠️ Mise à jour de Keycloak — à savoir :

  • Pas de réapparition de l'ancien thème : le thème est codifié + réappliqué à chaque make deployer (la copie survit à l'extraction et n'a pas de garde creates). Une MAJ via Set-OPS réinstalle le thème.
  • Le vrai risque = compatibilité : le calque dépend des classes PatternFly (.pf-c-* / .pf-v5-*) et des thèmes parents (keycloak, keycloak.v3). Une MAJ majeure de Keycloak peut changer PatternFly ou renommer un parent → le rendu se dégrade ou tombe sur le défaut ; il faut alors retoucher le CSS / le parent (le thème ne « redevient » pas l'ancien, il demande un ajustement).
  • Check-list MAJ : après un bump de serveur_keycloak_version, ouvrir le login + la console de compte et vérifier le rendu (~2 min). La version étant épinglée, les MAJ sont délibérées.

Notes / limites

  • Version : à confirmer/bumper ; l'URL suit le motif officiel des releases GitHub.
  • L'unité systemd est dérivée des conventions Keycloak (la doc officielle ne fournit pas d'unité) — sandboxing volontairement modéré pour ne pas casser le démarrage.
  • Le site nginx publiant Keycloak se déclare côté serveur_nginx (serveur_nginx_sites), pas ici.
  • Certificats : TLS terminé à l'edge ; aucun certificat sur Keycloak.

Prérequis

  • Réseau sortant pour télécharger la distribution.
  • Base PostgreSQL atteignable (dépendance serveur_postgresql).