Sauvegarde et restauration¶
Myeline tourne avec trois sources de vérité à sauvegarder :
- MariaDB — comptes, organisations, métadonnées documents, journal d'audit, conversations.
- ChromaDB — vecteurs d'embedding + métadonnées (sources des réponses RAG).
- Volumes de fichiers — uploads utilisateur (
data/uploads/), logs (logs/), assets statiques personnalisés (static/custom/).
Sans les trois, une restauration est incomplète.
Backup automatique quotidien¶
Le cron backup_databases s'exécute tous les jours à 02:30 UTC
(off-peak, modifiable dans scripts/crontab). Il produit dans
/var/lib/myeline/backups/ :
backups/
├── mariadb-2026-05-06.sql.gz # mysqldump compressé
├── chroma-2026-05-06.tar.zst # snapshot ChromaDB
└── volumes-2026-05-06.tar.zst # uploads + logs custom
Rétention locale : 14 jours (variable BACKUP_RETENTION_DAYS).
Au-delà, les fichiers sont supprimés du host.
Backup off-host (recommandé)¶
Pour une vraie résilience, synchroniser /var/lib/myeline/backups/
vers un stockage distinct (autre datacenter, autre fournisseur).
Option A — rclone (souverain-hybride uniquement)¶
# Configuration interactive
rclone config
# Puis dans /etc/cron.d/myeline-backup-offsite :
30 3 * * * root rclone sync /var/lib/myeline/backups remote:myeline-backups --transfers=4 --checksum
Option B — MinIO interne (souverain pur)¶
mc alias set local-minio https://minio.dmz.local:9000 ACCESS SECRET
30 3 * * * root mc mirror /var/lib/myeline/backups local-minio/myeline-backups
Option C — borgbackup (chiffrement client)¶
Recommandé si la cible est partiellement de confiance — chiffrement AES-256 client + déduplication.
Restauration complète¶
# 1. Stopper la stack
podman-compose down
# 2. Restaurer MariaDB
zcat backups/mariadb-2026-05-06.sql.gz | podman exec -i myeline-db mariadb -u root -p$DB_ROOT myeline
# 3. Restaurer ChromaDB
tar --use-compress-program=unzstd -xf backups/chroma-2026-05-06.tar.zst -C data/
# 4. Restaurer les volumes
tar --use-compress-program=unzstd -xf backups/volumes-2026-05-06.tar.zst -C data/
# 5. Redémarrer
podman-compose up -d
podman-compose exec web flask db upgrade
Test de restauration¶
Recommandation forte : tester la procédure de restauration sur un environnement vierge au moins une fois par trimestre. Un backup non testé = pas de backup.
Rotation des secrets après une fuite¶
Si une sauvegarde a fuité, rotater immédiatement :
SECRET_KEY(déconnecte toutes les sessions)CLOUD_TOKEN_KEY(invalide tous les tokens OAuth chiffrés — les utilisateurs devront reconnecter leurs drives)- Mots de passe DB, Redis
- Tokens API externes (Mistral, Anthropic, OpenAI, Gemini)
- Clé de licence (contacter Myeline pour réémission)
Voir Erreurs de licence pour le détail de la rotation de licence.