Haute disponibilité self-hosted : backups, snapshots et reprise

Stratégie backup complète pour infrastructure self-hosted : règle 3-2-1, snapshots Proxmox, backups Docker, rclone vers Backblaze B2 et tests de restauration.

Haute disponibilité self-hosted : backups, snapshots et reprise

La meilleure infrastructure self-hosted est celle qui tient quand les choses tournent mal. Dans cet article final de la série, je vous montre la stratégie backup complète de BOTUM : règle 3-2-1, snapshots Proxmox, backups Docker, et surtout — les tests de restauration, l'étape que tout le monde oublie.

La règle 3-2-1 — Le fondement de toute stratégie backup

La règle 3-2-1 est le standard de l'industrie pour les sauvegardes. Simple et efficace :

  • 3 copies de vos données (original + 2 sauvegardes)
  • 2 supports différents (ex: SSD local + NAS)
  • 1 copie hors site (cloud, autre bâtiment)
  • La copie hors site protège contre incendie, vol, inondation
  • Le test de restauration prouve que vos backups fonctionnent vraiment

Pour une infrastructure self-hosted typique : données actives (SSD serveur) + backup local (NAS ou second disque) + backup cloud (Backblaze B2, AWS S3, ou rclone vers n'importe quel cloud).

Stratégie backup 3-2-1
Diagramme de la règle 3-2-1 avec exemples concrets

Snapshots Proxmox — Sauvegarde instantanée des VMs

Les snapshots Proxmox sauvegardent l'état complet d'une VM (disque + RAM optionnel) en quelques secondes. Idéal avant une mise à jour majeure ou un changement de configuration risqué.

# Créer un snapshot via CLI Proxmox :
qm snapshot <VMID> <nom-snapshot> --description "Description"
# Exemple :
qm snapshot 101 avant-upgrade-kernel --description "Avant kernel 6.8"

# Lister les snapshots :
qm listsnapshot 101

# Restaurer un snapshot (la VM doit être arrêtée) :
qm stop 101
qm rollback 101 avant-upgrade-kernel
qm start 101

# Supprimer un snapshot :
qm delsnapshot 101 avant-upgrade-kernel

# Snapshot programmatique (cron Proxmox) :
# Datacenter > Storage > Backup > Add
# Schedule: tous les jours à 2h00
# Mode: Snapshot ou Stop (plus cohérent)
# Retention: garder les 7 derniers backups

Proxmox Backup Server (PBS) — Backups déduplicados

Proxmox Backup Server est l'outil de backup officiel de Proxmox. Il offre la déduplication, la compression et les backups incrémentaux — ce qui réduit drastiquement l'espace disque nécessaire.

# Installer PBS sur un serveur dédié (ou une VM) :
# 1. Télécharger l'ISO PBS depuis proxmox.com/downloads
# 2. Installer sur une machine séparée (recommandé)
# 3. Dans Proxmox VE > Datacenter > Storage > Add > Proxmox Backup Server
#    Server: IP-de-votre-PBS
#    Datastore: le nom du datastore PBS
#    Fingerprint: (copier depuis PBS)

# Créer un job de backup dans Proxmox VE :
# Datacenter > Backup > Add
# Storage: votre-PBS
# Schedule: tous les jours à 2:00
# Selection: inclure toutes les VMs
# Mode: Snapshot (sans arrêt) ou Suspend (bref arrêt)
# Retention: 7 daily, 4 weekly, 3 monthly
Backup 3-2-1 schéma
Schéma complet de la stratégie backup avec Proxmox + cloud

Backup des volumes Docker

Pour les services Docker qui tournent hors Proxmox (ou sur un VPS), voici la stratégie de backup des volumes :

#!/bin/bash
# Script complet de backup Docker vers NAS + Cloud

BACKUP_LOCAL="/mnt/nas/backups/docker/$(date +%Y-%m-%d)"
BACKUP_LOG="/var/log/docker-backup.log"

mkdir -p "$BACKUP_LOCAL"

# Fonction de backup d'un service Docker
backup_service() {
    local name="$1"
    local path="$2"
    
    echo "$(date): Backup $name" | tee -a "$BACKUP_LOG"
    tar czf "${BACKUP_LOCAL}/${name}-$(date +%Y%m%d_%H%M%S).tar.gz"         "$path" 2>> "$BACKUP_LOG" &&         echo "OK: $name" | tee -a "$BACKUP_LOG" ||         echo "ERREUR: $name" | tee -a "$BACKUP_LOG"
}

# Ghost Blog (arrêt non nécessaire pour SQLite)
backup_service "ghost" "/mnt/docker-data/ghost-blog/content"

# Vaultwarden (arrêt bref recommandé)
docker stop vaultwarden 2>/dev/null
backup_service "vaultwarden" "$HOME/docker/vaultwarden/data"
docker start vaultwarden 2>/dev/null

# Uptime Kuma
backup_service "uptime-kuma" "$HOME/docker/uptime-kuma/data"

# Zoraxy
backup_service "zoraxy" "$HOME/docker/zoraxy/data"

echo "$(date): Backup local terminé" | tee -a "$BACKUP_LOG"

# Synchronisation vers cloud avec rclone
rclone sync "$BACKUP_LOCAL" "b2:mon-bucket-backups/docker/$(date +%Y-%m-%d)/"     --log-file="$BACKUP_LOG" &&     echo "$(date): Sync cloud OK" | tee -a "$BACKUP_LOG"

# Nettoyage des backups de plus de 30 jours
find /mnt/nas/backups/docker -maxdepth 1 -type d -mtime +30 -exec rm -rf {} +

Installer et configurer rclone pour Backblaze B2

# Installer rclone :
curl https://rclone.org/install.sh | sudo bash

# Configurer Backblaze B2 :
rclone config
# > New remote (n)
# > Name: b2
# > Provider: Backblaze B2
# > account: votre-application-key-id
# > key: votre-application-key
# > Save

# Créer un bucket B2 :
rclone mkdir b2:mon-bucket-backups

# Test de synchronisation :
rclone sync /backup/test/ b2:mon-bucket-backups/test/ --progress

# Vérifier le contenu du bucket :
rclone ls b2:mon-bucket-backups/

# Coûts Backblaze B2 : ~0.006$/Go/mois (très économique)

Test de restauration — L'étape critique

Un backup non testé n'est pas un backup — c'est une espérance. Testez régulièrement vos restaurations sur une VM de test :

# Test de restauration Proxmox (VM de test) :
# 1. Dans Proxmox : Datacenter > Backup > sélectionner un backup > Restore
# 2. Choisir une VM ID différente (ex: 999 pour les tests)
# 3. Restaurer sur un stockage de test
# 4. Démarrer la VM de test
# 5. Vérifier que les services sont opérationnels

# Test de restauration Docker (sur VM séparée) :
# 1. Créer une nouvelle VM Ubuntu de test
# 2. Installer Docker
# 3. Copier le backup depuis le NAS ou cloud

# Restaurer Ghost Blog :
mkdir -p /test/ghost-blog/content
tar xzf /backup/ghost-20260312.tar.gz -C /test/ghost-blog/content/
# Démarrer Ghost sur le port 2368 de la VM de test
# Vérifier que le blog est lisible

# Restaurer Vaultwarden :
mkdir -p /test/vaultwarden/data
cp /backup/vaultwarden-20260312.db /test/vaultwarden/data/db.sqlite3
# Démarrer Vaultwarden et vérifier l'accès

echo "Test de restauration réussi !" 
Test de restauration en cours
VM de test avec services restaurés depuis backup

Monitoring de l'intégrité des backups

#!/bin/bash
# /usr/local/bin/check-backups.sh
# Vérifie que les backups sont récents et intact

BACKUP_DIR="/mnt/nas/backups/docker"
MAX_AGE_HOURS=25  # Alerte si pas de backup depuis 25h
TELEGRAM_TOKEN="VOTRE_TOKEN"
TELEGRAM_CHAT="VOTRE_CHAT_ID"

alert() {
    curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage"         -d chat_id="${TELEGRAM_CHAT}" -d text="[BACKUP] $1" > /dev/null
}

# Vérifier l'existence du dernier backup
LAST_BACKUP=$(find "$BACKUP_DIR" -maxdepth 1 -type d -name "20*" | sort | tail -1)

if [[ -z "$LAST_BACKUP" ]]; then
    alert "ERREUR: Aucun backup trouvé dans $BACKUP_DIR"
    exit 1
fi

# Vérifier l'âge du dernier backup
BACKUP_AGE=$(( ($(date +%s) - $(stat -c %Y "$LAST_BACKUP")) / 3600 ))

if (( BACKUP_AGE > MAX_AGE_HOURS )); then
    alert "ALERTE: Dernier backup a ${BACKUP_AGE}h (seuil: ${MAX_AGE_HOURS}h)"
fi

# Vérifier l'intégrité des archives tar
for f in "$LAST_BACKUP"/*.tar.gz; do
    if ! tar tzf "$f" > /dev/null 2>&1; then
        alert "ERREUR: Archive corrompue: $f"
    fi
done

echo "Vérification backups OK - Dernier backup: $LAST_BACKUP (${BACKUP_AGE}h)" 

Plan de reprise d'activité (PRA)

Un bon PRA définit exactement quoi faire en cas de sinistre, dans quel ordre, et combien de temps ça prend :

  • RTO (Recovery Time Objective) : temps max acceptable pour restaurer le service
  • RPO (Recovery Point Objective) : perte de données max acceptable (ex: 24h si backup quotidien)
  • Documenter chaque service : IP, ports, dépendances, commandes de restauration
  • Tenir un runbook à jour : liste ordonnée des étapes de restauration
  • Tester le PRA au moins une fois par an (exercice de sinistre)

Haute disponibilité avec Proxmox Cluster

# Pour un niveau HA (haute disponibilité) avec Proxmox :
# Minimum : 3 nœuds Proxmox + stockage partagé (Ceph ou NFS)

# Créer un cluster Proxmox (sur le nœud principal) :
pvecm create mon-cluster

# Rejoindre le cluster (sur les autres nœuds) :
pvecm add IP-DU-NOEUD-PRINCIPAL

# Vérifier le statut du cluster :
pvecm status
pvecm nodes

# Activer HA pour une VM :
# Datacenter > HA > Add
# VM ID: 101
# Group: (optionnel)
# Max restart: 3
# Max relocate: 3

# En cas de panne d'un nœud, les VMs HA migrent
# automatiquement vers un nœud disponible.

Conclusion de la série

Félicitations ! Vous avez maintenant une infrastructure self-hosted complète et professionnelle : virtualisation Proxmox, conteneurisation Docker, reverse proxy SSL Zoraxy, gestion de mots de passe Vaultwarden, monitoring Uptime Kuma, automatisation et backups.

Cette série vous a montré exactement comment l'infrastructure BOTUM est construite. L'auto-hébergement n'est plus réservé aux experts — avec ces outils, n'importe qui peut gérer son infrastructure comme un professionnel. Bonne chance dans votre aventure self-hosted !


📥 Guide PDF complet

Téléchargez ce guide en PDF pour le consulter hors ligne.

⬇ Télécharger le guide (PDF)

🚀 Aller plus loin avec BOTUM

Ce guide couvre les bases. En production, chaque environnement a ses spécificités. Les équipes BOTUM accompagnent les organisations dans le déploiement, la configuration avancée et la sécurisation de leur infrastructure. Si vous avez un projet, parlons-en.

Discuter de votre projet →
📋 Série Infrastructure Proxmox : Voir la série complète →
Série Infrastructure Proxmox