# Sauvegardes HestiaCP sauvegarde chaque utilisateur **tous les jours à 05h10**. La sauvegarde contient ses sites, bases de données, boîtes mail, zones DNS, tâches cron, certificats et son dossier personnel. Deux compléments sont indispensables : - une **copie hors du serveur**, car une sauvegarde qui reste sur le serveur disparaît avec lui ; - la sauvegarde de la **configuration système**, que HestiaCP ne sauvegarde pas : `/etc`, la configuration de HestiaCP, vos modèles, les volumes Docker. ## Vérifier la sauvegarde locale Lancez une sauvegarde manuelle de {{CLIENT}} : ```bash sudo v-backup-user {{CLIENT}} yes sudo v-list-user-backups {{CLIENT}} ls -lh /backup/ ``` > [!CHECK] > Un fichier `{{CLIENT}}.AAAA-MM-JJ_HH-MM-SS.tar` apparaît dans `/backup/`. Le nombre de sauvegardes conservées est celui du forfait (7 pour `projets`). > [!NOTE] > Pour exclure un dossier volumineux (cache, fichiers temporaires) : **Sauvegardes › Exclusions**, dans le compte de l'utilisateur. ## Préparer une clé SSH pour le serveur de sauvegarde La copie distante se fait en SFTP vers {{BACKUP_HOST}}, avec une clé SSH dédiée, sans mot de passe : ```bash sudo ssh-keygen -t ed25519 -f /root/.ssh/hestia-backup -N "" -C "backup@{{FQDN}}" sudo cat /root/.ssh/hestia-backup.pub ``` Ajoutez cette clé publique au fichier `~/.ssh/authorized_keys` du compte {{BACKUP_USER}} sur {{BACKUP_HOST}}. Sur un hébergement mutualisé, passez par l'interface (cPanel : **Accès SSH › Gérer les clés SSH › Importer**, puis **Autoriser**). Testez la connexion et créez le dossier de destination : ```bash sudo ssh -i /root/.ssh/hestia-backup -p {{BACKUP_PORT}} {{BACKUP_USER}}@{{BACKUP_HOST}} "mkdir -p hestia-{{HOST}}/systeme && ls" ``` > [!CHECK] > Répondez `yes` à la question sur l'empreinte du serveur. La commande affiche le contenu du dossier distant, dont `hestia-{{HOST}}`, sans demander de mot de passe. ## Envoyer les sauvegardes HestiaCP hors du serveur ```bash sudo v-add-backup-host sftp {{BACKUP_HOST}} {{BACKUP_USER}} /root/.ssh/hestia-backup hestia-{{HOST}} {{BACKUP_PORT}} sudo v-list-backup-host sftp ``` Les sauvegardes sont maintenant copiées aussi vers `hestia-{{HOST}}/` sur {{BACKUP_HOST}}, avec la même durée de conservation. Testez tout de suite : ```bash sudo v-backup-user {{CLIENT}} yes sudo ssh -i /root/.ssh/hestia-backup -p {{BACKUP_PORT}} {{BACKUP_USER}}@{{BACKUP_HOST}} "ls -lh hestia-{{HOST}}" ``` > [!CHECK] > L'archive `{{CLIENT}}.….tar` du jour est présente sur le serveur distant, et {{EMAIL}} reçoit un e-mail de confirmation de la sauvegarde. ## Sauvegarder la configuration système Ce script copie chaque nuit vers le serveur distant (qui doit disposer de `rsync`) `/etc`, la configuration et les modèles de HestiaCP, les volumes Docker et `/opt` : ```bash sudo tee /usr/local/sbin/backup-systeme.sh > /dev/null << 'EOF' #!/bin/bash # Copie de la configuration système vers le serveur de sauvegarde set -euo pipefail DEST="{{BACKUP_USER}}@{{BACKUP_HOST}}:hestia-{{HOST}}/systeme/" SSH="ssh -i /root/.ssh/hestia-backup -p {{BACKUP_PORT}}" SOURCES=() for p in /etc /usr/local/hestia/conf /usr/local/hestia/data /usr/local/sbin \ /opt /var/lib/docker/volumes /root/.ssh; do if [ -e "$p" ]; then SOURCES+=("$p"); fi done rsync -aR --delete -e "$SSH" "${SOURCES[@]}" "$DEST" EOF sudo chmod 700 /usr/local/sbin/backup-systeme.sh sudo /usr/local/sbin/backup-systeme.sh && echo "Sauvegarde système OK" ``` Programmez-le chaque nuit à 04h30 (avant la sauvegarde HestiaCP) : ```bash echo '30 4 * * * root /usr/local/sbin/backup-systeme.sh > /var/log/backup-systeme.log 2>&1' | sudo tee /etc/cron.d/backup-systeme ``` > [!WARNING] > Ces copies contiennent des secrets : clés SSH, mots de passe de bases dans `/usr/local/hestia/conf`, fichiers `.env.local`. Le compte de sauvegarde doit être protégé comme le serveur lui-même. ## Restaurer Lister les sauvegardes d'un utilisateur : ```bash sudo v-list-user-backups {{CLIENT}} ``` Restaurer **un seul** site, une base ou un domaine mail, depuis une archive locale ou distante : ```bash sudo v-restore-web-domain {{CLIENT}} {{CLIENT}}.AAAA-MM-JJ_HH-MM-SS.tar {{SITE}} sudo v-restore-database {{CLIENT}} {{CLIENT}}.AAAA-MM-JJ_HH-MM-SS.tar {{CLIENT}}_app sudo v-restore-mail-domain {{CLIENT}} {{CLIENT}}.AAAA-MM-JJ_HH-MM-SS.tar {{DOMAINE}} ``` Restaurer **tout** l'utilisateur (sur ce serveur ou sur un nouveau serveur HestiaCP, où l'utilisateur sera recréé) : ```bash sudo v-restore-user {{CLIENT}} {{CLIENT}}.AAAA-MM-JJ_HH-MM-SS.tar ``` > [!TIP] Testez une restauration > Une sauvegarde jamais testée n'est pas une sauvegarde. Une fois par trimestre, restaurez une base dans une base de test, ou le site complet sur un VPS temporaire. > [!NOTE] Pour aller plus loin : sauvegardes incrémentales > Depuis la version 1.9, HestiaCP sait aussi faire des sauvegardes **incrémentales** avec restic (commande `v-add-backup-host-restic`), vers un stockage compatible rclone (S3, Backblaze B2…). Elles prennent beaucoup moins de place que des archives complètes quotidiennes. Pensez alors à sauvegarder les fichiers `/usr/local/hestia/data/users/*/restic.conf`, sans lesquels la restauration est impossible : le script `backup-systeme.sh` les inclut déjà.