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.