User Tools

Site Tools


infrastructure:backups

Gestion des Backups

<WRAP center round important 60%> ⚠️ CRITIQUE : Les backups sont essentiels à la continuité de service. Vérifiez régulièrement leur bon fonctionnement ! </WRAP>

Vue d'ensemble

Stratégie de backup

Service Fréquence Rétention Taille moyenne Critique
Généalogie Quotidien 2h 30 jours ~500 MB ⚠️ HAUTE
Paperless Quotidien 2h 30 jours ~2 GB ⚠️ HAUTE
Vaultwarden Quotidien 2h + 12h 60 jours ~50 MB 🔴 CRITIQUE
Configurations Hebdomadaire 30 jours ~100 MB ⚠️ HAUTE
Certificats SSL Hebdomadaire 90 jours ~10 MB 🟡 MOYENNE

Emplacements de stockage

  • Primaire : /opt/backups/ (local)
  • Secondaire : À configurer (NAS, Cloud)

Scripts de backup

Script Description Emplacement
backup-all.sh Backup global (tous services) /opt/scripts/
backup-genealogie.sh Backup Webtrees + MariaDB /opt/scripts/
backup-paperless.sh Backup Paperless + PostgreSQL /opt/scripts/
backup-vaultwarden.sh Backup coffre-fort mots de passe /opt/scripts/
backup-configs.sh Backup configs + SSL /opt/scripts/
check-backups.sh Vérification état backups /opt/scripts/

Backups manuels

Backup complet de tous les services

# Lancer le backup global
sudo /opt/scripts/backup-all.sh
 
# Résultat :
# - /opt/backups/genealogie/YYYYMMDD-HHMMSS/
# - /opt/backups/paperless/YYYYMMDD-HHMMSS/
# - /opt/backups/vaultwarden/YYYYMMDD-HHMMSS/
# - /opt/backups/configs/YYYYMMDD-HHMMSS/

Backup d'un service spécifique

# Généalogie (Webtrees)
sudo /opt/scripts/backup-genealogie.sh
 
# Paperless
sudo /opt/scripts/backup-paperless.sh
 
# Vaultwarden (CRITIQUE)
sudo /opt/scripts/backup-vaultwarden.sh
 
# Configurations (Traefik, AdGuard, etc.)
sudo /opt/scripts/backup-configs.sh

Vérifier l'état des backups

# Script de vérification
sudo /opt/scripts/check-backups.sh
 
# Résultat attendu :
# ✅ genealogie: 450MB (il y a 0 jours)
# ✅ paperless: 1.8GB (il y a 0 jours)
# ✅ vaultwarden: 45MB (il y a 0 jours)
# ✅ configs: 95MB (il y a 2 jours)

Lister les backups disponibles

# Tous les backups
ls -lht /opt/backups/*/
 
# Backups d'un service spécifique
ls -lht /opt/backups/genealogie/
ls -lht /opt/backups/paperless/
ls -lht /opt/backups/vaultwarden/
 
# Taille totale
du -sh /opt/backups/*

Backups automatiques

Configuration Cron

Les backups automatiques sont configurés via crontab :

# Voir les tâches planifiées
sudo crontab -l
 
# Éditer les tâches
sudo crontab -e

Configuration actuelle :

# Backup quotidien à 2h du matin (tous les services)
0 2 * * * /opt/scripts/backup-all.sh
 
# Backup Vaultwarden supplémentaire à midi (sécurité)
0 12 * * * /opt/scripts/backup-vaultwarden.sh >> /var/log/backup-vaultwarden.log 2>&1
 
# Nettoyage des logs tous les lundis à 5h
0 5 * * 1 find /var/log -name "backup-*.log" -mtime +30 -delete

Vérifier les logs

# Log du backup global
tail -50 /var/log/backup-all.log
 
# Log Vaultwarden
tail -50 /var/log/backup-vaultwarden.log
 
# Logs des dernières 24h
grep "$(date +'%Y-%m-%d')" /var/log/backup-all.log

Restauration

<WRAP center round alert 60%> ⚠️ ATTENTION : La restauration écrase les données existantes ! Toujours faire un backup avant de restaurer. </WRAP>

Procédure générale de restauration

  1. Identifier le backup à restaurer
  2. Lire le fichier README.txt du backup
  3. Arrêter le service concerné
  4. Sauvegarder l'état actuel (sécurité)
  5. Restaurer les données
  6. Redémarrer le service
  7. Vérifier le fonctionnement

Restaurer Généalogie (Webtrees)

# 1. Choisir le backup
BACKUP_DIR="/opt/backups/genealogie/20260201-020000"
 
# 2. Lire les instructions
cat $BACKUP_DIR/README.txt
 
# 3. Arrêter les services
cd /opt/stacks/genealogie
docker compose down
 
# 4. Backup de sécurité de l'état actuel
sudo cp -r /opt/stacks/genealogie /opt/backups/genealogie-avant-restore-$(date +%Y%m%d)
 
# 5. Restaurer la base de données
docker compose up -d genealogie-db
sleep 10
docker exec -i genealogie-db mariadb -u root -p$(grep MYSQL_ROOT_PASSWORD .env | cut -d= -f2) < $BACKUP_DIR/genealogie-database.sql
 
# 6. Restaurer les données et médias
tar -xzf $BACKUP_DIR/genealogie-data.tar.gz -C /opt/stacks/genealogie
 
# 7. Redémarrer tout
docker compose down
docker compose up -d
 
# 8. Vérifier
docker logs genealogie-app --tail 30
curl -I https://genealogie.cotting.fr

Restaurer Paperless

# 1. Choisir le backup
BACKUP_DIR="/opt/backups/paperless/20260201-020000"
 
# 2. Arrêter
cd /opt/stacks/paperless
docker compose down
 
# 3. Backup de sécurité
sudo cp -r /opt/stacks/paperless /opt/backups/paperless-avant-restore-$(date +%Y%m%d)
 
# 4. Restaurer la base PostgreSQL
docker compose up -d paperless-db
sleep 10
docker exec -i paperless-db psql -U paperless -d paperless < $BACKUP_DIR/paperless-database.sql
 
# 5. Restaurer les documents
tar -xzf $BACKUP_DIR/paperless-data.tar.gz -C /opt/stacks/paperless
 
# 6. Redémarrer
docker compose down
docker compose up -d
 
# 7. Vérifier
docker logs paperless-app --tail 30
curl -I https://paperless.cotting.fr

Restaurer Vaultwarden

<WRAP center round alert 80%> 🔴 TRÈS CRITIQUE : Contient tous vos mots de passe ! Procédez avec la plus grande prudence. </WRAP>

# 1. Choisir le backup
BACKUP_DIR="/opt/backups/vaultwarden/20260201-020000"
 
# 2. Arrêter
cd /opt/stacks/vaultwarden
docker compose down
 
# 3. Backup de sécurité
sudo cp -r /opt/stacks/vaultwarden /opt/backups/vaultwarden-avant-restore-$(date +%Y%m%d)
 
# 4. Restaurer les données
tar -xzf $BACKUP_DIR/vaultwarden-data.tar.gz -C /opt/stacks/vaultwarden
 
# 5. Redémarrer
docker compose up -d
 
# 6. Vérifier
docker logs vaultwarden --tail 30
curl -I https://vaultwarden.cotting.fr
 
# 7. Tester la connexion avec votre compte

Sauvegarde externe

<WRAP center round tip 60%> 💡 RECOMMANDATION : Toujours avoir une copie externe des backups critiques ! </WRAP>

Option 1 : Copie sur NAS

# Monter le NAS
sudo mount -t cifs //192.168.1.XXX/backups /mnt/nas -o username=admin,password=xxx
 
# Synchroniser
rsync -avz --delete /opt/backups/ /mnt/nas/docker-backups/
 
# Démonter
sudo umount /mnt/nas

Option 2 : Synchronisation Cloud (rclone)

# Configurer rclone (une fois)
rclone config
 
# Synchroniser vers Google Drive
rclone sync /opt/backups gdrive:docker-backups --progress
 
# Ou vers autre cloud
rclone sync /opt/backups dropbox:backups --progress

Automatiser la sauvegarde externe

Ajouter à crontab :

# Sync vers NAS/Cloud le dimanche à 4h
0 4 * * 0 /opt/scripts/sync-to-external.sh >> /var/log/sync-external.log 2>&1

Monitoring et alertes

Vérification quotidienne

Créer un script de vérification :

#!/bin/bash
# /opt/scripts/verify-backups.sh
 
ERRORS=0
 
# Vérifier que les backups ont moins de 2 jours
for service in genealogie paperless vaultwarden; do
    LATEST=$(ls -td /opt/backups/$service/20* 2>/dev/null | head -1)
    if [ -n "$LATEST" ]; then
        AGE=$(( ($(date +%s) - $(stat -c %Y "$LATEST")) / 86400 ))
        if [ $AGE -gt 2 ]; then
            echo "❌ ERREUR: Backup $service trop ancien ($AGE jours)"
            ERRORS=$((ERRORS+1))
        fi
    else
        echo "❌ ERREUR: Aucun backup trouvé pour $service"
        ERRORS=$((ERRORS+1))
    fi
done
 
if [ $ERRORS -eq 0 ]; then
    echo "✅ Tous les backups sont OK"
    exit 0
else
    echo "⚠️  $ERRORS erreur(s) détectée(s)"
    # Optionnel : Envoyer une alerte
    # curl -d "ALERTE: Problème backups" https://ntfy.sh/cotting-backup
    exit 1
fi

Test de restauration

<WRAP center round important 60%> ⚠️ Recommandation : Tester une restauration complète tous les 3 mois </WRAP>

Procédure de test :

  1. Créer un environnement de test séparé
  2. Restaurer un backup récent
  3. Vérifier que tout fonctionne
  4. Documenter les problèmes rencontrés
  5. Ajuster les scripts si nécessaire

Checklist de maintenance backups

Quotidien (automatique)

  1. [✅] Backup automatique à 2h
  2. [✅] Backup Vaultwarden à 12h

Hebdomadaire (manuel)

  1. [ ] Vérifier l'état des backups : sudo /opt/scripts/check-backups.sh
  2. [ ] Vérifier l'espace disque : df -h /opt/backups
  3. [ ] Vérifier les logs : tail -50 /var/log/backup-all.log

Mensuel (manuel)

  1. [ ] Synchroniser vers stockage externe
  2. [ ] Vérifier l'intégrité d'un backup aléatoire
  3. [ ] Nettoyer les backups expirés

Trimestriel (manuel)

  1. [ ] Tester une restauration complète
  2. [ ] Revoir la stratégie de rétention
  3. [ ] Vérifier les scripts de backup

Ressources et liens

Contacts d'urgence

En cas de problème critique avec les backups :

  • Admin système : Olivier Cotting - olivier@cotting.fr
  • Scripts : /opt/scripts/
  • Documentation : Cette page wiki

← Retour accueil

infrastructure/backups.txt · Last modified: by olicot