Files
mic-after-work-server-impl-…/DATABASE_CONFIG.md
dahoud 044c18fe09 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
2026-01-10 11:25:49 +00:00

6.4 KiB

🗄️ Configuration Base de Données AfterWork

Date : 2026-01-10 Statut : Aligné avec unionflow et btpxpress


📋 Configuration Production PostgreSQL

Paramètres de Connexion

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)

DB_URL: jdbc:postgresql://postgresql:5432/btpxpress
DB_USERNAME: btpxpress
DB_PASSWORD: btpxpress_secure_2024

UnionFlow (Production)

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:

DB_HOST: "postgres"  # ❌ Incorrect

Après:

DB_HOST: "postgresql"  # ✅ Cohérent avec btpxpress/unionflow

2. Secrets (kubernetes/afterwork-secrets.yaml)

Avant:

DB_PASSWORD: "CHANGE_ME_IN_PRODUCTION"  # ❌ Placeholder

Après:

DB_PASSWORD: "AfterWork2025!"  # ✅ Pattern cohérent

3. application-prod.properties

Avant:

jdbc:postgresql://${DB_HOST:postgres}:${DB_PORT:5432}  # ❌ Défaut incorrect

Après:

jdbc:postgresql://${DB_HOST:postgresql}:${DB_PORT:5432}  # ✅ Défaut correct

4. Dockerfile.prod

Avant:

DB_HOST=postgres  # ❌ Incorrect

Après:

DB_HOST=postgresql  # ✅ Cohérent

🏗️ Structure de la Base de Données

Tables Principales

-- 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

# 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)

# 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

# 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

    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

# 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?

    kubectl get svc -n <postgres-namespace> | grep postgresql
    
  2. Credentials corrects?

    kubectl get secret afterwork-secrets -n applications -o yaml
    # Décoder le password:
    echo "YourBase64Value" | base64 -d
    
  3. Firewall/Network Policy?

    kubectl get networkpolicy -n applications
    
  4. Logs de l'application:

    kubectl logs -n applications -l app=afterwork-api | grep -i "database\|connection"
    

Problème : "Database does not exist"

Solution:

-- 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:

# 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:

  • DB_HOST = postgresql (pas postgres)
  • DB_PORT = 5432
  • DB_NAME = afterwork_db
  • DB_USERNAME = afterwork
  • DB_PASSWORD = AfterWork2025!
  • ConfigMap créé et correct
  • Secret créé avec bon mot de passe
  • application-prod.properties correct
  • 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