actes : persistance des messages — diagnostic et dossier préparé
Diagnostic en lecture seule sur sonic (26/10) : le conteneur tourne
dans /app, les montages visent /src/data et /src/public (dossiers
vides de l'hôte), les messages vivent dans la couche du conteneur et
la graine est rejouée à chaque déploiement ; ADMIN_GIT_SYNC=false,
pas de .git, aucun commit [admin]. Rien perdu depuis le 29/09 ;
avant, invérifiable.
Dossier PRÉPARÉ (mot « déploie ») : sauvegarde et volume semé sur
sonic, veille de l'ancien conteneur, push de a6ba0a6
(fix/persistance-messages), vérification et redémarrage à froid.
Scripts déroulés en entier en local avec le vrai docker.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env bash
|
||||
# Acte 2026-10-26-persistance-messages — étape 1, sur sonic, sous yvv.
|
||||
# Prémisses, sauvegarde des messages, volume librodrome-data créé et semé.
|
||||
# Ne touche pas au conteneur en service (lectures seulement).
|
||||
# Lancement : ssh yvv@161.97.174.60 'bash /tmp/lb-avant.sh' </dev/null
|
||||
set -euo pipefail
|
||||
|
||||
C=lpk-librodrome-main-app-1
|
||||
IMG=lpk-librodrome-main-app
|
||||
V=librodrome-data
|
||||
D="$HOME/librodrome-sauvegardes/2026-10-26"
|
||||
|
||||
stop() { echo "ARRÊT : $*" >&2; exit 1; }
|
||||
|
||||
# --- Prémisses
|
||||
[ "$(docker inspect -f '{{.State.Running}}' "$C")" = true ] || stop "$C ne tourne pas"
|
||||
[ "$(docker inspect -f '{{.Config.WorkingDir}}' "$C")" = /app ] || stop "WorkingDir de $C différent de /app"
|
||||
m=$(docker inspect -f '{{range .Mounts}}{{if eq .Destination "/app/data"}}{{.Type}}{{end}}{{end}}' "$C")
|
||||
[ -z "$m" ] || stop "/app/data est déjà monté ($m) : l'acte a déjà été joué ?"
|
||||
if docker volume inspect "$V" >/dev/null 2>&1; then stop "le volume $V existe déjà"; fi
|
||||
[ ! -e "$D" ] || stop "$D existe déjà"
|
||||
dd=$(docker diff "$C")
|
||||
modifs=$(printf '%s\n' "$dd" | grep -E '^[ACD] /app/(site|content)(/|$)' || true)
|
||||
if [ -n "$modifs" ]; then
|
||||
echo "$modifs" >&2
|
||||
stop "éditions /admin présentes dans $C et absentes de git : les reporter dans git avant de déployer"
|
||||
fi
|
||||
|
||||
# --- Sauvegarde (reste sur sonic, dossier 700, fichiers 600)
|
||||
umask 077
|
||||
mkdir -p "$D"
|
||||
docker inspect -f '{{.Id}}' "$C" > "$D/ancien-conteneur.id"
|
||||
docker exec "$C" cat /app/data/messages.yml > "$D/messages.yml"
|
||||
docker exec "$C" stat -c '%s %y' /app/data/messages.yml > "$D/messages.stat"
|
||||
[ -s "$D/messages.yml" ] || stop "sauvegarde vide"
|
||||
n=$(grep -c '^ - id:' "$D/messages.yml" || true)
|
||||
h=$(sha256sum "$D/messages.yml" | cut -d' ' -f1)
|
||||
echo "$h messages.yml" > "$D/SHA256SUMS"
|
||||
echo "sauvegarde : $n message(s), sha256 $h, $(cat "$D/messages.stat")"
|
||||
|
||||
# --- Volume créé et semé avec la sauvegarde
|
||||
docker volume create "$V" >/dev/null
|
||||
docker run --rm -i --entrypoint sh -v "$V":/data "$IMG" -c 'cat > /data/messages.yml' < "$D/messages.yml"
|
||||
hv=$(docker run --rm --entrypoint sha256sum -v "$V":/data:ro "$IMG" /data/messages.yml | cut -d' ' -f1)
|
||||
[ "$hv" = "$h" ] || stop "empreinte du volume ($hv) différente de la sauvegarde ($h)"
|
||||
echo "volume $V semé : sha256 $hv"
|
||||
|
||||
rm -f -- "$0"
|
||||
echo "ÉTAPE 1 OK"
|
||||
Reference in New Issue
Block a user