Backup et recovery
Backup et recovery
Dernière mise à jour : 2026-05-10
⚠️ À COMPLÉTER
Aucune stratégie de backup applicative n'est implémentée dans le code (pas de script scripts/backup.sh, pas de cron dans src/cron/, pas de doc dans ARCHITECTURE.md / CONTRIBUTING.md).
La protection des données dépend actuellement entièrement de la stratégie Unraid native (RAID + parity + snapshots ZFS si activé sur le pool appdata).
À clarifier / décider :
- Pool storage :
appdataest-il sur cache SSD ZFS avec snapshots, ou sur array (parity + array disks) ? - Snapshots ZFS : si oui, fréquence ? Rétention ?
- Backup off-site : il y a-t-il un backup vers un autre Unraid / cloud ?
- Périodicité testée : as-tu déjà testé un restore ? Quand ?
Données à protéger
| Quoi | Où | Volume | Critique ? |
|---|---|---|---|
SQLite (database.db) |
/mnt/user/appdata/boardgame-referee/data/database.db |
~10-50 MB | Élevé : users, jeux, questions, feedbacks |
| PDFs uploadés | /mnt/user/appdata/boardgame-referee/pdfs/*.pdf |
100 MB - quelques GB | Élevé : irrécupérables si perdus (à moins d'avoir l'original) |
| PNG rendus | /mnt/user/appdata/boardgame-referee/pdfs/images/ |
Quelques GB | Faible : régénérables via pdftoppm |
| Caches JSON | /mnt/user/appdata/boardgame-referee/data/{ocr,contexts,conflicts}-*-<slug>.json |
Quelques MB | Moyen : régénérables via Claude (mais cher en quota) |
| Data sources cartes | /mnt/user/appdata/boardgame-referee/data/{magic,lorcana,terraforming-mars,ark-nova}-cards/ |
Quelques GB | Moyen : re-téléchargeables sauf TM/Ark Nova qui sont locaux statiques |
| Card image cache | /mnt/user/appdata/boardgame-referee/data/card-images-cache/ |
Quelques GB | Faible : régénérable sharp depuis CDN |
| Qdrant collections | /mnt/user/appdata/boardgame-referee/qdrant/storage/ |
Quelques GB | Élevé : ré-ingestion = qq heures + quota Claude |
| Clé SSH oracle | /mnt/user/appdata/boardgame-referee/ssh/id_ed25519 |
<1 KB | Critique : sans elle, plus d'oracle SSH |
| NPM config | /mnt/user/appdata/nginx-proxy-manager/ |
Quelques MB | Élevé : recréer manuellement long |
Recommandations (à valider)
Niveau minimum
- SQLite :
sqlite3 .backupquotidien vers un autre disque ou cloud - PDFs : rsync vers un autre disque ou cloud (ils sont irrécupérables)
- Clé SSH oracle : copie sur un support sécurisé (Bitwarden chiffré ou USB)
Niveau confortable
- Qdrant snapshots : pris au moment des grosses ré-ingestions (cf.
deploiement/rollback.mdpour les commandes) - Caches JSON : optionnel, ils valent juste ce qu'ils ont coûté en quota Claude
- NPM config : backup
database.sqliteNPM quotidien
Snapshots Qdrant
Manuel pour l'instant :
# Snapshot d'une collection
curl -X POST http://192.168.10.100:6333/collections/<collection>/snapshots
# Renvoie un nom de snapshot
# Liste les snapshots
curl http://192.168.10.100:6333/collections/<collection>/snapshots
# Télécharger un snapshot pour archive
curl -O http://192.168.10.100:6333/collections/<collection>/snapshots/<snapshot-name>
Restore SQLite
# Stop le container
docker compose -f /mnt/user/appdata/boardgame-referee/docker-compose.yml stop app
# Restore depuis backup
cp /backup/path/database.db.bak /mnt/user/appdata/boardgame-referee/data/database.db
# Ou si WAL : restore aussi .db-wal et .db-shm
# Restart
docker compose -f /mnt/user/appdata/boardgame-referee/docker-compose.yml up -d app
Restore Qdrant
# Re-create la collection depuis le snapshot
curl -X PUT http://192.168.10.100:6333/collections/<collection>/snapshots/recover \
-H "Content-Type: application/json" \
-d '{"location": "<snapshot-url>"}'
Test de restore
⚠️ Une procédure de restore non testée n'existe pas. Quand tu as une stratégie de backup en place, force-toi à tester un restore au moins une fois par trimestre :
- Sur un container test sur Unraid avec un volume vide
- Restore SQLite + Qdrant
- Vérifier qu'on peut login + voir les jeux + reposer une question
Questions à toi (Thymon)
- Quel est ton workflow Unraid actuel pour
appdata? (RAID? Snapshots? Off-site?) - As-tu déjà perdu un fichier sur ce projet ? (incident antérieur qui a forcé un fix)
- Veux-tu qu'on ajoute un script de backup applicatif (sqlite3 .backup + rsync PDFs) en cron sur Unraid ?
No comments to display
No comments to display