Files
vps-docs/hestiacp/chapitres/13-sauvegardes.md
Zana 2e18724685 Ajout du guide PDF HestiaCP réutilisable (HestiaCP 1.10.4)
- 14 chapitres + annexe en Markdown (chapitres/), 99 étapes
- Générateur WeasyPrint (build/build.py) : PDF générique ou
  personnalisé via --vars fichier.conf
- PDF générique + PDF personnalisé srv1.skglobalinstitute.com
- Commandes v-* vérifiées contre le code source HestiaCP 1.10.4
- 03-bis-hestiacp.md pointe vers le nouveau guide

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018J2PsVQ28oW4xEkWJpcU9G
2026-09-10 20:01:59 +02:00

121 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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à.