Repository navigation
Restic Backups
Ce guide détaille comment mettre en place la supervision et le déclenchement de sauvegardes Restic via resticprofile sur un hôte supervisé par ServerSupervisor.
- Installer
restic(instructions officielles).sudo apt install restic
- Installer
resticprofile(instructions officielles).curl -sfL https://raw.githubusercontent.com/creativeprojects/resticprofile/master/install.sh | sudo sh -s -- -b /usr/local/bin - Choisir un répertoire de travail pour la config, par exemple
/home/user/restic-backups/.mkdir -p /home/user/restic-backups
Créez /home/user/restic-backups/resticconf, un fichier shell sourcé
localement par l'agent avant chaque exécution :
export RESTIC_REPOSITORY="/srv/restic-repo"
export RESTIC_CACHE_DIR="/home/user/restic-backups/cache"
export RESTIC_PASSWORD_FILE="/home/user/restic-backups/restic-password.txt"
# Exemple backend S3 (facultatif selon votre backend) :
# export AWS_ACCESS_KEY_ID="..."
# export AWS_SECRET_ACCESS_KEY="..."exemple SwissBackup (Infomaniak) :
export RESTIC_REPOSITORY="swift:sb_project_SBI-XXXX:/nextcloud-aio"
export RESTIC_CACHE_DIR="/root/restic-backups/cache"
export RESTIC_PASSWORD_FILE="/home/user/restic-backups/restic-password.txt"
export OS_AUTH_URL="https://swift02-api.cloud.infomaniak.ch/identity/v3"
export OS_USERNAME="SBI-XXXX"
export OS_PASSWORD="ton-mot-de-passe-swiss-backup"
export OS_PROJECT_NAME="sb_project_SBI-XXXX"
export OS_PROJECT_DOMAIN_NAME="default"
export OS_USER_DOMAIN_NAME="default"
export OS_REGION_NAME="RegionOne"Créez aussi le fichier contenant le mot de passe de chiffrement du dépôt restic :
echo "MotDePasseTresLong" > /home/user/restic-backups/restic-password.txtVerrouillez les deux fichiers :
chmod 600 /home/user/restic-backups/resticconf
chmod 600 /home/user/restic-backups/restic-password.txtSeules les variables dont le nom commence par RESTIC_, OS_, SWIFT_,
ST_, B2_, AWS_, AZURE_, GOOGLE_ ou RCLONE_ sont transmises par
l'agent au script (resticEnvAllowedPrefixes) — tout le reste (alias shell,
PS1, etc.) présent dans ce fichier est ignoré, jamais transmis au processus
run_backup.sh.
On charge le fichier créé à l'étape 2 dans le shell, puis on initialise le dépôt restic :
source /home/user/restic-backups/resticconf
restic initRésultat attendu : un message avec l'ID du nouveau dépôt. Si erreur d'authentification → revérifiez OS_AUTH_URL et OS_PASSWORD dans resticconf.
Créez /home/user/restic-backups/resticprofile.yaml (un profil par
périmètre à sauvegarder, par exemple profil_name et db) :
version: "1"
global:
# status-file : lu par l'agent pour le monitoring passif (source privilégiée,
# sans lui l'agent retombe sur `restic snapshots --json`/`stats --json`).
status-file: /home/user/restic-backups/backup-status.json
profil_name:
backup:
source:
- /home/user/data
- /etc
exclude:
- "**/.cache"
extended-status: true
# autre profil de backup
db:
backup:
run-before: "pg_dump -U postgres mydb > /home/user/restic-backups/mydb.sql"
source:
- /home/user/restic-backups/mydb.sql
extended-status: trueextended-status: true est recommandé pour que le status-file contienne le
résultat de chaque exécution de profil.
Optionnel : une section groups permet de regrouper plusieurs profils sous
un nom unique, exécutés ensemble en une seule invocation :
groups:
full-backup:
- profil_name
- dbDeux recettes complètes (profils + groupe + bascule maintenance) pour des applications auto-hébergées courantes :
Créez /home/user/restic-backups/run_backup.sh, exécuté par l'agent avec le
nom du profil en premier argument (vide = profil par défaut de votre script) :
#!/usr/bin/env bash
set -euo pipefail
PROFILE="${1:-profil_name}"
CONFIG_DIR="/home/user/restic-backups"
exec resticprofile --config "${CONFIG_DIR}/resticprofile.yaml" --name "${PROFILE}" backup --jsonchmod +x /home/user/restic-backups/run_backup.shTestez le script manuellement avant de le brancher à ServerSupervisor :
source /home/user/restic-backups/resticconf
/home/user/restic-backups/run_backup.sh profil_nameemplacement par défaut : /etc/serversupervisor/agent.yaml
collect_restic: true
restic_bin: "/usr/local/bin/restic"
restic_conf_path: "/home/user/restic-backups/resticconf"
restic_run_script_path: "/home/user/restic-backups/run_backup.sh"
restic_status_file_path: "/home/user/restic-backups/backup-status.json"
restic_profile_config_path: "/home/user/restic-backups/resticprofile.yaml"
restic_enable_progress: true
restic_progress_fps: 0.1
restic_backup_idle_timeout_minutes: 20| Clé | Rôle |
|---|---|
collect_restic |
Active la section restic du rapport périodique de l'agent |
restic_bin |
Chemin du binaire restic (défaut : restic dans le PATH) |
restic_conf_path |
Chemin de resticconf (secrets, jamais lus par le serveur) |
restic_run_script_path |
Chemin de run_backup.sh, exécuté par l'action Lancer un backup
|
restic_status_file_path |
Chemin du status-file resticprofile — source privilégiée du monitoring passif |
restic_profile_config_path |
Chemin de resticprofile.yaml — lu localement pour lister les noms de profils (files, db, …) et de groupes (section groups) et peupler les sélecteurs de profil/groupe dans l'UI (backup manuel + tâche planifiée). Seuls les noms sont transmis au serveur, jamais le contenu du fichier |
restic_enable_progress |
Active le parsing de la progression en direct pendant un backup manuel |
restic_progress_fps |
Fréquence des événements de progression forcés (défaut 0.1, un toutes les 10s) |
restic_backup_idle_timeout_minutes |
Un backup manuel n'a pas de plafond de durée fixe ; il est coupé s'il reste silencieux (aucune ligne --json) plus longtemps que cette valeur (défaut 20 min) |
Seuls des chemins et des indicateurs de fonctionnalité vivent dans
agent.yaml — jamais un secret. Redémarrez l'agent après modification.
Au rapport périodique suivant, l'onglet Sauvegardes de la fiche hôte doit
afficher un statut (dernier backup, snapshot, volume) sans qu'aucun backup
n'ait été déclenché depuis ServerSupervisor — c'est la lecture du status-file
(ou, à défaut, de restic snapshots --json/restic stats --json).
Sur la fiche hôte, onglet Sauvegardes, le bouton Lancer un backup
(visible aux comptes Operator et Admin) dispatche une commande agent
(module=restic, action=run_backup, target=<profil>) qui exécute
directement run_backup.sh avec suivi de progression en direct tant que la
page reste ouverte. Fermer l'onglet n'interrompt que l'affichage : le backup
continue côté agent, et le résultat final apparaît au prochain rapport de
statut.
Il n'y a pas de cron ni de webhook à configurer côté ServerSupervisor. Un backup récurrent est une tâche planifiée comme une autre :
- Aller sur Tâches planifiées.
- Créer une tâche avec module
restic, actionrun_backup. - Cible (
target) = nom du profil ou du groupe resticprofile (files,db,full-backup, …) — laisser vide pour le profil par défaut défini dansrun_backup.sh. - Choisir la fréquence (cron).
| Symptôme | Cause probable |
|---|---|
| Statut toujours absent dans l'onglet Sauvegardes |
collect_restic: false, ou restic_bin introuvable dans le PATH de l'agent |
| Backup manuel échoue immédiatement, aucun résumé |
restic_run_script_path absent ou non exécutable (chmod +x) |
Backup manuel échoue avec resticconf not readable
|
Mauvais chemin/permissions sur restic_conf_path, ou fichier illisible par l'utilisateur qui exécute l'agent |
| Pas de progression en direct pendant un backup en cours |
restic_enable_progress: false, ou le script n'appelle pas restic/resticprofile avec --json
|
| Backup coupé alors qu'il semblait actif | Aucune ligne --json reçue pendant plus de restic_backup_idle_timeout_minutes — vérifier que le script ne reste pas bloqué sur une étape sans sortie (ex. run-before long et silencieux) |
| Statut passif absent alors que le script fonctionne en manuel |
restic_status_file_path ne pointe pas vers le status-file déclaré dans resticprofile.yaml, ou extended-status non activé sur le profil |
unable to open cache: unable to locate cache directory: neither $XDG_CACHE_HOME nor $HOME are defined dans les logs, backup par ailleurs fonctionnel |
HOME n'est pas transmis par l'agent au processus restic (seules les variables RESTIC_/OS_/SWIFT_/ST_/B2_/AWS_/AZURE_/GOOGLE_/RCLONE_ de resticconf le sont — voir §2), et un agent lancé en service systemd n'a généralement pas HOME défini par défaut. Sans effet sur l'upload vers le backend (le cache local n'est qu'une optimisation) mais facile à faire taire : ajoutez export RESTIC_CACHE_DIR="/home/user/restic-backups/cache" dans resticconf (créez le dossier au préalable) — RESTIC_CACHE_DIR est bien transmis puisqu'il commence par RESTIC_
|
Voir aussi la section Sauvegardes Restic du README pour le résumé des trois modes (passif/actif/planifié) et le tableau des routes API associées.
Intégrations
Automatisation
Sauvegardes
Alertes & Monitoring
Compte & Sécurité
Hôtes
Interface