This repository has been archived on 2026-01-03. You can view files and clone it, but cannot push or open issues or pull requests.
Files
lions-user-manager/PREPARATION_PRODUCTION.md

14 KiB

🚀 Guide de Préparation Production - Lions User Manager

Date: 2025-01-15
Version: 1.0.0
Statut: ⚠️ OBLIGATOIRE AVANT DÉPLOIEMENT


⚠️ IMPORTANT

NE PAS DÉPLOYER avant d'avoir complété toutes les étapes de ce guide. Le déploiement échouera si :

  • Keycloak n'est pas configuré (clients, rôles, utilisateurs)
  • La base de données PostgreSQL n'existe pas
  • Les secrets et variables d'environnement ne sont pas configurés

📋 Table des Matières

  1. Prérequis
  2. Configuration Keycloak Production
  3. Configuration Base de Données PostgreSQL
  4. Préparation des Secrets
  5. Vérification Pré-Déploiement
  6. Checklist Complète

1. Prérequis

Infrastructure Requise

  • Keycloak : Accessible sur https://security.lions.dev
  • PostgreSQL : Base de données disponible dans le cluster Kubernetes
  • Accès SSH : Accès au VPS/cluster pour exécuter les commandes
  • kubectl : Configuré et connecté au cluster de production
  • kcadm.sh : Keycloak Admin CLI (optionnel, pour scripts)

Accès Requis

  • Accès admin à Keycloak (master realm)
  • Accès admin au cluster Kubernetes
  • Accès à la base de données PostgreSQL

2. Configuration Keycloak Production

2.1. Créer le Realm (si nécessaire)

Le realm master est utilisé par défaut pour gérer tous les autres realms.

Vérification :

# Via Keycloak Admin Console
https://security.lions.dev/admin
# Realm: master
# User: admin

2.2. Créer les Clients OIDC

Client Frontend (lions-user-manager-client)

Configuration requise :

  • Client ID : lions-user-manager-client
  • Type : public (ou confidential avec secret)
  • Realm : master
  • Redirect URIs :
    • https://user-manager.lions.dev/*
    • https://admin.lions.dev/*
    • https://user-manager.lions.dev/auth/callback
  • Web Origins :
    • https://user-manager.lions.dev
    • https://admin.lions.dev
  • Standard Flow : Activé
  • Direct Access Grants : Désactivé (sécurité)
  • Service Accounts : Désactivé
  • PKCE : Activé (recommandé)

Script PowerShell : scripts/setup-keycloak-production.ps1 (à créer)

Client Backend (lions-user-manager)

Configuration requise :

  • Client ID : lions-user-manager
  • Type : confidential (avec secret)
  • Realm : master
  • Service Accounts : Activé (OBLIGATOIRE)
  • Standard Flow : Désactivé
  • Direct Access Grants : Activé (pour service account)
  • Authorization : Activé

Rôles à assigner au Service Account :

  • admin (dans le realm master)
  • Ou créer un rôle spécifique lions-user-manager-service avec les permissions nécessaires

Script PowerShell : scripts/setup-keycloak-production.ps1 (à créer)

2.3. Créer les Rôles Realm

Les rôles suivants doivent exister dans le realm master :

Rôle Description Utilisation
admin Administrateur système Accès complet à tous les endpoints
user_manager Gestionnaire utilisateur CRUD utilisateurs
user_viewer Visualiseur utilisateur Lecture seule utilisateurs
auditor Auditeur Consultation logs d'audit
sync_manager Gestionnaire synchronisation Gestion synchronisation
role_manager Gestionnaire rôles CRUD rôles
role_viewer Visualiseur rôles Lecture seule rôles

Script : scripts/setup-keycloak-roles-production.ps1 (à créer)

2.4. Configurer les Protocol Mappers

Client Scope : roles (déjà existant dans Keycloak)

Vérifier que le mapper inclut :

  • realm_access.roles dans l'access token
  • roles dans l'id token (optionnel)

Configuration :

  1. Aller dans Client Scopesroles
  2. Onglet Mappers
  3. Vérifier que realm roles existe et est configuré pour l'access token

2.5. Créer un Utilisateur de Test (Optionnel)

Pour tester l'application en production :

  • Username : admin-user-manager
  • Email : admin-user-manager@lions.dev
  • Password : (générer un mot de passe fort)
  • Rôles : Assigner admin, user_manager, auditor

3. Configuration Base de Données PostgreSQL

3.1. Créer la Base de Données

Nom : lions_audit

Script PowerShell : scripts/setup-database-production.ps1 (à créer)

Commandes manuelles :

# Se connecter au pod PostgreSQL
kubectl exec -it -n postgresql <postgres-pod-name> -- psql -U <postgres-user> -d postgres

# Créer la base de données
CREATE DATABASE lions_audit OWNER <postgres-user>;

# Créer l'utilisateur (si nécessaire)
CREATE USER lions_audit_user WITH PASSWORD '<strong-password>';

# Octroyer les privilèges
GRANT ALL PRIVILEGES ON DATABASE lions_audit TO lions_audit_user;

# Se connecter à la nouvelle base
\c lions_audit

# Vérifier les privilèges
\l

3.2. Vérifier les Migrations Flyway

Les migrations Flyway seront exécutées automatiquement au démarrage du backend si :

  • quarkus.flyway.migrate-at-start=true (déjà configuré dans application-prod.properties)

Vérification :

  • Les fichiers de migration sont dans lions-user-manager-server-impl-quarkus/src/main/resources/db/migration/
  • Flyway créera automatiquement les tables nécessaires

3.3. Configuration de Connexion

Variables d'environnement requises :

DB_HOST=lions-db.lions.svc.cluster.local  # Service Kubernetes
DB_PORT=5432
DB_NAME=lions_audit
DB_USERNAME=lions_audit_user
DB_PASSWORD=<strong-password>

4. Préparation des Secrets

4.1. Secrets Keycloak

Frontend Client Secret

Où le trouver :

  1. Keycloak Admin Console → Clientslions-user-manager-client
  2. Onglet Credentials
  3. Copier le Secret (si client confidential)

Si client public : Pas de secret nécessaire

Backend Service Account Secret

Où le trouver :

  1. Keycloak Admin Console → Clientslions-user-manager
  2. Onglet Credentials
  3. Copier le Secret

OIDC Encryption Secret

Générer un secret de 32 caractères minimum :

# Linux/Mac
openssl rand -base64 32

# PowerShell
-join ((48..57) + (65..90) + (97..122) | Get-Random -Count 32 | ForEach-Object {[char]$_})

Stockage : À stocker dans Kubernetes Secret

4.2. Secrets Base de Données

Générer un mot de passe fort :

# Linux/Mac
openssl rand -base64 24

# PowerShell
-join ((48..57) + (65..90) + (97..122) | Get-Random -Count 24 | ForEach-Object {[char]$_})

4.3. Créer les Kubernetes Secrets

Namespace : lions-user-manager (ou applications)

Secret pour Frontend :

apiVersion: v1
kind: Secret
metadata:
  name: lions-user-manager-client-secrets
  namespace: lions-user-manager
type: Opaque
stringData:
  KEYCLOAK_CLIENT_SECRET: <frontend-client-secret>
  OIDC_ENCRYPTION_SECRET: <32-char-encryption-secret>
  LIONS_USER_MANAGER_BACKEND_URL: https://api.lions.dev/lions-user-manager

Secret pour Backend :

apiVersion: v1
kind: Secret
metadata:
  name: lions-user-manager-server-secrets
  namespace: lions-user-manager
type: Opaque
stringData:
  KEYCLOAK_CLIENT_SECRET: <backend-service-account-secret>
  KEYCLOAK_ADMIN_USERNAME: <keycloak-admin-username>
  KEYCLOAK_ADMIN_PASSWORD: <keycloak-admin-password>
  DB_PASSWORD: <database-password>
  SSL_KEYSTORE_PASSWORD: <ssl-keystore-password>

5. Vérification Pré-Déploiement

5.1. Vérifier Keycloak

# Tester la connexion Keycloak
curl -k https://security.lions.dev/realms/master/.well-known/openid-configuration

# Tester l'obtention d'un token (service account)
curl -X POST https://security.lions.dev/realms/master/protocol/openid-connect/token \
  -d "client_id=lions-user-manager" \
  -d "client_secret=<secret>" \
  -d "grant_type=client_credentials"

5.2. Vérifier la Base de Données

# Tester la connexion PostgreSQL
kubectl exec -it -n postgresql <postgres-pod-name> -- psql -U lions_audit_user -d lions_audit -c "SELECT version();"

5.3. Vérifier les Secrets Kubernetes

# Lister les secrets
kubectl get secrets -n lions-user-manager

# Vérifier un secret (sans afficher les valeurs)
kubectl describe secret lions-user-manager-client-secrets -n lions-user-manager

6. Checklist Complète

Configuration Keycloak

  • Realm master accessible
  • Client frontend lions-user-manager-client créé
  • Client backend lions-user-manager créé avec service account
  • Secret frontend récupéré (si client confidential)
  • Secret backend (service account) récupéré
  • Rôles créés : admin, user_manager, user_viewer, auditor, sync_manager, role_manager, role_viewer
  • Rôles assignés au service account backend
  • Protocol mapper roles configuré pour inclure realm_access.roles
  • Utilisateur de test créé (optionnel)
  • Test de connexion Keycloak réussi

Configuration Base de Données

  • Base de données lions_audit créée
  • Utilisateur lions_audit_user créé
  • Privilèges accordés
  • Test de connexion réussi
  • Migrations Flyway prêtes (fichiers dans db/migration/)

Secrets et Configuration

  • Secret OIDC encryption généré (32+ caractères)
  • Secrets Kubernetes créés (frontend + backend)
  • Variables d'environnement documentées
  • ConfigMaps Kubernetes préparés (si nécessaire)

Infrastructure

  • Namespace Kubernetes créé
  • Ingress configuré (si exposition externe)
  • Certificats TLS/SSL préparés
  • Health checks configurés

Tests

  • Test Keycloak : Obtenir un token service account
  • Test Database : Connexion PostgreSQL
  • Test Secrets : Vérifier les secrets Kubernetes

7. Scripts de Configuration

7.1. Script Keycloak Production

Fichier : scripts/setup-keycloak-production.ps1 CRÉÉ

Ce script :

  1. Se connecte à Keycloak production (https://security.lions.dev)
  2. Crée les clients OIDC (frontend + backend)
  3. Crée les rôles realm (admin, user_manager, user_viewer, auditor, sync_manager, role_manager, role_viewer)
  4. Vérifie le protocol mapper roles
  5. Assigne les rôles au service account backend
  6. Affiche les secrets récupérés

Utilisation :

.\scripts\setup-keycloak-production.ps1 `
    -AdminUsername "admin" `
    -AdminPassword "your-admin-password"

7.2. Script Base de Données Production

Fichier : scripts/setup-database-production.ps1 CRÉÉ

Ce script :

  1. Se connecte au cluster Kubernetes via SSH
  2. Trouve le pod PostgreSQL
  3. Crée la base de données lions_audit
  4. Crée l'utilisateur lions_audit_user
  5. Octroie les privilèges
  6. Teste la connexion

Utilisation :

.\scripts\setup-database-production.ps1 `
    -VpsHost "lions@176.57.150.2" `
    -DatabasePassword "strong-password-123"

7.3. Script Création Secrets Kubernetes

Fichier : scripts/create-kubernetes-secrets-production.ps1 CRÉÉ

Ce script :

  1. Crée le namespace si nécessaire
  2. Crée le secret frontend (KEYCLOAK_CLIENT_SECRET, OIDC_ENCRYPTION_SECRET, LIONS_USER_MANAGER_BACKEND_URL)
  3. Crée le secret backend (KEYCLOAK_CLIENT_SECRET, KEYCLOAK_ADMIN_PASSWORD, DB_PASSWORD)
  4. Vérifie la création des secrets

Utilisation :

.\scripts\create-kubernetes-secrets-production.ps1 `
    -VpsHost "lions@176.57.150.2" `
    -FrontendClientSecret "<frontend-secret>" `
    -BackendClientSecret "<backend-secret>" `
    -OidcEncryptionSecret "<32-char-secret>" `
    -KeycloakAdminPassword "<admin-password>" `
    -DatabasePassword "<db-password>"

8. Ordre d'Exécution

IMPORTANT : Respecter cet ordre :

  1. Configuration Keycloak (clients, rôles, secrets)
  2. Configuration Base de Données (création DB, utilisateur)
  3. Création Secrets Kubernetes (secrets, configmaps)
  4. Vérification (tests de connexion)
  5. Déploiement (via lionsctl ou kubectl)

9. Commandes de Déploiement (APRÈS Configuration)

Une fois toutes les configurations terminées :

Server (Backend) :

cd ../lions-infrastructure-2025/lionsctl
./lionsctl.exe pipeline -u https://git.lions.dev/lionsdev/lions-user-manager-server-impl-quarkus -b main -j 17 -e production -c k2 -m gbanedahoud@gmail.com

Client (Frontend) :

cd ../lions-infrastructure-2025/lionsctl
./lionsctl.exe pipeline -u https://git.lions.dev/lionsdev/lions-user-manager-client-quarkus-primefaces-freya -b main -j 17 -e production -c k2 -m gbanedahoud@gmail.com

10. Troubleshooting

Erreur : "401 Unauthorized" lors du démarrage

Cause : Secret Keycloak incorrect ou client non configuré Solution : Vérifier les secrets dans Keycloak et Kubernetes

Erreur : "Database connection failed"

Cause : Base de données non créée ou credentials incorrects Solution : Vérifier la création de la DB et les credentials

Erreur : "Roles not found in token"

Cause : Protocol mapper non configuré Solution : Vérifier le mapper roles dans Keycloak


Conclusion

NE PAS DÉPLOYER avant d'avoir complété toutes les étapes de ce guide.

Ordre :

  1. ⚠️ Configuration Keycloak (OBLIGATOIRE)
  2. ⚠️ Configuration Base de Données (OBLIGATOIRE)
  3. ⚠️ Création Secrets Kubernetes (OBLIGATOIRE)
  4. Vérification (OBLIGATOIRE)
  5. 🚀 Déploiement (après vérification)

Document généré le : 2025-01-15
Dernière mise à jour : 2025-01-15

Scripts créés :

  • scripts/setup-keycloak-production.ps1 : Configuration Keycloak
  • scripts/setup-database-production.ps1 : Configuration PostgreSQL
  • scripts/create-kubernetes-secrets-production.ps1 : Création secrets Kubernetes

Prochaine étape : Exécuter les scripts dans l'ordre indiqué ci-dessus