Production et monitoring 25 min de lecture

Sauvegarde, migration et mise a jour

Sauvegarde et restauration

La sauvegarde de Keycloak repose sur l'export des realms et la sauvegarde de la base de donnees.

Export des realms

# Export complet (tous les realms)
/opt/keycloak/bin/kc.sh export \
  --dir=/backup/keycloak \
  --users=same_file

# Export d'un realm specifique
/opt/keycloak/bin/kc.sh export \
  --dir=/backup/keycloak \
  --realm=production \
  --users=different_files \
  --users-per-file=500

# Options users :
# same_file     -> users dans le fichier realm
# different_files -> users dans des fichiers separes
# skip          -> ne pas exporter les users

Sauvegarde de la base de donnees

# PostgreSQL - dump complet
pg_dump -h db-host -U keycloak -d keycloak \
  -F custom -f keycloak_backup.dump

# PostgreSQL - restauration
pg_restore -h db-host -U keycloak -d keycloak \
  keycloak_backup.dump

# Script de backup automatise
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=/backup/keycloak

# 1. Export realm
/opt/keycloak/bin/kc.sh export \
  --dir=$BACKUP_DIR/realms/$DATE

# 2. Dump base
pg_dump -h db-host -U keycloak -d keycloak \
  -F custom -f $BACKUP_DIR/db/keycloak_$DATE.dump

# 3. Rotation (garder 30 jours)
find $BACKUP_DIR -mtime +30 -delete

Import de realms

# Import au demarrage (premier lancement)
/opt/keycloak/bin/kc.sh start \
  --import-realm \
  --file=/backup/keycloak/production-realm.json

# Import partiel via API Admin
POST /admin/realms/partialImport
Content-Type: application/json
Authorization: Bearer {admin_token}
{
  "ifResourceExists": "OVERWRITE",
  "clients": [...],
  "roles": {...},
  "users": [...]
}

Strategie de mise a jour

# Etapes de mise a jour Keycloak
# 1. Lire les release notes et le guide de migration
# 2. Sauvegarder la base et exporter les realms
# 3. Tester sur un environnement de staging
# 4. Mettre a jour en production

# Mise a jour avec Docker
# Ancien : quay.io/keycloak/keycloak:24.0.0
# Nouveau : quay.io/keycloak/keycloak:25.0.0

# Rolling update sur Kubernetes
helm upgrade keycloak bitnami/keycloak \
  --set image.tag=25.0.0 \
  --reuse-values

# Verification post-mise a jour
# 1. Verifier les logs de demarrage
kubectl logs -n keycloak keycloak-0 | grep "migration"
# 2. Tester le login
curl -s https://auth.mondomaine.com/realms/master/.well-known/openid-configuration
# 3. Verifier la version
curl -s https://auth.mondomaine.com/ | grep version

Tuning JVM

# Variables d'environnement recommandees
JAVA_OPTS_APPEND="\
  -Xms512m \
  -Xmx2g \
  -XX:+UseG1GC \
  -XX:MaxGCPauseMillis=200 \
  -XX:+UseStringDeduplication \
  -Djava.net.preferIPv4Stack=true"

# Pour le debug
JAVA_OPTS_APPEND="$JAVA_OPTS_APPEND \
  -XX:+HeapDumpOnOutOfMemoryError \
  -XX:HeapDumpPath=/tmp/heapdump.hprof"
Regle d'or : Ne mettez jamais a jour Keycloak directement en production. Testez toujours sur un environnement de staging avec une copie de la base de production.