l3d.restic
Ansible Rôle : restic
Bêta : Ce rôle est en statut bêta.
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.
ansible-galaxy install l3d.restic