Migration complète vers PrimeFaces Freya - Corrections des incompatibilités et intégration de primefaces-freya-extension
This commit is contained in:
484
PREPARATION_PRODUCTION.md
Normal file
484
PREPARATION_PRODUCTION.md
Normal file
@@ -0,0 +1,484 @@
|
||||
# 🚀 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](#prérequis)
|
||||
2. [Configuration Keycloak Production](#configuration-keycloak-production)
|
||||
3. [Configuration Base de Données PostgreSQL](#configuration-base-de-données-postgresql)
|
||||
4. [Préparation des Secrets](#préparation-des-secrets)
|
||||
5. [Vérification Pré-Déploiement](#vérification-pré-déploiement)
|
||||
6. [Checklist Complète](#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** :
|
||||
```bash
|
||||
# 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 Scopes** → `roles`
|
||||
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** :
|
||||
```bash
|
||||
# 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** :
|
||||
```bash
|
||||
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 → **Clients** → `lions-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 → **Clients** → `lions-user-manager`
|
||||
2. Onglet **Credentials**
|
||||
3. Copier le **Secret**
|
||||
|
||||
#### OIDC Encryption Secret
|
||||
|
||||
**Générer un secret de 32 caractères minimum** :
|
||||
```bash
|
||||
# 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** :
|
||||
```bash
|
||||
# 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** :
|
||||
```yaml
|
||||
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** :
|
||||
```yaml
|
||||
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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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** :
|
||||
```powershell
|
||||
.\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** :
|
||||
```powershell
|
||||
.\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** :
|
||||
```powershell
|
||||
.\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)** :
|
||||
```bash
|
||||
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)** :
|
||||
```bash
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user