Sauvegardes et export
Ne rien perdre, et pouvoir tout reprendre ailleurs.
La procédure complète, avec tous les cas, est dans docs/sauvegardes.md du dépôt. Cette page en donne l’essentiel.
Sauvegardes planifiées
Un service Docker backup prend un instantané par jour (03:00, fuseau Europe/Brussels par défaut), plus un au premier démarrage :
db.dump: la base (pg_dump) ;files/: les fichiers, en liens physiques avec l’instantané précédent (seuls les nouveaux prennent de la place) ;config/en clair ;blobs.tsv,backup.json,SHA256SUMSpour la vérification.
L’instantané est écrit sous un nom temporaire puis renommé : un instantané visible est toujours complet. Rotation par défaut : 7 quotidiens, 4 hebdomadaires, 6 mensuels. Un test de restauration automatique tourne chaque semaine dans une base jetable.
Activer :
# image complète : le service backup démarre avec l'application
docker compose --profile app up -d
# développement (backend sur l'hôte, fichiers dans ./data)
BACKUP_DATA_SOURCE=./data docker compose --profile backup up -d backup
| Variable | Défaut | Rôle |
|---|---|---|
BACKUP_PATH |
./backups |
dossier des instantanés |
BACKUP_TIME, BACKUP_TZ |
03:00, Europe/Brussels |
créneau quotidien |
BACKUP_KEEP_DAILY / _WEEKLY / _MONTHLY |
7 / 4 / 6 |
rotation |
BACKUP_RESTORE_TEST_DAYS |
7 |
période du test de restauration (0 = jamais) |
Restaurer
La restauration refuse une base ou un dossier de fichiers non vides. En résumé :
- sauvegarder l’état actuel si possible :
docker compose run --rm backup backup.sh; - arrêter l’application, supprimer les volumes de la base et des fichiers (geste explicite) ;
- recréer une base vide :
docker compose up -d db, sans démarrer l’application ; docker compose run --rm restore latest(ou le nom d’un instantané) : vérification, restauration en une transaction, copie des fichiers, contrôle des empreintes ;- comparer
config/avec./config.restauree, puis redémarrer.
Un instantané plus ancien que l’application se restaure : les migrations manquantes sont jouées au démarrage.
Export complet
Depuis la page Données, ou GET /api/export : une archive ZIP avec un Markdown à en-tête YAML par nœud, les fichiers d’origine, links.json, une copie de config/ et export.json (format 2 : liste des fichiers de chaque nœud). L’export lit un instantané cohérent de la base ; un seul export à la fois. C’est le format de sortie « sans verrouillage » : tout se relit dans un éditeur de texte.