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.