l3d.restic
Ansible Rolle: restic
Beta: Diese Rolle ist im Beta-Stadium.
Beschreibung
Restic ist eine vielseitige Backup-Lösung, die in Go entwickelt wurde. Sie unterstützt mehrere Backends, Daten-Deduplizierung und inkrementelle Backups.
Diese Rolle installiert restic auf einem Client, konfiguriert die Backup-Repositories und optionale systemd-Timer oder Cronjobs, um die Backups auszuführen. Zusätzlich werden ausführbare Skripte eingerichtet, um ein Backup manuell durchzuführen.
Dieses Projekt basiert stark auf den Rollen donat-b/ansible-restic und arillso/ansible.restic. Wir versuchen, diese Rolle einfach zu verstehen und modern zu gestalten, indem wir systemd-Timer und /etc/crontab zur Definition der Backup-Pfade verwenden, mehr absolute Pfade und weniger Optionen implementieren. (Nicht getestet für S3-Speicher oder Windows...)
Backup-Skripte
Diese Rolle erstellt ein Backup-Skript und eine Datei mit Anmeldedaten, die mit dem source
-Befehl unter Linux für jedes Backup im restic_script_dir
verwendet werden können. Diese ausführbaren Skripte können manuell verwendet werden, um eine Backup-Aktion auszulösen, werden aber auch für automatische Backups verwendet, wenn Sie die Variable restic_create_schedule
auf true setzen. Stellen Sie sicher, dass Sie die Dateien nicht manuell bearbeiten, da dies Ihre Backups stören kann.
Unter Linux können Sie ein manuelles Snapshot so ausführen:
$ /path/to/backup/script/backup-example.sh
Standardmäßig erhält ein solches Snapshot das Tag manual
, damit Sie es von automatisch erstellten Snapshots unterscheiden können. Sie können auch weitere Tags hinzufügen, indem Sie sie einfach anhängen:
$ /path/to/backup/script/backup-example.sh --tag deployment
CRON / Geplante Aufgaben
Um die definierten Backups zu nutzen, können sie automatisch als geplante Aufgaben eingerichtet werden. Sie müssen sich bewusst sein, dass (zumindest auf Linux-Systemen) Administratorrechte erforderlich sind, um eine solche Aktion zu konfigurieren.
Wenn Sie die automatische Erstellung der Aufgaben nicht nutzen können, können Sie dennoch die generierten Skripte verwenden. Wenn Sie beispielsweise auf einem Shared-Hosting-Server sind und einen Cronjob über eine Weboberfläche definieren können, fügen Sie einfach jede Backup-Datei hinzu, die ausgeführt werden soll. Achten Sie darauf, den Befehl mit CRON=true
zu beginnen, um anzuzeigen, dass das Snapshot über eine geplante Aufgabe erstellt wurde:
CRON=true /path/to/backup/script/backup-example.sh
Installation
Es gibt mehrere Möglichkeiten, die Rolle zu installieren. Entweder klonen oder laden Sie sie direkt aus dem GitHub-Repository herunter oder installieren Sie sie über Ansible Galaxy:
ansible-galaxy install roles-ansible.restic
Anforderungen
- bzip2
Rollenvariablen
Name | Standard | Beschreibung |
---|---|---|
restic_url |
undefined |
Die URL zum Herunterladen von restic. Verwenden Sie diese Variable, um die Standards zu überschreiben |
restic_version |
'0.15.1' |
Die Version von Restic, die installiert werden soll |
restic_download_path |
'/opt/restic' |
Download-Verzeichnis für die restic-Binärdatei |
restic_install_path |
'/usr/local/bin' |
Installationsverzeichnis für die restic-Binärdatei |
restic_script_dir |
'/opt/restic' |
Verzeichnis der generierten Backup-Skripte |
restic_backup_script_shell |
sh |
Shell, die für die Ausführung des Backup-Skripts verwendet wird |
restic_log_dir |
'{{ restic_script_dir }}/log' |
Verzeichnis der Protokolle der Backup-Skripte |
restic_repos |
{} |
Ein Wörterbuch von Repositories, in denen Snapshots gespeichert werden. (Weitere Informationen: Repos) |
restic_backups |
{} (oder [] ) |
Eine Liste von Wörterbüchern, die die Dateien und Verzeichnisse angeben, die gesichert werden sollen (Weitere Informationen: Backups) |
restic_create_schedule |
false |
Sollen wir jedes Backup planen? Entweder über Cronjob oder über systemd-Timer. |
restic_backup_now |
false |
Ob das Backup-Skript sofort ausgeführt werden soll |
restic_schedule_type |
systemd |
Hier können Sie definieren, ob wir einen cronjob oder einen systemd -Timer erstellen. Wenn die Erstellung eines systemd-Timers fehlschlägt, wird ein Cronjob erstellt. |
restic_dir_owner |
'{{ansible_user}}' |
Der Besitzer aller erstellten Verzeichnisse |
restic_dir_group |
'{{ansible_user}}' |
Die Gruppe aller erstellten Verzeichnisse |
restic_no_log |
true |
Auf false setzen, um versteckte Ansible-Protokolle zu sehen |
restic_do_not_cleanup_cron |
false |
Wir haben den Cron-Standort geändert und die alte Bereinigung entfernt. Hier können Sie die Bereinigung überspringen. |
restic__cache_config |
false |
Konfigurieren Sie das benutzerdefinierte Cache-Verzeichnis |
restic__cache_dir |
'~/.cache/restic' |
Definieren Sie das benutzerdefinierte Cache-Verzeichnis |
submodules_versioncheck |
false |
Wenn Sie diese Variable auf true setzen, wird die Rolle eine einfache Versionsüberprüfung durchführen, um zu verhindern, dass ältere Versionen dieser Rolle ausgeführt werden. |
restic__limit_cpu_usage |
false |
Soll die CPU-Nutzung begrenzt werden? |
restic__max_cpus |
1 |
Maximale Anzahl der CPUs, die gleichzeitig verwendet werden können |
Repos
Restic speichert Daten in Repositories. Sie müssen mindestens ein Repository angeben, um diese Rolle verwenden zu können. Ein Repository kann lokal oder remote sein (siehe die offizielle Dokumentation).
Verwendung eines SFTP-Repositorys
Zum Einsatz eines SFTP-Backends benötigt der Benutzer passwortlosen Zugriff auf den Host. Bitte stellen Sie sicher, dass Sie die SSH-Schlüssel entsprechend verteilen, da dies außerhalb des Geltungsbereichs dieser Rolle liegt.
Verfügbare Variablen:
Name | Erforderlich | Beschreibung |
---|---|---|
location |
ja | Der Standort des Backends. Derzeit werden Local, SFTP, S3, Azure Blob und B2 unterstützt. |
password |
ja | Das Passwort, das zur Sicherung dieses Repositories verwendet wird |
init |
nein | Beschreibt, ob das Repository initialisiert werden soll oder nicht. Verwenden Sie false , wenn Sie in ein bereits vorhandenes Repo sichern. |
Beispiel:
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
# Nur einer der folgenden ist erforderlich
azure_account_key: somekey
azure_account_sas: sasurl
# Optional
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
Backups
Ein Backup legt ein Verzeichnis oder eine Datei fest, die gesichert werden soll. Ein Backup wird in einem Repository gespeichert, das in restic_repos
definiert ist.
Verfügbare Variablen:
Name | Erforderlich (Standard) | Beschreibung |
---|---|---|
name |
ja | Der Name dieses Backups. Wird zusammen mit der Pruning- und Zeitplanung verwendet und muss eindeutig sein. |
repo |
ja | Der Name des Repositories, in das gesichert werden soll. |
src |
ja (es sei denn, stdin == true ) |
Das Quellverzeichnis oder die Datei |
stdin |
nein | Wird dieses Backup aus einem stdin erstellt? |
stdin_cmd |
nein (ja, wenn stdin == true ) |
Der Befehl, um das stdin zu erzeugen. |
stdin_filename |
nein | Der Dateiname, der im Repository verwendet wird. |
pre_backup_cmd |
nein | Ein Befehl, der vor dem Backup ausgeführt wird, typischerweise um Datenbanken auf die Festplatte zu sichern |
tags |
nein | Array von Standard-Tags |
keep_last |
nein | Wenn festgelegt, werden nur die letzten n Snapshots aufbewahrt. |
keep_hourly |
nein | Wenn festgelegt, werden nur die letzten n stündlichen Snapshots aufbewahrt. |
keep_daily |
nein | Wenn festgelegt, werden nur die letzten n täglichen Snapshots aufbewahrt. |
keep_weekly |
nein | Wenn festgelegt, werden nur die letzten n wöchentlichen Snapshots aufbewahrt. |
keep_monthly |
nein | Wenn festgelegt, werden nur die letzten n monatlichen Snapshots aufbewahrt. |
keep_yearly |
nein | Wenn festgelegt, werden nur die letzten n jährlichen Snapshots aufbewahrt. |
keep_within |
nein | Wenn festgelegt, werden Snapshots nur in diesem Zeitraum aufbewahrt. |
keep_tag |
nein | Wenn festgelegt, Snapshots mit diesen Tags aufbewahren. Stellen Sie sicher, dass Sie eine Liste angeben. |
prune |
nein (false ) |
Wenn true , wird der Befehl restic forget im Skript mit der --prune -Option angefügt. |
scheduled |
nein (false ) |
Wenn restic_create_schedule auf true gesetzt ist, wird dieses Backup geplant und versucht, eine systemd-Timer-Einheit zu erstellen. Wenn dies fehlschlägt, wird ein Cronjob erstellt. |
schedule_oncalendar |
'*-*-* 02:00:00' |
Die Zeit für den systemd-Timer. Bitte beachten Sie die Option randomDelaySec. Standardmäßig wird das Backup jede Nacht um 2 Uhr (+0-4h) durchgeführt. Aber nur, wenn es geplant ist. |
schedule_minute |
nein (* ) |
Minute, zu der der Job ausgeführt wird. ( 0-59, *, */2, etc ) |
schedule_hour |
nein (2 ) |
Stunde, zu der der Job ausgeführt wird. ( 0-23, *, */2, etc ) |
schedule_weekday |
nein (* ) |
Wochentag, an dem der Job ausgeführt wird. ( 0-6 für Sonntag-Samstag, *, etc ) |
schedule_month |
nein (* ) |
Monat, in dem der Job ausgeführt wird. ( 1-12, *, */2, etc ) |
exclude |
nein ({} ) |
Ermöglicht die Angabe von Dateien, die ausgeschlossen werden sollen. Siehe Exclude zur Referenz. |
disable_logging |
nein | Protokollierung optional deaktivieren |
log_to_journald |
nein | Protokollierung optional auf journald mit dem Namen des Backup-Jobs als Tag umschalten |
mail_on_error |
nein | Optional eine E-Mail senden, wenn der Backup-Job fehlschlägt (mailx ist erforderlich) |
mail_address |
falls mail_on_error wahr ist |
Die E-Mail-Adresse, um E-Mails zu empfangen, wenn Sie mail_on_error aktiviert haben. |
monitoring_call |
nein | Ein Befehl, der aufgerufen wird, wenn das Backup erfolgreich ist. Nützlich für Überwachungssysteme, die warnen, wenn kein Herzschlag empfangen wird. Verwenden Sie den vollständigen Befehl, den Sie ausführen müssen. Beispiel: curl https://monitoring.example.com/api/push/E9Wzm4lJ2O?status=up&msg=OK&ping= |
niceness |
nein | Wenn festgelegt, wird jedes geplante Backup mit dem angegebenen Niceness-Wert ausgeführt. Unter Linux ist -20 die höchste Priorität, 0 der Standard und 19 die niedrigste Priorität. 10 ist eine übliche niedrige Priorität, die Backup-Routinen auf Produktionssystemen zugewiesen wird. |
Beispiel:
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
Sie können auch
restic_backups
als Array angeben, was ein veraltetes Merkmal ist und in Zukunft möglicherweise nicht mehr unterstützt wird. Derzeit wird der Name-Schlüssel verwendet, um den Zugriff und die Backup-Dateien zu benennen.
Ausschließen
Der exclude
-Schlüssel bei einem Backup ermöglicht es Ihnen, mehrere Dateien anzugeben, die ausgeschlossen oder nach Dateinamen gesucht werden sollen, um ausgeschlossen zu werden. Sie können die folgenden Schlüssel angeben:
exclude:
exclude_caches: true
exclude:
- /path/to/file
iexclude:
- /path/to/file
exclude_file:
- /path/to/file
exclude_if_present:
- /path/to/file
Bitte beziehen Sie sich auf die Verwendung der spezifischen Schlüssel in der Dokumentation.
Abhängigkeiten
Diese Rolle hat keine anderen Ansible-Rollen als Abhängigkeiten.
Beispiel-Playbook
- name: Sichern Sie Ihre Home-Verzeichnisse nach /mnt/backup jede Nacht
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'
Lizenz
Dieses Projekt steht unter der MIT-Lizenz. Siehe die LICENSE Datei für den vollständigen Lizenztext.
ansible-galaxy install l3d.restic