Sauvegardes du réseau (restic)
Le module darkone.service.restic sauvegarde les hôtes du parc avec
restic 🡕 : chaque hôte (client) pousse ses données vers un
dépôt, local ou distant via un serveur REST de zone.
Principes
Section intitulée « Principes »Deux rôles, un seul module :
- Serveur REST : un hôte qui déclare le service
resticdansconfig.yaml. Il stocke les dépôts de tous les hôtes et écoute sur le réseau interne. - Client : tout hôte avec
enable = truequi déclare destargets(destinations de sauvegarde).
Disposition d’un dépôt, par catégorie :
<racine>/<hôte>/system # catégorie "system" (/ moins les exclusions)<racine>/<hôte>/srv/nfs # catégorie "nfs" (/srv/nfs/<...>)<racine>/<hôte>/srv/medias # catégorie "medias" (/srv/medias/<...>)Monter un serveur de sauvegarde
Section intitulée « Monter un serveur de sauvegarde »-
Dans
etc/config.yaml, ajouter le serviceresticà l’hôte serveur :services:restic: -
Brancher le disque de sauvegarde et le monter sur
/mnt/backupdans la configuration de l’hôte (usr/machines/<hôte>/), avec l’optionnofail:fileSystems."/mnt/backup" = {device = "/dev/disk/by-uuid/<uuid>";fsType = "ext4";options = [ "nofail" ];};# Le serveur REST ne démarre qu'une fois le disque monté.systemd.services.restic-rest-server = {requires = [ "mnt-backup.mount" ];after = [ "mnt-backup.mount" ];}; -
Le dépôt est stocké sous
serverDataDir(défaut/mnt/backup/restic). Le pare-feu ouvre le port REST sur l’interface interne automatiquement.
Ajouter un client
Section intitulée « Ajouter un client »Déclarer une ou plusieurs targets dans la configuration de l’hôte :
darkone.service.restic = { enable = true; targets = [ { # Dépôt distant via le serveur REST de la zone. root = "rest:http://restic.home.example.net:8888"; zone = "home"; categories = [ "system" "nfs" ]; } ];};Champs d’un target :
| Champ | Rôle |
|---|---|
name | Identifiant (défaut main), suffixe des jobs/units. |
root | Chemin local ou URL rest://. |
zone | Zone qui choisit la passphrase restic-password-<zone>. |
categories | Données sauvegardées : system, nfs, medias. |
Générer les mots de passe
Section intitulée « Générer les mots de passe »Une recette idempotente crée les secrets manquants (jamais d’écrasement) :
just passwd-resticElle génère, dans usr/secrets/secrets.yaml :
- une passphrase
restic-password-<zone>par zone ; - un credential
restic/<hôte>/rest-passwordpar hôte du parc.
Lancer une sauvegarde manuellement
Section intitulée « Lancer une sauvegarde manuellement »Le module crée un service systemd par couple cible × catégorie, nommé
restic-backups-<catégorie>-<nom> (le <nom> vient du champ name du target,
main par défaut). Exemples : restic-backups-system-main,
restic-backups-nfs-main.
-
Lister les services de sauvegarde présents sur l’hôte :
Fenêtre de terminal systemctl list-units 'restic-backups-*' -
Déclencher une sauvegarde immédiate, sans attendre le timer :
Fenêtre de terminal sudo systemctl start restic-backups-system-main.service -
Suivre son déroulement en direct :
Fenêtre de terminal journalctl -fu restic-backups-system-main.service
Isolation des dépôts
Section intitulée « Isolation des dépôts »Le serveur REST tourne en dépôts privés (privateRepos = true) : chaque hôte
n’accède qu’au dépôt dont le chemin commence par son propre nom d’hôte. Le
module aligne automatiquement le compte REST (<hôte>) sur le préfixe du dépôt
(<racine>/<hôte>/...), donc l’isolation est permanente → aucun réglage à
activer. Une tentative d’accès au dépôt d’un autre hôte renvoie une erreur
403.
Restaurer
Section intitulée « Restaurer »Sur l’hôte concerné, les secrets sont déjà en place. Lister puis restaurer :
# Adapter la zone du dépôt (et la catégorie : system, srv/nfs, srv/medias).ZONE=home
# Variables d'accès REST (générées par sops) et passphrase de dépôt.set -a; . /run/secrets/rendered/restic-rest-env; set +aexport RESTIC_PASSWORD_FILE=/run/secrets/restic-password-$ZONEexport RESTIC_REPOSITORY=rest:http://restic.$ZONE.example.net:8888/$(hostname)/system
restic snapshotsrestic restore latest --target /restoreVérifier
Section intitulée « Vérifier »-
Sur un serveur, un compte par hôte du parc dans le fichier htpasswd :
Fenêtre de terminal sudo cut -d: -f1 /run/restic-rest/htpasswd -
Sur un client, lancer une sauvegarde manuelle (voir plus haut) et vérifier qu’elle se termine sans erreur.
-
Isolation : depuis un client, l’accès au dépôt d’un autre hôte doit être refusé (erreur 401/403).