l3d.restic

Ansible Rolle: restic

Beta: Diese Rolle ist im Beta-Stadium.

Lizenz Ansible Galaxy

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.

Über das Projekt

Ansible role to deploy restic and setup backups.

Installieren
ansible-galaxy install l3d.restic
Lizenz
mit
Downloads
247k
Besitzer
Ansible roles provide a framework for fully independent, or interdependent collections of variables,tasks,files,templates &modules. Here we maintain some. enjoy