Skip to content

Fix the database to separate the production database from the test database#34

Merged
raynaldlao merged 6 commits into
masterfrom
fix-database
Jul 1, 2026
Merged

Fix the database to separate the production database from the test database#34
raynaldlao merged 6 commits into
masterfrom
fix-database

Conversation

@raynaldlao

@raynaldlao raynaldlao commented Jul 1, 2026

Copy link
Copy Markdown
Owner

Contexte de l'ancien système

Avant cette refonte, l'architecture utilisait un unique container Postgres 18 contenant deux bases de données distinctes :

  • prod_blog_db : base de production
  • test_blog_db : base de tests (créée via un script d'initialisation
    docker-entrypoint-initdb.d/01-create-test-db.sh)

Le port 5432 était partagé. Un service Flyway s'exécutait sur chaque base. En local, le fonctionnement était correct mais le CI présentait une faille : les variables DATABASE_URL et TEST_DATABASE_URL pointaient toutes les deux vers la même base de données. Les tests et la production utilisaient donc la même base dans le pipeline CI, annulant toute isolation. Par ailleurs, la base de test dans le CI ne disposait pas de la table flyway_schema_history car aucun Flyway n'était exécuté dessus.

Résumé des modifications

Séparation de la base de données en deux containers Postgres 18 distincts :

  • un dédié à la production et un dédié aux tests,
  • isolation totale en local,
  • pipeline CI allégée pour n'utiliser que la base de test.

Changements

Infrastructure Docker

Le service unique db est remplacé par deux containers distincts :

  • blog_db_prod : port 5433, base prod_blog_db, utilisateur prod_user
  • blog_db_test : port 5434, base test_blog_db, utilisateur test_user

Chaque container possède son propre volume persistant et son propre service Flyway (flyway_prod / flyway_test). Le script docker-entrypoint-initdb.d/01-create-test-db.sh a été supprimé car chaque container crée automatiquement sa base via la variable POSTGRES_DB.

Le chemin des volumes a été corrigé pour la compatibilité Postgres 18+ (/var/lib/postgresql/data/var/lib/postgresql).

Pipeline CI

La base de données du CI utilise désormais exclusivement la base de test test_blog_db. Les identifiants sont passés via les secrets avec des variables de test. Flyway s'exécute sur cette même base pour garantir la présence de la table flyway_schema_history.

Les variables obsolètes ont été supprimées. Les paramètres Argon2 de production sont utilisés dans le CI pour être au plus proche des conditions réelles.

… each with its own volume and Flyway service, removes the old entrypoint-initdb.d volume and relies on POSTGRES_DB for automatic DB creation
… POSTGRES_DB value to auto‑create its own database (prod_blog_db for prod, test_blog_db for test)
…_POSTGRES_* vars, runs Flyway exclusively on the test DB, drops all unused prod secrets and uses prod Argon2 parameters in CI
… separate volumes and Flyway, drops the init script thanks to POSTGRES_DB auto‑creation, simplifies CI to a test‑only DB using TEST_POSTGRES_* secrets, removes unused vars and updates the volume path for Postgres 18+
@raynaldlao raynaldlao self-assigned this Jul 1, 2026
@raynaldlao
raynaldlao requested a review from hlargitte July 1, 2026 21:45
…Argon2 hasher test can read time_cost, memory_cost, and parallelism from env_config. Values are set to the same prod parameters using existing ARGON2_* secrets
…in CI, mapping TEST_ARGON2_* env vars to the prod secrets so no additional test‑specific secrets are required

@hlargitte hlargitte left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@raynaldlao
raynaldlao merged commit f94f83f into master Jul 1, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants