From eeac2de48197fa1c950dc54c3de488367e85c9f6 Mon Sep 17 00:00:00 2001 From: Manus Date: Sat, 29 Aug 2026 23:54:15 +0000 Subject: [PATCH] =?UTF-8?q?Checkpoint:=20Correctif=20recette=20:=20DATABAS?= =?UTF-8?q?E=5FURL=20cible=20d=C3=A9sormais=20le=20conteneur=20MySQL=20uni?= =?UTF-8?q?que=20itinova-budget-si-db,=20=C3=A9vitant=20la=20collision=20d?= =?UTF-8?q?e=20l'alias=20Docker=20partag=C3=A9=20db=20qui=20emp=C3=AAchait?= =?UTF-8?q?=20la=20connexion=20administrateur=20apr=C3=A8s=20recr=C3=A9ati?= =?UTF-8?q?on.=20Test=20de=20r=C3=A9gression=20Compose=20ajout=C3=A9.=20Va?= =?UTF-8?q?lidation=20compl=C3=A8te=20r=C3=A9ussie=20:=2059=20tests,=20Typ?= =?UTF-8?q?eScript,=20build=20et=20format=20Compose.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 2 +- docs/salaires-securite.md | 2 ++ server/dockerCompose.test.ts | 12 ++++++++++++ todo.md | 1 + 4 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 server/dockerCompose.test.ts diff --git a/docker-compose.yml b/docker-compose.yml index ddc7581..7ea74d7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,7 @@ services: restart: unless-stopped environment: - NODE_ENV=production - - DATABASE_URL=mysql://budget_user:BudgetSI2027!@db:3306/budget_si + - DATABASE_URL=mysql://budget_user:BudgetSI2027!@itinova-budget-si-db:3306/budget_si - JWT_SECRET=${JWT_SECRET:-budget-si-recette-jwt-secret-2027} - VITE_APP_ID=${VITE_APP_ID:-} - OAUTH_SERVER_URL=${OAUTH_SERVER_URL:-} diff --git a/docs/salaires-securite.md b/docs/salaires-securite.md index be4d0e6..c95f661 100644 --- a/docs/salaires-securite.md +++ b/docs/salaires-securite.md @@ -35,3 +35,5 @@ La vérification visuelle administrateur de recette a confirmé la présence de Après le chargement des requêtes, le filtre de mai 2026 a affiché 18 bulletins indexés, un total brut mensuel et le statut partiel de la liasse, sans alerte de chiffrement. La divergence initiale correspond au rendu transitoire avant réception de la sonde de sécurité ; ce rendu doit être remplacé par un état de chargement neutre, jamais par une alerte de blocage. Depuis la page authentifiée de recette, le bouton **Voir la liasse** a ouvert le visualiseur PDF du navigateur sur la route protégée de consultation. Le parcours interface utilise uniquement cette route applicative ; il ne présente aucune URL de stockage au navigateur. + +Un diagnostic de recette a révélé qu'après une recréation Docker, l'alias réseau générique `db` pouvait résoudre vers une autre base présente sur le réseau partagé, provoquant un refus d'accès et empêchant temporairement toute connexion. La configuration utilise désormais le nom unique `itinova-budget-si-db`. Une sonde de régression vérifie ce point avant chaque déploiement. diff --git a/server/dockerCompose.test.ts b/server/dockerCompose.test.ts new file mode 100644 index 0000000..58f858e --- /dev/null +++ b/server/dockerCompose.test.ts @@ -0,0 +1,12 @@ +import { readFile } from "node:fs/promises"; +import { resolve } from "node:path"; +import { describe, expect, it } from "vitest"; + +describe("docker-compose de recette", () => { + it("utilise le nom unique du conteneur MySQL et évite l'alias générique partagé", async () => { + const compose = await readFile(resolve(process.cwd(), "docker-compose.yml"), "utf8"); + + expect(compose).toContain("DATABASE_URL=mysql://budget_user:BudgetSI2027!@itinova-budget-si-db:3306/budget_si"); + expect(compose).not.toContain("DATABASE_URL=mysql://budget_user:BudgetSI2027!@db:3306/budget_si"); + }); +}); diff --git a/todo.md b/todo.md index 9ab42e1..2fd4d5d 100644 --- a/todo.md +++ b/todo.md @@ -203,3 +203,4 @@ - [ ] Vérifier visuellement la page Salaires de recette dans une session administrateur : navigation, filtres, liste et statuts - [ ] Ouvrir une liasse depuis le bouton de l'interface de recette afin de valider le parcours utilisateur de consultation - [ ] Corriger l'alerte frontale indiquant à tort un chiffrement indisponible en recette +- [ ] Corriger l'accès à la base de recette empêchant la connexion administrateur après le dernier redéploiement