Skip to main content

Configuration PostgreSQL pour Cash Pooling

Configuration Docker Compose pour la base de données PostgreSQL.

Service PostgreSQL​

Configuration​

  • Image: postgres:16-alpine (PostgreSQL 16 sur Alpine Linux)
  • Base de données: cash_pooling
  • Utilisateur: cashpooling
  • Mot de passe: cashpooling
  • Port: 5432
  • Volume: postgres_data (persistance des données)

Variables d'environnement​

Le service PostgreSQL utilise les variables d'environnement suivantes:

  • POSTGRES_DB: Nom de la base de données (cash_pooling)
  • POSTGRES_USER: Nom d'utilisateur (cashpooling)
  • POSTGRES_PASSWORD: Mot de passe (cashpooling)
  • PGDATA: Répertoire de données (/var/lib/postgresql/data/pgdata)

Utilisation​

Démarrer PostgreSQL​

docker-compose up -d postgres

Vérifier le statut​

docker-compose ps postgres

Voir les logs​

docker-compose logs -f postgres

Se connecter à la base de données​

# Via docker exec
docker-compose exec postgres psql -U cashpooling -d cash_pooling

# Via psql local (si installé)
psql -h localhost -p 5432 -U cashpooling -d cash_pooling

Arrêter PostgreSQL​

docker-compose stop postgres

Supprimer les données (⚠️ Attention: supprime toutes les données)​

docker-compose down -v postgres

Migration Flyway​

Flyway est configuré dans contract-core/src/main/resources/application.yml:

spring:
flyway:
enabled: true
locations: classpath:db/migration
baseline-on-migrate: true
validate-on-migrate: true
clean-disabled: true

Flyway s'exécute automatiquement au démarrage du backend Spring Boot (contract-core).

Migrations disponibles​

Les migrations Flyway sont situées dans:

  • contract-core/src/main/resources/db/migration/

Fichiers de migration:

  • V1__Initial_schema.sql - Schéma initial (Contract, Account, PoolingRule, ExecutionContext)
  • V2__Canonical_data_model.sql - Modèle canonique (Balance, Operation, PoolingMovement)
  • V3__Batch_performance_indexes.sql - Indexes pour les performances batch

Configuration Backend​

Le backend Spring Boot se connecte à PostgreSQL via les variables d'environnement:

spring:
datasource:
url: jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:5432}/${DB_NAME:cash_pooling}
username: ${DB_USERNAME:cashpooling}
password: ${DB_PASSWORD:cashpooling}

Variables d'environnement pour le backend​

Dans Docker Compose, configurez le backend avec:

environment:
DB_HOST: postgres
DB_PORT: 5432
DB_NAME: cash_pooling
DB_USERNAME: cashpooling
DB_PASSWORD: cashpooling

Health Check​

Le service PostgreSQL inclut un health check qui vérifie que la base de données est prête:

healthcheck:
test: ["CMD-SHELL", "pg_isready -U cashpooling -d cash_pooling"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s

Le backend peut dépendre de ce health check pour s'assurer que PostgreSQL est prêt avant de démarrer.

Persistance des données​

Les données sont persistées dans un volume Docker nommé postgres_data:

volumes:
postgres_data:
driver: local

Le volume est créé automatiquement lors du premier démarrage et persiste même si le conteneur est supprimé.

Sauvegarder les données​

# Créer une sauvegarde
docker-compose exec postgres pg_dump -U cashpooling cash_pooling > backup.sql

# Restaurer depuis une sauvegarde
docker-compose exec -T postgres psql -U cashpooling cash_pooling < backup.sql

Réseau​

Le service PostgreSQL est connecté au réseau cash-pooling-network, permettant aux autres services (backend, etc.) de communiquer avec la base de données via le nom de service postgres.

Sécurité​

⚠️ Pour la production, changez les identifiants par défaut:

environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-your-secure-password}

Utilisez des secrets Docker ou des variables d'environnement pour stocker les mots de passe de manière sécurisée.