From a6ba0a6662d54e6ed42ef26ce9e1411e873a2484 Mon Sep 17 00:00:00 2001 From: Yvv Date: Mon, 26 Oct 2026 17:32:16 +0100 Subject: [PATCH] =?UTF-8?q?docker=20:=20messages=20persist=C3=A9s=20dans?= =?UTF-8?q?=20un=20volume=20nomm=C3=A9=20mont=C3=A9=20sur=20/app/data?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Depuis 07bf07a (27/02), l'image tourne dans /app et le serveur lit process.cwd()/data, mais le compose montait toujours /src/data et /src/public : les messages vivaient dans la couche du conteneur et chaque déploiement les remettait à la graine (constaté sur sonic le 26/10, voir actes/2026-10-26-persistance-messages.md). - volume externe librodrome-data sur /app/data, créé et semé à la main avant le déploiement ; sans lui, compose échoue sans toucher au conteneur en service ; - montages morts /src/data et /src/public retirés ; - docker-compose.dev.yml : volumes en !override, le dev garde data/ des sources. Répété en local le 26/10 (node:22, .output local) : échec propre sans volume, aucune graine rejouée, message posté conservé après --force-recreate, volume épargné par down -v, retour à l'ancienne config sans perte du volume. Co-Authored-By: Claude Opus 5.5 --- docker/docker-compose.dev.yml | 3 ++- docker/docker-compose.yml | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml index 6322b24..6e75338 100644 --- a/docker/docker-compose.dev.yml +++ b/docker/docker-compose.dev.yml @@ -10,7 +10,8 @@ services: - "3000:3000" - "4000:4000" - "24678:24678" - volumes: + # !override : en dev, data/ vient des sources montées, pas du volume de prod. + volumes: !override - sources:/app volumes: diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 47cb3eb..0ca6f0d 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -17,8 +17,11 @@ services: ports: - 3000 volumes: - - ../data:/src/data - - ./public:/src/public + # Données runtime (messages des visiteurs). L'image tourne dans /app et + # le serveur lit process.cwd()/data : le volume se monte sur /app/data. + # Volume nommé, pas un chemin relatif : la CI lance compose depuis son + # espace de travail, où un chemin relatif désigne un dossier vide de l'hôte. + - data:/app/data restart: always labels: - "traefik.enable=true" @@ -26,3 +29,12 @@ services: - "traefik.http.routers.librodrome.entrypoints=websecure" - "traefik.http.routers.librodrome.tls.certresolver=letsencrypt" - "traefik.http.services.librodrome.loadbalancer.server.port=3000" + +volumes: + # Créé à la main sur le serveur avant le premier déploiement (acte du + # 2026-10-26). external : compose ne le crée ni ne le supprime jamais + # (`down -v` compris), et un déploiement sans lui échoue au lieu de + # repartir de la graine. + data: + name: librodrome-data + external: true