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.zone.domain.tld:8888"; zone = "ag"; 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.
Durcir l’isolation des dépôts
Section intitulée « Durcir l’isolation des dépôts »Par défaut, le serveur accepte que tout hôte authentifié accède à n’importe quel
dépôt. L’option enableServerPrivateRepos impose que chaque hôte n’accède qu’à
son propre dépôt (préfixe = nom d’hôte). À activer en deux temps pour éviter
toute coupure :
- Déployer tout le parc avec les credentials par hôte (clients + serveurs),
enableServerPrivateRepos = false. Vérifier que les sauvegardes passent. - Passer
enableServerPrivateRepos = trueet redéployer les serveurs.
Restaurer
Section intitulée « Restaurer »Sur l’hôte concerné, les secrets sont déjà en place. Lister puis restaurer :
# 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-agexport RESTIC_REPOSITORY=rest:http://restic.zone.domain.tld: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 à la demande :
Fenêtre de terminal systemctl start restic-backups-system-main.servicejournalctl -u restic-backups-system-main.service -e -
Isolation (si
enableServerPrivateRepos = true) : l’accès au dépôt d’un autre hôte doit être refusé (erreur 401/403).