l3d.restic

Ansible Rôle : restic

Bêta : Ce rôle est en statut bêta.

licence Ansible Galaxy

Description

Restic est une solution de sauvegarde polyvalente basée sur Go, qui prend en charge plusieurs systèmes de stockage, la déduplication et les sauvegardes incrémentielles.

Ce rôle installe restic sur un client, configure les dépôts de sauvegarde et, en option, configure un timer systemd ou des cronjobs pour exécuter les sauvegardes. De plus, il met en place des scripts exécutables pour effectuer une sauvegarde manuellement.

Ce projet s'inspire fortement de donat-b/ansible-restic et https://github.com/arillso/ansible.restic. Nous essayons de rendre ce rôle plus facile à comprendre et moderne en utilisant un timer systemd, /etc/crontab pour définir les chemins de sauvegarde, des chemins plus absolus et moins d'options. (non testé pour le stockage S3 ou Windows...)

Scripts de sauvegarde

Ce rôle créera un script de sauvegarde et un fichier avec des identifiants que vous pourrez utiliser avec la commande source sur Linux pour chaque sauvegarde dans le répertoire restic_script_dir. Ces scripts exécutables peuvent être utilisés pour déclencher manuellement une action de sauvegarde, mais sont également utilisés pour des sauvegardes automatisées si vous avez défini la variable restic_create_schedule sur true. Assurez-vous de ne pas modifier les fichiers manuellement, car cela peut interférer avec vos sauvegardes.

Sous Linux, si vous souhaitez effectuer un instantané manuel, vous pouvez exécuter la sauvegarde ainsi :

$ /path/to/backup/script/backup-example.sh

Par défaut, un tel instantané sera donné le tag manual, vous permettant de les distinguer des instantanés créés automatiquement. Vous pouvez également ajouter d'autres tags en les ajoutant simplement :

$ /path/to/backup/script/backup-example.sh --tag deployment

CRON / Tâches programmées

Pour utiliser les sauvegardes définies, elles peuvent être configurées automatiquement comme des tâches programmées. Vous devez être conscient du fait que (sur les systèmes Linux au moins) vous devez avoir des permissions d'administrateur pour configurer une telle action.

Si vous ne pouvez pas utiliser la création automatique des tâches, vous pouvez toujours utiliser les scripts générés. Si vous êtes, par exemple, sur un serveur d'hébergement partagé et que vous pouvez définir une cronjob via une interface web, ajoutez simplement chaque fichier de sauvegarde à exécuter. Assurez-vous de préfixer la commande avec CRON=true pour indiquer que l'instantané a été créé via une tâche programmée :

CRON=true /path/to/backup/script/backup-example.sh

Installation

Il existe plusieurs façons d'installer le rôle. Soit vous le clonez ou le téléchargez directement depuis le dépôt GitHub. Ou installez-le via ansible galaxy :

ansible-galaxy install roles-ansible.restic

Exigences

  • bzip2

Variables du rôle

Nom Par défaut Description
restic_url undefined L'URL pour télécharger restic. Utilisez cette variable pour remplacer le défaut
restic_version '0.15.1' La version de Restic à installer
restic_download_path '/opt/restic' Emplacement de téléchargement pour le binaire restic
restic_install_path '/usr/local/bin' Emplacement d'installation pour le binaire restic
restic_script_dir '/opt/restic' Emplacement des scripts de sauvegarde générés
restic_backup_script_shell sh Shell à utiliser pour l'exécution du script de sauvegarde
restic_log_dir '{{ restic_script_dir }}/log' Emplacement des journaux des scripts de sauvegarde
restic_repos {} Un dictionnaire de dépôts où les instantanés sont stockés. (Plus d'infos : Repos)
restic_backups {} (ou []) Une liste de dictionnaires spécifiant les fichiers et répertoires à sauvegarder (Plus d'infos : Backups)
restic_create_schedule false Devons-nous programmer chaque sauvegarde ? Soit via cronjob soit via timer systemd.
restic_backup_now false Le script de sauvegarde doit-il être exécuté immédiatement ?
restic_schedule_type systemd Ici, vous pouvez définir si nous créons un cronjob ou un systemd timer. Si cela échoue, un cronjob sera créé.
restic_dir_owner '{{ansible_user}}' Le propriétaire de tous les répertoires créés
restic_dir_group '{{ansible_user}}' Le groupe de tous les répertoires créés
restic_no_log true Réglez sur false pour voir les journaux ansible cachés
restic_do_not_cleanup_cron false Nous avons changé l'emplacement du cron et nettoyé l'ancien. Vous pouvez ignorer le nettoyage ici
restic__cache_config false Configurer un répertoire de cache personnalisé
restic__cache_dir '~/.cache/restic' Définir un répertoire de cache personnalisé
submodules_versioncheck false Si vous réglez cette variable sur true, le rôle exécutera un contrôle de version simple pour éviter d'exécuter des versions plus anciennes de ce rôle.
restic__limit_cpu_usage false L'utilisation du CPU doit-elle être limitée ?
restic__max_cpus 1 Nombre maximum de CPU pouvant être utilisés simultanément

Repos

Restic stocke les données dans des dépôts. Vous devez spécifier au moins un dépôt pour pouvoir utiliser ce rôle. Un dépôt peut être local ou distant (voir la documentation officielle).

Utilisation d'un dépôt SFTP

Pour utiliser un backend SFTP, l'utilisateur doit avoir un accès sans mot de passe à l'hôte. Veuillez vous assurer de distribuer les clés SSH en conséquence, car cela est en dehors du cadre de ce rôle.

Variables disponibles :

Nom Requis Description
location oui L'emplacement du backend. Actuellement, Local, SFTP, S3, Azure Blob et B2 sont pris en charge
password oui Le mot de passe utilisé pour sécuriser ce dépôt
init non Indique si le dépôt doit être initialisé ou non. Utilisez false si vous sauvegardez dans un dépôt existant.

Exemple :

restic_repos:
  local:
    location: /srv/restic-repo
    password: securepassword0
    init: true
  remote:
    location: rest:https://restic_rest_server.example.com:8000/restic-repo/
    password: securepassword1
    init: true
  sftp:
    location: sftp:user@host:/srv/restic-repo
    password: securepassword2
    init: true
  aws:
    location: s3:s3.amazonaws.com/bucket_name
    password: securepassword3
    init: true
    aws_access_key: accesskey
    aws_secret_access_key: secretaccesskey
    aws_default_region: eu-west-1
  azure:
    location: azure:container:/
    password: securepassword4
    init: true
    azure_account_name: storageaccountname
    # Un seul des éléments suivants est requis
    azure_account_key: somekey
    azure_account_sas: sasurl
    # Optionnel
    azure_endpoint_suffix: core.windows.net
  b2:
    location: b2:bucketname:path/to/repo
    password: securepassword5
    init: true
    b2_account_id: accountid
    b2_account_key: accountkey

Sauvegardes

Une sauvegarde spécifie un répertoire ou un fichier à sauvegarder. Une sauvegarde est écrite dans un dépôt défini dans restic_repos.

Variables disponibles :

Nom Requis (Défaut) Description
name oui Le nom de cette sauvegarde. Utilisé en combinaison avec le pruning et la planification, et doit être unique.
repo oui Le nom du dépôt vers lequel sauvegarder.
src oui (sauf si stdin == true) Le répertoire ou le fichier source
stdin non Cette sauvegarde est-elle créée à partir d'un stdin ?
stdin_cmd non (oui si stdin == true) La commande pour produire le stdin.
stdin_filename non Le nom de fichier utilisé dans le dépôt.
pre_backup_cmd non Une commande à exécuter avant la sauvegarde, généralement utilisée pour sauvegarder des bases de données sur disque
tags non Tableau de tags par défaut
keep_last non Si défini, garde uniquement les dernières n instantanés.
keep_hourly non Si défini, ne garde que les dernières n instantanés horaires.
keep_daily non Si défini, ne garde que les dernières n instantanés quotidiens.
keep_weekly non Si défini, ne garde que les dernières n instantanés hebdomadaires.
keep_monthly non Si défini, ne garde que les dernières n instantanés mensuels.
keep_yearly non Si défini, ne garde que les dernières n instantanés annuels.
keep_within non Si défini, ne garde que les instantanés dans cette période de temps.
keep_tag non Si défini, garde les instantanés avec ces tags. Veuillez spécifier une liste.
prune non (false) Si true, la commande restic forget dans le script a l'option --prune ajoutée.
scheduled non (false) Si restic_create_schedule est défini sur true, cette sauvegarde est programmée et essaie de créer une unité de timer systemd. Si cela échoue, un cronjob est créé.
schedule_oncalendar '*-*-* 02:00:00' L'heure pour le timer systemd. Veuillez noter l'option randomDelaySec. Par défaut, la sauvegarde est effectuée chaque nuit à 2 heures (±0-4h). Mais seulement si programmé est vrai.
schedule_minute non (*) Minute où le travail est exécuté. ( 0-59, *, */2, etc )
schedule_hour non (2) Heure où le travail est exécuté. ( 0-23, *, */2, etc )
schedule_weekday non (*) Jour de la semaine où le travail est exécuté. ( 0-6 pour dimanche-samedi, *, etc )
schedule_month non (*) Mois où le travail est exécuté. ( 1-12, *, */2, etc )
exclude non ({}) Vous permet de spécifier des fichiers à exclure. Voir Exclude pour référence.
disable_logging non Désactiver optionnellement le journalisation
log_to_journald non Passer optionnellement la journalisation à journald avec le nom du travail de sauvegarde comme tag
mail_on_error non Envoyer optionnellement un mail si le travail de sauvegarde échoue (mailx est requis)
mail_address si mail_on_error est vrai L'adresse mail pour recevoir des mails si vous avez activé mail_on_error.
monitoring_call non Une commande qui sera appelée si la sauvegarde est réussie. Utile pour les systèmes de surveillance des cœurs qui préviennent lorsque aucun battement de cœur n'est reçu. Utilisez la commande complète que vous devez exécuter. Exemple : curl https://monitoring.example.com/api/push/E9Wzm4lJ2O?status=up&msg=OK&ping=
niceness non Si défini, exécute toute sauvegarde programmée avec la valeur de niceness. Sur Linux, -20 est la plus haute priorité, 0 par défaut et 19 la plus basse. 10 est une priorité faible couramment attribuée aux routines de sauvegarde sur les systèmes de production.

Exemple :

restic_backups:
  data:
    name: data
    repo: remote
    src: /path/to/data
    scheduled: true
    schedule_oncalendar: '*-*-* 01:00:00'
  database:
    name: database
    repo: remote
    stdin: true
    stdin_cmd: pg_dump -Ubackup db_name
    stdin_filename: db_name_dump.sql
    scheduled: true
    schedule_oncalendar: '*-*-* 01:30:00'
    niceness: 10
  all_databases:
    name: all_databases
    repo: remote
    src: /var/dumped_data
    scheduled: true
    schedule_oncalendar: '*-*-* 02:00:00'
    pre_backup_cmd: cd /var/dumped_data && mariadb -N -e 'show databases' | while read dbname; do mariadb-dump --complete-insert --routines --triggers --single-transaction "$dbname" > "$dbname".sql; done

Vous pouvez également spécifier restic_backups comme un tableau, ce qui est une fonctionnalité héritée et pourrait être obsolète à l'avenir. Actuellement, la clé nom est utilisée pour nommer les fichiers d'accès et de sauvegarde.

Exclure

La clé exclude sur une sauvegarde vous permet de spécifier plusieurs fichiers à exclure ou des fichiers à rechercher pour des noms à exclure. Vous pouvez spécifier les clés suivantes :

exclude:
    exclude_caches: true
    exclude:
        - /path/to/file
    iexclude:
        - /path/to/file
    exclude_file:
        - /path/to/file
    exclude_if_present:
        - /path/to/file

Veuillez vous référer à l'utilisation des clés spécifiques dans la documentation.

Dépendances

Ce rôle n'a pas d'autres rôles ansible comme dépendance.

Exemple de Playbook

- name: sauvegarder vos dossiers personnels vers /mnt/backup chaque nuit
  hosts: localhost
  roles:
    - {role: do1jlr.restic, tags: restic}
  vars:
    restic_create_schedule: true
    restic_repos:
      local:
        location: '/mnt/backup'
        password: 'ChangM3'
        init: true
    restic_backups:
      home:
        name: home
        repo: local
        src: /home/
        scheduled: true
        schedule_oncalendar: '*-*-* 01:00:00'

Licence

Ce projet est sous la licence MIT. Voir le fichier LICENSE pour le texte complet de la licence.

À propos du projet

Ansible role to deploy restic and setup backups.

Installer
ansible-galaxy install l3d.restic
Licence
mit
Téléchargements
247k
Propriétaire
Ansible roles provide a framework for fully independent, or interdependent collections of variables,tasks,files,templates &modules. Here we maintain some. enjoy