Recherche de site Web

Comment orchestrer des sauvegardes restic avec autorestic sous Linux


Restic est un programme de sauvegarde moderne avec prise en charge du cryptage et de la déduplication. Comme nous l’avons vu dans ce tutoriel, Restic est facile à utiliser, mais il n’utilise pas de fichier de configuration, et n’inclut pas nativement une méthode pour orchestrer et organiser plusieurs sauvegardes. C’est là qu’autorestic s’avère utile : il s’agit d’un wrapper autour de Restic qui nous permet de configurer et d’orchestrer les sauvegardes dans un seul fichier de configuration yaml, en spécifiant plusieurs sources (emplacements) et destinations (backends).

Dans ce tutoriel, nous apprenons comment installer autorestic sur Linux, comment son fichier de configuration est structuré et comment créer une configuration de base.

Dans ce tutoriel, vous allez apprendre :

  • Comment installer autorestic sur Linux
  • Structure du fichier de configuration autorestic
  • Comment configurer les sauvegardes Restic avec autorestic
  • Comment exécuter des commandes personnalisées sur des hooks autorestic

Installation d’autorestic

Dans cet article, je supposerai que vous avez déjà installé Restic ; Si vous ne le connaissez pas, vous voudrez peut-être d’abord jeter un coup d’œil à notre tutoriel d’introduction.

Au moment de la rédaction de cet article, de toutes les principales distributions Linux, seule Fedora inclut autorestic dans ses dépôts. Pour installer le logiciel, nous pouvons soit télécharger un binaire précompilé à partir du dépôt GitHub du projet, soit utiliser l’image Docker dédiée. Explorons ces options.

Installation manuelle

La façon la plus simple d’installer autorestic est de télécharger la version appropriée du binaire pour notre système d’exploitation, et de la placer dans un répertoire de notre PATH. Dans l’exemple ci-dessous, nous téléchargeons la dernière version disponible x86_64 Linux (1.8.2 au moment de la rédaction), et l’installons dans le répertoire /usr/local/bin. Tout d’abord, nous téléchargeons l’archive « .bz2 » :

curl -LO https://github.com/cupcakearmy/autorestic/releases/download/v1.8.2/autorestic_1.8.2_linux_amd64.bz2

Une fois le téléchargement terminé, nous extrayons le fichier :

bzip2 -d autorestic_1.8.2_linux_amd64.bz2

Enfin, on déplace le fichier dans le répertoire cible, et on le rend exécutable :

sudo mv autorestic_1.8.2_linux_amd64 /usr/local/bin/autorestic && sudo chmod +x /usr/local/bin/autorestic

Installation via le gestionnaire de paquets (Fedora uniquement)

Si nous utilisons Fedora, la manière la plus simple et la plus pratique d’installer autorestic est d’utiliser le gestionnaire de paquets dnf, car l’outil est inclus dans les dépôts officiels de la distribution :

sudo dnf install autorestic

Utilisation de l’image Docker autorestic

Une image officielle de Docker autorestic est disponible ; Lors de l’exécution d’un conteneur basé sur celui-ci, nous devons lier les répertoires que nous voulons sauvegarder, le fichier de configuration autorestic et le dépôt cible (si vous effectuez une sauvegarde locale), quelque part à l’intérieur du conteneur, et pointer autorestic vers le chemin du fichier de configuration avec l’option -c. Voici un exemple dans lequel nous sauvegardons le contenu du répertoire host, /data :

sudo docker run --rm -v /data:/data:Z -v /etc/autorestic.yml:/etc/autorestic.yml:Z -v /mnt/restic_repo:/mnt/restic_repo:Z cupcakearmy/autorestic autorestic backup -va -c /etc/autorestic.yml

Nous lions le fichier de configuration /etc/autorestic.yaml, les répertoires /data et /mnt/restic_repo (qui sont respectivement la source et la destination de notre sauvegarde) dans leurs positions respectives à l’intérieur du conteneur. Pour chaque montage de liaison, nous avons utilisé l’option Z : celle-ci n’est nécessaire que lorsque SELinux est actif, car il change l’étiquette des fichiers référencés en object_r :container_file_t, afin qu’ils soient accessibles à l’intérieur du conteneur.

Le fichier de configuration autorestic

Le cœur d’autorestic est son fichier de configuration yaml. Dans ce fichier, nous définissons les sources et les destinations de nos sauvegardes, les options restantes que nous voulons utiliser, et bien d’autres choses. Pour des raisons évidentes, nous ne pouvons pas couvrir toutes les options possibles ici, nous ne verrons donc que l’essentiel.

Autorestic recherche le fichier de configuration aux positions suivantes, par ordre de priorité :

  1. .autorestic.yml
  2. ~/.autorestic.yml
  3. ~/.config/autorestic/.autorestic.yml

À l’intérieur du fichier de configuration, nous définissons les sources de nos sauvegardes dans la section « emplacement », et leurs destinations dans la section « backends ». Commençons par un exemple de base. Supposons que nous souhaitions sauvegarder le contenu du répertoire /data dans le référentiel local /mnt/restic_repo. Voici comment nous remplirions le fichier de configuration autorestic, que nous enregistrerons sous .autorestic.yml dans notre répertoire de travail actuel :

version: 2
locations:
  data:
    from: 
      - /data
    to:
      - localrepo

backends:
  localrepo:
    type: local
    path: /mnt/restic_repo
    key: repositorypassword

Chaque emplacement est identifié par un nom en minuscules ; Dans ce cas, nous avons utilisé « data » pour celui que nous avons créé. Avec la clé from, nous définissons un ou plusieurs répertoires que nous voulons sauvegarder : les chemins peuvent être spécifiés comme absolus ou relatifs au chemin du fichier de configuration. Avec la touche to, en revanche, nous fournissons une ou plusieurs cibles ou backends pour l’emplacement, encore une fois, en les référençant par leur nom. Nous définissons chaque destination, ou « backend », dans la section « backends ».

Dans cet exemple, nous avons défini un seul backend, que nous avons appelé « localrepo » (tout comme les emplacements, les noms des backends doivent être définis en minuscules). En fixant la valeur de la clé de type à « local « , nous avons spécifié que le backend est un dépôt restic qui existe sur le système de fichiers local (comme nous le savons, restic supporte beaucoup de plates-formes de stockage ; parmi les autres : Backblaze, S3 et SFTP). Avec la clé de chemin, nous avons spécifié le chemin du dépôt restic, et, enfin, avec la clé, nous avons signalé le mot de passe du dépôt (mettre un mot de passe en clair dans un fichier de configuration peut être dangereux, nous verrons quelques alternatives à ce comportement plus tard).

Lancement d’une sauvegarde

Maintenant, si c’est la première fois que nous exécutons la sauvegarde, nous pouvons utiliser la commande autorestic check, pour être sûr que tout le monde est prêt. La commande initialisera automatiquement les backends définis pour nous, il n’est donc pas nécessaire de créer les dépôts restic au préalable :

sudo autorestic check

Pour démarrer la sauvegarde, nous pouvons maintenant utiliser la commande backup :

sudo autorestic backup -va

Ci-dessus, nous avons appelé autorestic avec l’option -v, pour le faire fonctionner en mode détaillé, et avec -a pour lui indiquer d’effectuer la sauvegarde de tous les emplacements existants. Dans le cas où nous avons défini plusieurs emplacements, et que nous voulons sauvegarder seulement un sous-ensemble d’entre eux, nous pouvons passer la liste de leurs noms séparés par des virgules en argument à l’option -l à la place, par exemple :

autorestic backup -v -l data

Spécification des options restic

Dans le fichier de configuration autorestic, nous pouvons spécifier les options que nous voulons passer à restic, pour chaque emplacement, ou globalement. Les options restic doivent être invoquées avec, sont fournies en tant que valeur de la clé d’options. Nous pouvons spécifier les options que nous voulons passer pour les commandes backup et forget, ou pour les deux, en utilisant respectivement les touches backup, forget et all. En voici un exemple. Supposons que nous voulions exclure tous les fichiers avec l’extension « .txt " lors de l’exécution d’une sauvegarde de l’emplacement « data ». Nous écririons :

version: 2
locations:
  data:
    from:
      - /data
    to: 
      - localrepo
    options:
      backup:
        exclude:
          - '*.txt'

backends:
  localrepo:
    type: local
    path: /mnt/restic_repo
    key: repositorypassword

La commande restic « forget », est utilisée pour supprimer les anciens instantanés d’un dépôt, selon la politique que nous spécifions avec les options --keep. Pour fournir ces options, nous les spécifions sous la touche oublier. Pour toujours conserver tous les 10 instantanés les plus récents et supprimer les plus anciens, par exemple, nous utiliserions --keep-last=10 :

version: 2
locations:
  data:
    from:
      - /data
    to: 
      - localrepo
    options:
      backup:
        exclude:
          - '*.txt'
      forget:
        keep-last: 10

backends:
  localrepo:
    type: local
    path: /mnt/restic_repo
    key: repositorypassword

Les options « forget » sont appliquées lorsque nous invoquons autorestic avec la commande forget :

autorestic forget -va

On peut configurer autorestic pour que la commande « forget » soit exécutée automatiquement après chaque sauvegarde, en utilisant la touche forget directement dans la définition de l’emplacement. La valeur de cette clé peut être définie à true si nous voulons simplement que les instantanés soient oubliés, ou à élaguer si nous voulons également supprimer du dépôt les données liées aux instantanés oubliés. En voici un exemple :

version: 2
locations:
  data:
    from:
      - /data
    to: 
      - localrepo
    forget: prune
    options:
      backup:
        exclude:
          - '*.txt'
      forget:
        keep-last: 10

backends:
  localrepo:
    type: local
    path: /mnt/restic_repo
    key: repositorypassword

Les options que nous avons définies dans le fichier de configuration jusqu’à présent ne sont valables que pour l’emplacement « data ». Si nous avons plusieurs emplacements, et que nous voulons appliquer certaines options à chacun d’entre eux, nous pouvons remplir la section globale, par exemple :

version: 2
global:
  backup:
    exclude:
      - '*.txt'
  forget:
    keep-last: 10

locations:
  data:
    from:
      - /data
    to: 
      - localrepo

backends:
  localrepo:
    type: local
    path: /mnt/restic_repo
    key: repositorypassword

Les options spécifiques à l’emplacement remplacent celles définies dans la section globale. Cette stratégie est utile si nous voulons simplement spécifier des exceptions.

Autres méthodes pour fournir un mot de passe backend

Dans les exemples précédents, nous avons directement spécifié le mot de passe du backend « localrepo » dans le fichier de configuration. Comme alternative, nous pouvons définir le mot de passe comme la valeur d’une variable d’environnement que nous pouvons définir lors du lancement d’autorestic, ou dans un fichier dédié appelé .autorestic.env, qui doit se trouver dans le même répertoire que le fichier de configuration. Pour que la variable soit automatiquement associée à un backend spécifique, nous la définissons à l’aide de la syntaxe suivante :

AUTORESTIC_<BACKEND-NAME>_<VARIABLE_NAME>

Ainsi, pour attribuer le mot de passe pour le backend « localrepo », nous écririons :

AUTORESTIC_LOCALREPO_RESTIC_PASSWORD="repositorypassword"

Nous pouvons également utiliser cette stratégie pour fournir des informations supplémentaires. Lorsque vous utilisez un backend Backblaze distant, par exemple, nous pouvons fournir à la fois l’identifiant de compte et la clé de compte. Supposons que nous définissions une sauvegarde appelée « backblaze », nous écririons :

AUTORESTIC_BACKBLAZE_B2_ACCOUNT_ID="123"
AUTORESTIC_BACKBLAZE_B2_ACCOUNT_KEY="456"

Une autre alternative consiste à utiliser l’option native restic --password-command. Avec cette option, nous pouvons fournir une commande qui doit renvoyer le mot de passe à stdout. Avec cette stratégie, par exemple, nous pouvons lire le mot de passe à partir d’un fichier externe, comme nous l’avons fait ci-dessous :

version: 2
locations:
  data:
    from:
      - /data
    to: 
      - localrepo
    options:
      all:
        password-command: cat /root/.password
      backup:
        exclude:
          - '*.txt'
      forget:
        keep-last: 10

backends:
  localrepo:
    type: local
    path: /mnt/restic_repo

Nous avons utilisé l’option dans la section « tous », afin qu’elle soit toujours passée, que nous exécutions la sauvegarde ou la commande oublier.

Crochets Autorestic

Autorestic nous permet d’exécuter des commandes personnalisées à des moments spécifiques, en utilisant les crochets suivants :

  • Prévalider
  • avant
  • après
  • échec
  • succès

Le hook de prévalidation est exécuté avant tout le reste, avant même que les différentes vérifications ne soient exécutées (vérifications autorestiques si des répertoires sources associés à un emplacement existent, par exemple) ; le hook before, en revanche, est exécuté après les vérifications, mais avant le lancement de la sauvegarde. Le hook after est toujours exécuté une fois la sauvegarde terminée, indépendamment de l’état de sortie (il est plutôt ignoré si la sauvegarde ne peut pas être démarrée du tout, en raison d’erreurs dans les hooks « prevalid » ou « before »). Enfin, les commandes associées aux hooks d’échec et de succès sont appelées après l’exécution réussie de la sauvegarde ou après son échec, respectivement.

Dans l’exemple ci-dessous, nous envoyons une notification push à l’aide du service ntfy.sh si la sauvegarde est réussie :

version: 2
locations:
  data:
    from:
      - /data
    to: 
      - localrepo
    options:
      all:
        password-command: cat /root/.password
      backup:
        exclude:
          - '*.txt'
      forget:
        keep-last: 10
    hooks:
      success:
        - curl -d "backup executed succesfully!" ntfy.sh/lxcfg

backends:
  localrepo:
    type: local
    path: /mnt/restic_repo

Lors d’un hook, nous pouvons accéder à des informations supplémentaires stockées dans certaines variables prédéfinies. En voici quelques exemples :

  • IDENTIFIANT_SNAPSHOT_AUTORESTIQUE
  • ID_DE_SNAPSHOT_PARENT_AUTORESTIQUE
  • FICHIERS_AUTORESTIQUES_AJOUTÉS
  • FICHIERS_AUTORESTIQUES_MODIFIÉS
  • FICHIERS_AUTORESTIQUES_NON_MODIFIÉS
  • EMPLACEMENT_AUTORESTIQUE

Conclusions

Dans ce tutoriel, nous avons vu comment orchestrer et organiser les sauvegardes Restic avec le wrapper autoresti. Autorestic nous a permis de sauvegarder plusieurs emplacements sur plusieurs backends en créant et en remplissant un fichier de configuration yaml. Nous avons vu comment installer autorestic sur les distributions Linux les plus utilisées, et comment configurer les emplacements et les backends. Nous avons également appris à lancer une sauvegarde et à attacher des commandes personnalisées aux hooks fournis par autorestic. Pour en savoir plus sur autorestic, vous pouvez consulter la documentation officielle.

Articles connexes: