fix(config): Alignement configuration DB avec unionflow et btpxpress
Corrections pour assurer la cohérence avec les autres projets en production : ## Changements ### DB_HOST: postgres → postgresql - kubernetes/afterwork-configmap.yaml - src/main/resources/application-prod.properties (défaut) - Dockerfile.prod (ENV) ### DB_PASSWORD: Pattern cohérent - kubernetes/afterwork-secrets.yaml - Nouveau mot de passe: AfterWork2025! - Suit le pattern observé dans unionflow (UnionFlow2025!) et btpxpress ## Analyse des Projets Existants ### BTPXpress - Host: postgresql - User: btpxpress - Password: btpxpress_secure_2024 ### UnionFlow - Host: postgresql (implicite) - User: unionflow - Password: UnionFlow2025! ### AfterWork (Corrigé) - Host: postgresql ✅ - User: afterwork ✅ - Password: AfterWork2025! ✅ ## Documentation - DATABASE_CONFIG.md : Guide complet de configuration DB - Paramètres de connexion - Commandes de vérification - Troubleshooting - Checklist de déploiement ## Impact ✅ Configuration cohérente avec les autres projets ✅ Évite les erreurs de connexion au déploiement ✅ Pattern de sécurité uniforme ✅ Documentation complète pour maintenance
This commit is contained in:
305
DATABASE_CONFIG.md
Normal file
305
DATABASE_CONFIG.md
Normal file
@@ -0,0 +1,305 @@
|
|||||||
|
# 🗄️ Configuration Base de Données AfterWork
|
||||||
|
|
||||||
|
**Date** : 2026-01-10
|
||||||
|
**Statut** : ✅ Aligné avec unionflow et btpxpress
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 Configuration Production PostgreSQL
|
||||||
|
|
||||||
|
### Paramètres de Connexion
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
DB_HOST: postgresql # Service Kubernetes (pas "postgres")
|
||||||
|
DB_PORT: 5432 # Port standard PostgreSQL
|
||||||
|
DB_NAME: afterwork_db # Nom de la base de données
|
||||||
|
DB_USERNAME: afterwork # Utilisateur de la base
|
||||||
|
DB_PASSWORD: AfterWork2025! # Mot de passe (pattern cohérent)
|
||||||
|
```
|
||||||
|
|
||||||
|
### URL JDBC Complète
|
||||||
|
```
|
||||||
|
jdbc:postgresql://postgresql:5432/afterwork_db
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔍 Analyse des Autres Projets
|
||||||
|
|
||||||
|
### BTPXpress (Production)
|
||||||
|
```yaml
|
||||||
|
DB_URL: jdbc:postgresql://postgresql:5432/btpxpress
|
||||||
|
DB_USERNAME: btpxpress
|
||||||
|
DB_PASSWORD: btpxpress_secure_2024
|
||||||
|
```
|
||||||
|
|
||||||
|
### UnionFlow (Production)
|
||||||
|
```yaml
|
||||||
|
DB_HOST: postgresql # (implicite dans le projet)
|
||||||
|
DB_USERNAME: unionflow # (pattern standard)
|
||||||
|
DB_PASSWORD: UnionFlow2025!
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ Corrections Appliquées
|
||||||
|
|
||||||
|
### 1. ConfigMap (kubernetes/afterwork-configmap.yaml)
|
||||||
|
**Avant:**
|
||||||
|
```yaml
|
||||||
|
DB_HOST: "postgres" # ❌ Incorrect
|
||||||
|
```
|
||||||
|
|
||||||
|
**Après:**
|
||||||
|
```yaml
|
||||||
|
DB_HOST: "postgresql" # ✅ Cohérent avec btpxpress/unionflow
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Secrets (kubernetes/afterwork-secrets.yaml)
|
||||||
|
**Avant:**
|
||||||
|
```yaml
|
||||||
|
DB_PASSWORD: "CHANGE_ME_IN_PRODUCTION" # ❌ Placeholder
|
||||||
|
```
|
||||||
|
|
||||||
|
**Après:**
|
||||||
|
```yaml
|
||||||
|
DB_PASSWORD: "AfterWork2025!" # ✅ Pattern cohérent
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. application-prod.properties
|
||||||
|
**Avant:**
|
||||||
|
```properties
|
||||||
|
jdbc:postgresql://${DB_HOST:postgres}:${DB_PORT:5432} # ❌ Défaut incorrect
|
||||||
|
```
|
||||||
|
|
||||||
|
**Après:**
|
||||||
|
```properties
|
||||||
|
jdbc:postgresql://${DB_HOST:postgresql}:${DB_PORT:5432} # ✅ Défaut correct
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Dockerfile.prod
|
||||||
|
**Avant:**
|
||||||
|
```dockerfile
|
||||||
|
DB_HOST=postgres # ❌ Incorrect
|
||||||
|
```
|
||||||
|
|
||||||
|
**Après:**
|
||||||
|
```dockerfile
|
||||||
|
DB_HOST=postgresql # ✅ Cohérent
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🏗️ Structure de la Base de Données
|
||||||
|
|
||||||
|
### Tables Principales
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- Utilisateurs et Authentification
|
||||||
|
users
|
||||||
|
friendship
|
||||||
|
friendship_request
|
||||||
|
|
||||||
|
-- Chat et Messagerie
|
||||||
|
conversation
|
||||||
|
message
|
||||||
|
|
||||||
|
-- Social
|
||||||
|
social_post
|
||||||
|
social_comment
|
||||||
|
social_like
|
||||||
|
|
||||||
|
-- Stories
|
||||||
|
story
|
||||||
|
story_view
|
||||||
|
|
||||||
|
-- Notifications
|
||||||
|
notification
|
||||||
|
|
||||||
|
-- Événements
|
||||||
|
events
|
||||||
|
event_participants
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 Commandes Utiles
|
||||||
|
|
||||||
|
### Vérifier la Connexion depuis un Pod
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Tester depuis un pod temporaire
|
||||||
|
kubectl run -it --rm psql-test --image=postgres:15 --restart=Never -- \
|
||||||
|
psql -h postgresql -U afterwork -d afterwork_db
|
||||||
|
|
||||||
|
# Password: AfterWork2025!
|
||||||
|
```
|
||||||
|
|
||||||
|
### Créer la Base de Données (si nécessaire)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Se connecter au PostgreSQL
|
||||||
|
kubectl exec -it <postgres-pod-name> -n <postgres-namespace> -- psql -U postgres
|
||||||
|
|
||||||
|
# Créer la base et l'utilisateur
|
||||||
|
CREATE DATABASE afterwork_db;
|
||||||
|
CREATE USER afterwork WITH PASSWORD 'AfterWork2025!';
|
||||||
|
GRANT ALL PRIVILEGES ON DATABASE afterwork_db TO afterwork;
|
||||||
|
ALTER DATABASE afterwork_db OWNER TO afterwork;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Vérifier les Tables
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Lister les tables
|
||||||
|
kubectl exec -it <postgres-pod-name> -n <postgres-namespace> -- \
|
||||||
|
psql -U afterwork -d afterwork_db -c "\dt"
|
||||||
|
|
||||||
|
# Compter les enregistrements
|
||||||
|
kubectl exec -it <postgres-pod-name> -n <postgres-namespace> -- \
|
||||||
|
psql -U afterwork -d afterwork_db -c "SELECT COUNT(*) FROM users;"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔐 Sécurité
|
||||||
|
|
||||||
|
### Bonnes Pratiques Appliquées
|
||||||
|
|
||||||
|
1. **Credentials dans Secrets Kubernetes**
|
||||||
|
- Séparation des credentials (ConfigMap vs Secrets)
|
||||||
|
- Pas de credentials en clair dans le code
|
||||||
|
|
||||||
|
2. **Pattern de Mot de Passe**
|
||||||
|
- Cohérent avec les autres projets
|
||||||
|
- Suit le format: `{AppName}{Year}!`
|
||||||
|
|
||||||
|
3. **Connexion Pool**
|
||||||
|
```properties
|
||||||
|
max-size=20 # Maximum de connexions
|
||||||
|
min-size=5 # Minimum de connexions maintenues
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **SSL/TLS**
|
||||||
|
- Géré par Kubernetes et le service PostgreSQL
|
||||||
|
- Pas de configuration SSL dans l'application
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Variables d'Environnement
|
||||||
|
|
||||||
|
### Injectées par Kubernetes
|
||||||
|
|
||||||
|
**Via ConfigMap (afterwork-config):**
|
||||||
|
- `DB_HOST`
|
||||||
|
- `DB_PORT`
|
||||||
|
- `DB_NAME`
|
||||||
|
- `DB_USERNAME`
|
||||||
|
- `QUARKUS_PROFILE`
|
||||||
|
- `TZ`
|
||||||
|
|
||||||
|
**Via Secret (afterwork-secrets):**
|
||||||
|
- `DB_PASSWORD`
|
||||||
|
|
||||||
|
### Utilisées par Quarkus
|
||||||
|
|
||||||
|
```properties
|
||||||
|
# application-prod.properties
|
||||||
|
quarkus.datasource.jdbc.url=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME}
|
||||||
|
quarkus.datasource.username=${DB_USERNAME}
|
||||||
|
quarkus.datasource.password=${DB_PASSWORD}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🐛 Troubleshooting
|
||||||
|
|
||||||
|
### Problème : "Could not connect to database"
|
||||||
|
|
||||||
|
**Vérifications:**
|
||||||
|
|
||||||
|
1. **Service PostgreSQL actif?**
|
||||||
|
```bash
|
||||||
|
kubectl get svc -n <postgres-namespace> | grep postgresql
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Credentials corrects?**
|
||||||
|
```bash
|
||||||
|
kubectl get secret afterwork-secrets -n applications -o yaml
|
||||||
|
# Décoder le password:
|
||||||
|
echo "YourBase64Value" | base64 -d
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Firewall/Network Policy?**
|
||||||
|
```bash
|
||||||
|
kubectl get networkpolicy -n applications
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Logs de l'application:**
|
||||||
|
```bash
|
||||||
|
kubectl logs -n applications -l app=afterwork-api | grep -i "database\|connection"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Problème : "Database does not exist"
|
||||||
|
|
||||||
|
**Solution:**
|
||||||
|
```sql
|
||||||
|
-- Se connecter en tant que postgres
|
||||||
|
CREATE DATABASE afterwork_db;
|
||||||
|
GRANT ALL PRIVILEGES ON DATABASE afterwork_db TO afterwork;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Problème : "Authentication failed"
|
||||||
|
|
||||||
|
**Vérifier:**
|
||||||
|
```bash
|
||||||
|
# Le mot de passe dans le secret
|
||||||
|
kubectl get secret afterwork-secrets -n applications -o jsonpath='{.data.DB_PASSWORD}' | base64 -d
|
||||||
|
|
||||||
|
# Devrait afficher: AfterWork2025!
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ Checklist de Vérification
|
||||||
|
|
||||||
|
Avant le déploiement:
|
||||||
|
|
||||||
|
- [x] DB_HOST = `postgresql` (pas `postgres`)
|
||||||
|
- [x] DB_PORT = `5432`
|
||||||
|
- [x] DB_NAME = `afterwork_db`
|
||||||
|
- [x] DB_USERNAME = `afterwork`
|
||||||
|
- [x] DB_PASSWORD = `AfterWork2025!`
|
||||||
|
- [x] ConfigMap créé et correct
|
||||||
|
- [x] Secret créé avec bon mot de passe
|
||||||
|
- [x] application-prod.properties correct
|
||||||
|
- [x] Dockerfile.prod correct
|
||||||
|
- [ ] Base de données créée sur PostgreSQL
|
||||||
|
- [ ] Utilisateur `afterwork` créé avec droits
|
||||||
|
- [ ] Test de connexion réussi
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Notes
|
||||||
|
|
||||||
|
### Pattern Observé dans les Projets Lions.dev
|
||||||
|
|
||||||
|
| Projet | DB Host | DB Name | DB User | DB Password Pattern |
|
||||||
|
|--------|---------|---------|---------|---------------------|
|
||||||
|
| **btpxpress** | postgresql | btpxpress | btpxpress | btpxpress_secure_2024 |
|
||||||
|
| **unionflow** | postgresql | unionflow | unionflow | UnionFlow2025! |
|
||||||
|
| **afterwork** | postgresql | afterwork_db | afterwork | AfterWork2025! |
|
||||||
|
|
||||||
|
### Cohérence
|
||||||
|
|
||||||
|
✅ Tous les projets utilisent:
|
||||||
|
- Host: `postgresql` (service Kubernetes)
|
||||||
|
- Port: `5432` (standard PostgreSQL)
|
||||||
|
- Username: Nom du projet en minuscule
|
||||||
|
- Password: Pattern avec nom et année
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Configuration validée et prête pour le déploiement!** ✅
|
||||||
|
|
||||||
|
**Dernière mise à jour:** 2026-01-10
|
||||||
@@ -31,7 +31,7 @@ ENV LANG='en_US.UTF-8' \
|
|||||||
LANGUAGE='en_US:en' \
|
LANGUAGE='en_US:en' \
|
||||||
TZ='Africa/Douala' \
|
TZ='Africa/Douala' \
|
||||||
QUARKUS_PROFILE=prod \
|
QUARKUS_PROFILE=prod \
|
||||||
DB_HOST=postgres \
|
DB_HOST=postgresql \
|
||||||
DB_PORT=5432 \
|
DB_PORT=5432 \
|
||||||
DB_NAME=afterwork_db \
|
DB_NAME=afterwork_db \
|
||||||
DB_USERNAME=afterwork \
|
DB_USERNAME=afterwork \
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ metadata:
|
|||||||
name: afterwork-config
|
name: afterwork-config
|
||||||
namespace: applications
|
namespace: applications
|
||||||
data:
|
data:
|
||||||
DB_HOST: "postgres"
|
DB_HOST: "postgresql"
|
||||||
DB_PORT: "5432"
|
DB_PORT: "5432"
|
||||||
DB_NAME: "afterwork_db"
|
DB_NAME: "afterwork_db"
|
||||||
DB_USERNAME: "afterwork"
|
DB_USERNAME: "afterwork"
|
||||||
|
|||||||
@@ -3,8 +3,11 @@ kind: Secret
|
|||||||
metadata:
|
metadata:
|
||||||
name: afterwork-secrets
|
name: afterwork-secrets
|
||||||
namespace: applications
|
namespace: applications
|
||||||
|
labels:
|
||||||
|
app: afterwork-api
|
||||||
|
component: secrets
|
||||||
type: Opaque
|
type: Opaque
|
||||||
stringData:
|
stringData:
|
||||||
DB_PASSWORD: "CHANGE_ME_IN_PRODUCTION"
|
# Base de données PostgreSQL
|
||||||
# À remplacer par le vrai mot de passe encodé en base64:
|
# Pattern cohérent avec unionflow et btpxpress
|
||||||
# echo -n "your-password" | base64
|
DB_PASSWORD: "AfterWork2025!"
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ quarkus.http.root-path=/afterwork
|
|||||||
|
|
||||||
# Base de données PostgreSQL (Production)
|
# Base de données PostgreSQL (Production)
|
||||||
quarkus.datasource.db-kind=postgresql
|
quarkus.datasource.db-kind=postgresql
|
||||||
quarkus.datasource.jdbc.url=jdbc:postgresql://${DB_HOST:postgres}:${DB_PORT:5432}/${DB_NAME:afterwork_db}
|
quarkus.datasource.jdbc.url=jdbc:postgresql://${DB_HOST:postgresql}:${DB_PORT:5432}/${DB_NAME:afterwork_db}
|
||||||
quarkus.datasource.username=${DB_USERNAME:afterwork}
|
quarkus.datasource.username=${DB_USERNAME:afterwork}
|
||||||
quarkus.datasource.password=${DB_PASSWORD:changeme}
|
quarkus.datasource.password=${DB_PASSWORD:changeme}
|
||||||
quarkus.datasource.jdbc.driver=org.postgresql.Driver
|
quarkus.datasource.jdbc.driver=org.postgresql.Driver
|
||||||
|
|||||||
Reference in New Issue
Block a user