# Déploiement en Production - Lions User Manager

## ✅ Vérification de la Déployabilité

### 1. Configuration Production

#### Backend (server-impl-quarkus)
- ✅ **Dockerfile.prod** : Multi-stage build optimisé avec sécurité renforcée
- ✅ **application-prod.properties** : Configuration complète pour production
  - SSL/TLS activé (`quarkus.oidc.tls.verification=required`)
  - Base de données PostgreSQL configurée pour audit
  - Logging vers fichiers et base de données
  - Métriques Prometheus activées
  - Health checks configurés
  - Swagger UI désactivé
  - Sécurité renforcée (`deny-unannotated-endpoints=true`)

#### Frontend (client-quarkus-primefaces-freya)
- ✅ **Dockerfile.prod** : Multi-stage build optimisé
- ✅ Configuration OIDC pour production
- ✅ CORS configuré pour les domaines de production

### 2. Dépendances Production

#### Backend
- ✅ PostgreSQL (pour logs d'audit)
- ✅ Keycloak (serveur d'authentification)
- ✅ Variables d'environnement requises :
  - `KEYCLOAK_CLIENT_SECRET`
  - `KEYCLOAK_ADMIN_USERNAME`
  - `KEYCLOAK_ADMIN_PASSWORD`
  - `DB_USERNAME`
  - `DB_PASSWORD`
  - `DB_HOST`
  - `DB_PORT`
  - `DB_NAME`
  - `SSL_KEYSTORE_FILE`
  - `SSL_KEYSTORE_PASSWORD`

#### Frontend
- ✅ Backend API accessible
- ✅ Keycloak OIDC configuré
- ✅ Variables d'environnement :
  - `QUARKUS_OIDC_AUTH_SERVER_URL`
  - `QUARKUS_OIDC_CLIENT_ID`
  - `LIONS_USER_MANAGER_BACKEND_URL`

### 3. Build Production

#### Backend
```bash
mvn clean package -DskipTests -pl lions-user-manager-server-impl-quarkus -Dquarkus.profile=prod
```

#### Frontend
```bash
mvn clean package -DskipTests -pl lions-user-manager-client-quarkus-primefaces-freya -Dquarkus.profile=prod
```

### 4. Docker Build

#### Backend
```bash
docker build -f lions-user-manager-server-impl-quarkus/Dockerfile.prod -t lions-user-manager-server:1.0.0 .
```

#### Frontend
```bash
docker build -f lions-user-manager-client-quarkus-primefaces-freya/Dockerfile.prod -t lions-user-manager-client:1.0.0 .
```

### 5. Points d'Attention

#### ⚠️ Variables d'Environnement
Toutes les variables d'environnement sensibles doivent être configurées via :
- Secrets Kubernetes
- Variables d'environnement Docker
- Configuration externe (Vault, etc.)

#### ⚠️ Base de Données
- La base de données PostgreSQL est **obligatoire** en production pour les logs d'audit
- Les migrations Flyway s'exécutent automatiquement au démarrage
- Configuration requise dans `application-prod.properties`

#### ⚠️ SSL/TLS
- Certificats SSL requis pour HTTPS
- Configuration dans `application-prod.properties` :
  - `quarkus.http.ssl.certificate.key-store-file`
  - `quarkus.http.ssl.certificate.key-store-password`

#### ⚠️ Keycloak
- Serveur Keycloak doit être accessible en HTTPS
- Client `lions-user-manager` doit être configuré dans Keycloak
- Secret client doit être fourni via variable d'environnement

### 6. Health Checks

Les endpoints de health check sont disponibles :
- `/q/health` : Health check général
- `/q/health/live` : Liveness probe
- `/q/health/ready` : Readiness probe
- `/q/metrics` : Métriques Prometheus

### 7. Monitoring

- ✅ Métriques Prometheus activées
- ✅ Logging structuré vers fichiers
- ✅ Logging vers base de données (audit)
- ✅ Health checks configurés

### 8. Sécurité

- ✅ SSL/TLS requis
- ✅ CORS configuré pour domaines spécifiques
- ✅ OIDC avec vérification TLS
- ✅ Endpoints non annotés refusés
- ✅ Swagger UI désactivé en production

## ✅ Conclusion

Le projet est **déployable en production** avec les configurations suivantes :

1. ✅ Dockerfiles de production présents et optimisés
2. ✅ Configuration production complète (`application-prod.properties`)
3. ✅ Variables d'environnement documentées
4. ✅ Health checks configurés
5. ✅ Monitoring et métriques activés
6. ✅ Sécurité renforcée
7. ✅ Base de données configurée pour audit

**Actions requises avant déploiement** :
1. Configurer les secrets Kubernetes/variables d'environnement
2. Configurer la base de données PostgreSQL
3. Configurer les certificats SSL/TLS
4. Configurer Keycloak avec le client `lions-user-manager`
5. Tester le build Docker en local
6. Déployer via Kubernetes/Docker Compose

