Sauvegarde et restauration¶
Ce qu'il faut conserver¶
| Élément | Contenu |
|---|---|
| Dump PostgreSQL | Authentification, comptes, données métier, paramètres et PDF d'étiquettes |
Archive /data |
Photos et justificatifs des dépenses |
| Configuration privée | .env, Compose local, reverse proxy et informations des rôles |
Le service backup produit un dump personnalisé à 02:00, heure de Paris. Les dumps quotidiens sont conservés 30 jours. Une copie mensuelle est conservée sans rotation. Les photos et justificatifs ne sont pas inclus dans le dump et aucune copie automatique hors serveur n'est fournie.
Sauvegarde manuelle de la base¶
docker compose exec backup /bin/sh /backup.sh
docker compose exec backup ls -lh /backups
Copiez les dumps depuis /backups vers un emplacement privé hors serveur. Vérifiez-les avec pg_restore --list et testez une restauration dans une installation isolée.
Copie complète cohérente¶
Arrêtez brièvement l'application pendant le dump et l'archive des fichiers, puis redémarrez-la même en cas d'échec. PostgreSQL peut rester actif. Une archive de photos prise pendant des écritures peut ne pas correspondre au snapshot de la base.
mkdir -p exports-backup
chmod 700 exports-backup
APP_CONTAINER=$(docker compose ps -q ruchepilot)
DATA_VOLUME=$(docker inspect -f '{{range .Mounts}}{{if eq .Destination "/data"}}{{.Name}}{{end}}{{end}}' "$APP_CONTAINER")
test -n "$DATA_VOLUME"
(
set -e
trap 'docker compose start ruchepilot' EXIT
docker compose stop ruchepilot
docker compose exec -T postgres pg_dump -U postgres -d ruchepilot -Fc --no-owner --no-acl > exports-backup/ruchepilot.dump
docker run --rm -v "$DATA_VOLUME:/data:ro" -v "$PWD/exports-backup:/export" alpine:3.20 sh -c 'umask 077; tar -czf /export/photos.tar.gz -C /data .'
)
chmod 600 exports-backup/*
Ces commandes supposent le volume nommé du modèle standard. Pour un montage de dossier, adaptez l'archive à ce dossier. Ne poursuivez pas avec un nom de volume vide.
Restaurer¶
Préparez une base vide, les rôles attendus, un volume de données vide et une version de code compatible. N'effectuez pas une fusion avec une base déjà remplie.
pg_restore --exit-on-error --single-transaction --no-owner --no-acl --dbname="$DATABASE_URL" ruchepilot.dump
Restaurez photos.tar.gz dans le volume de données et attribuez les fichiers à l'UID/GID 10001:10001. Un dump de base ne sauvegarde pas les rôles du cluster.
Avant réouverture, vérifiez connexion, séparation des comptes, photos, stock, lots et étiquettes. Conservez le dump source intact pour recommencer si nécessaire.
Volumes
docker compose down -v supprime les volumes. N'utilisez pas cette commande pour une simple mise à jour ou un arrêt de production.
