l3d.restic

Ansible Rola: restic

Beta: Ta rola jest w fazie beta.

Opis

Restic to wszechstronne rozwiązanie do tworzenia kopii zapasowych oparte na Go, które obsługuje różne backendy, deduplikację i przyrostowe kopie zapasowe.

Ta rola instaluje restic na kliencie, konfiguruje repozytoria kopii zapasowych i opcjonalnie ustawia timer systemd lub zadania cron do uruchamiania kopii zapasowych. Dodatkowo, tworzy skrypty wykonywalne do ręcznego uruchamiania kopii zapasowej.

Ten projekt czerpał inspirację z donat-b/ansible-restic i https://github.com/arillso/ansible.restic roli ansible. Staramy się uczynić tę rolę bardziej zrozumiałą i nowoczesną, używając timera systemd, /etc/crontab do definiowania ścieżek kopii zapasowej, więcej absolutnych ścieżek i mniej opcji. (nie testowane dla przechowywania S3 lub Windows...)

Skrypty Kopii Zapasowej

Ta rola utworzy skrypt kopii zapasowej i plik z danymi logowania, które można użyć z komendą source w systemie Linux dla każdej kopii zapasowej w katalogu restic_script_dir. Te wykonywalne skrypty mogą być używane do ręcznego wywołania akcji kopii zapasowej, ale są także używane do automatycznych kopii zapasowych, jeśli zmienna restic_create_schedule jest ustawiona na true. Upewnij się, że nie zmieniasz plików ręcznie, ponieważ może to znacznie zakłócić twoje kopie zapasowe.

W systemie Linux, jeśli chcesz zrobić ręczny zrzut, możesz uruchomić kopię zapasową w ten sposób:

$ /ścieżka/do/skryptu/kopia-zapasowa-przykład.sh

Domyślnie taki zrzut będzie mieć tag manual, więc możesz je odróżnić od automatycznie utworzonych zrzutów. Możesz również dodać więcej tagów, po prostu je dołączając:

$ /ścieżka/do/skryptu/kopia-zapasowa-przykład.sh --tag deployment

ZADANIA CRON / Zaplanowane

Aby korzystać z zdefiniowanych kopii, można je automatycznie ustawić jako zadania zaplanowane. Musisz być świadomy tego, że (na systemach Linux przynajmniej) musisz mieć uprawnienia administratora do skonfigurowania takiej akcji.

Jeśli nie możesz użyć automatycznego tworzenia zadań, nadal możesz korzystać z wygenerowanych skryptów. Na przykład, jeśli jesteś na serwerze hostingu współdzielonego i możesz zdefiniować zadanie cron przez interfejs internetowy, po prostu dodaj każdy plik kopii do wykonania. Upewnij się, że przed poleceniem dodajesz CRON=true, aby zasugerować, że zrzut został utworzony za pośrednictwem zadania zaplanowanego:

CRON=true /ścieżka/do/skryptu/kopia-zapasowa-przykład.sh

Instalacja

Jest kilka sposobów na zainstalowanie roli. Możesz sklonować lub pobrać ją bezpośrednio z repozytorium github. Możesz także zainstalować ją za pośrednictwem ansible galaxy:

ansible-galaxy install roles-ansible.restic

Wymagania

  • bzip2

Zmienne Roli

Nazwa Domyślna Opis
restic_url undefined URL do pobrania restic. Użyj tej zmiennej, aby nadpisać domyślną
restic_version '0.15.1' Wersja Restic do zainstalowania
restic_download_path '/opt/restic' Miejsce pobrania binarnego restic
restic_install_path '/usr/local/bin' Miejsce instalacji binarnego restic
restic_script_dir '/opt/restic' Miejsce utworzonych skryptów kopii zapasowej
restic_backup_script_shell sh Powłoka do uruchamiania skryptu kopii zapasowej
restic_log_dir '{{ restic_script_dir }}/log' Miejsce logów skryptów kopii zapasowej
restic_repos {} Słownik repozytoriów, w których przechowywane są zrzuty. (Więcej informacji: Repozytoria)
restic_backups {} (lub []) Lista słowników określających pliki i katalogi do zrobienia kopii zapasowej (Więcej informacji: Kopie zapasowe)
restic_create_schedule false Czy mają być planowane każda kopia zapasowa? Albo przez zadania cron, albo przez timer systemd.
restic_backup_now false Czy skrypt kopii zapasowej powinien być uruchomiony natychmiast
restic_schedule_type systemd Tutaj możesz określić, czy tworzymy cronjob czy systemd timer. Jeśli nie uda się stworzyć timera systemd, utworzony zostanie cronjob.
restic_dir_owner '{{ansible_user}}' Właściciel wszystkich utworzonych katalogów
restic_dir_group '{{ansible_user}}' Grupa wszystkich utworzonych katalogów
restic_no_log true Ustaw na false, aby zobaczyć ukryte logi ansible
restic_do_not_cleanup_cron false Zmieniliśmy lokalizację cron i oczyściliśmy starą. Możesz pominąć czyszczenie tutaj
restic__cache_config false Skonfiguruj niestandardowy katalog pamięci podręcznej
restic__cache_dir '~/.cache/restic' Zdefiniuj niestandardowy katalog pamięci podręcznej
submodules_versioncheck false Jeśli ustawisz tę zmienną na true, rola będzie uruchamiać prosty sprawdzanie wersji, aby zapobiec uruchamianiu starszych wersji tej roli.
restic__limit_cpu_usage false Czy powinno być ograniczone użycie CPU?
restic__max_cpus 1 Maksymalna liczba CPU, które można używać jednocześnie

Repozytoria

Restic przechowuje dane w repozytoriach. Musisz określić co najmniej jedno repozytorium, aby móc używać tej roli. Repozytorium może być lokalne lub zdalne (patrz oficjalna dokumentacja).

Korzystając z repozytorium SFTP

Aby używać zaplecza SFTP, użytkownik musi mieć bezhasłowy dostęp do hosta. Upewnij się, że odpowiednio rozprowadziłeś klucze ssh, ponieważ to wykracza poza zakres tej roli.

Dostępne zmienne:

Nazwa Wymagana Opis
location tak Lokalizacja backendu. Obecnie wspierane są lokalne, SFTP, S3, Azure Blob i B2
password tak Hasło używane do zabezpieczenia tego repozytorium
init nie Opisuje, czy repozytorium powinno być zainicjowane, czy nie. Użyj false, jeśli tworzysz kopie zapasowe do już istniejącego repozytorium.

Przykład:

restic_repos:
  lokalne:
    location: /srv/restic-repo
    password: securepassword0
    init: true
  zdalne:
    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/nazwa_bucketu
    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: nazwa_konta_storage
    azure_account_key: somekey
    azure_account_sas: sasurl
    azure_endpoint_suffix: core.windows.net
  b2:
    location: b2:nazwa_bucketu:ścieżka/do/repo
    password: securepassword5
    init: true
    b2_account_id: accountid
    b2_account_key: accountkey

Kopie Zapasowe

Kopia zapasowa określa katalog lub plik do zrobienia kopii zapasowej. Kopia zapasowa jest zapisywana w repozytorium zdefiniowanym w restic_repos.

Dostępne zmienne:

Nazwa Wymagana (Domyślna) Opis
name tak Nazwa tej kopii zapasowej. Używane razem z usuwaniem i planowaniem. Musi być unikalne.
repo tak Nazwa repozytorium, do którego ma być wykonana kopia zapasowa.
src nie (chyba że stdin == true) Katalog lub plik źródłowy
stdin nie Czy ta kopia zapasowa jest tworzona z stdin?
stdin_cmd nie (tak, jeśli stdin == true) Komenda do produkcji danych stdin.
stdin_filename nie Nazwa pliku używana w repozytorium.
pre_backup_cmd nie Komenda do uruchomienia przed kopią zapasową, zazwyczaj używana do zrzucania baz danych na dysk
tags nie Tablica domyślnych tagów
keep_last nie Jeśli ustawione, zachowuje tylko ostatnie n zrzutów.
keep_hourly nie Jeśli ustawione, zachowuje tylko ostatnie n zrzutów godzinowych.
keep_daily nie Jeśli ustawione, zachowuje tylko ostatnie n zrzutów dziennych.
keep_weekly nie Jeśli ustawione, zachowuje tylko ostatnie n zrzutów tygodniowych.
keep_monthly nie Jeśli ustawione, zachowuje tylko ostatnie n zrzutów miesięcznych.
keep_yearly nie Jeśli ustawione, zachowuje tylko ostatnie n zrzutów rocznych.
keep_within nie Jeśli ustawione, zachowuje zrzuty w tym przedziale czasowym.
keep_tag nie Jeśli ustawione, zachowaj zrzuty z tymi tagami. Upewnij się, że określasz listę.
prune nie (false) Jeśli true, do skryptu dodawane jest polecenie restic forget z opcją --prune.
scheduled nie (false) Jeśli restic_create_schedule jest ustawione na true, ta kopia jest zaplanowana i próbuje utworzyć jednostkę timera systemd. Jeśli to się nie uda, tworzy cronjob.
schedule_oncalendar '*-*-* 02:00:00' Czas dla timera systemd. Proszę zwrócić uwagę na opcję randomDelaySec. Domyślnie kopia tworzona jest każdej nocy o 2 am (+0-4h). Ale tylko, jeśli zaplanowane jest prawdziwe.
schedule_minute nie (*) Minuta, kiedy zadanie jest uruchamiane. (0-59, *, */2, itd)
schedule_hour nie (2) Godzina, kiedy zadanie jest uruchamiane. (0-23, *, */2, itd)
schedule_weekday nie (*) Dzień tygodnia, kiedy zadanie jest uruchamiane. (0-6 dla Niedziela-Sobota, *, itd)
schedule_month nie (*) Miesiąc, kiedy zadanie jest uruchamiane. (1-12, *, */2, itd)
exclude nie ({}) Pozwala określić pliki do wykluczenia. Zobacz Wyklucz dla odniesienia.
disable_logging nie Opcjonalnie wyłącz logowanie
log_to_journald nie Opcjonalnie przełącz logowanie do journald z nazwą zadania jako tag
mail_on_error nie Opcjonalnie wyślij maila, jeśli zadanie kopii zapasowej się nie powiedzie (wymagany mailx)
mail_address jeśli mail_on_error jest prawdziwe Adres e-mail, na który mają być wysyłane maile, jeśli włączyłeś mail_on_error.
monitoring_call nie Komenda, która będzie wywoływana, jeśli kopia zapasowa jest sukcesem. Użyteczne dla systemów monitorujących, które ostrzegają, gdy nie otrzymano sygnału. Użyj pełnej komendy, którą musisz uruchomić. Przykład: curl https://monitoring.example.com/api/push/E9Wzm4lJ2O?status=up&msg=OK&ping=
niceness nie Jeśli ustawione, uruchamia każdą zaplanowaną kopię z podaną wartością nice. Na Linuxie -20 to najwyższy priorytet, 0 domyślny, a 19 to najniższy priorytet. 10 to typowy niski priorytet przypisywany procedurom kopii zapasowej w systemach produkcyjnych.

Przykład:

restic_backups:
  dane:
    name: dane
    repo: zdalne
    src: /path/to/data
    scheduled: true
    schedule_oncalendar: '*-*-* 01:00:00'
  baza_danych:
    name: baza_danych
    repo: zdalne
    stdin: true
    stdin_cmd: pg_dump -Ubackup nazwa_bazy
    stdin_filename: zrzut_bazy_danych.sql
    scheduled: true
    schedule_oncalendar: '*-*-* 01:30:00'
    niceness: 10
  wszystkie_bazy:
    name: wszystkie_bazy
    repo: zdalne
    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

Możesz również określić restic_backups jako tablicę, co jest funkcją przestarzałą i może być wycofana w przyszłości. obecnie, klucz name jest używany do nazwania dostępu i plików kopii zapasowej.

Wykluczenie

klucz exclude w kopii zapasowej pozwala określić wiele plików do wykluczenia lub plików, dla których można szukać nazw plików do wykluczenia. Możesz określić następujące klucze:

exclude:
    exclude_caches: true
    exclude:
        - /ścieżka/do/pliku
    iexclude:
        - /ścieżka/do/pliku
    exclude_file:
        - /ścieżka/do/pliku
    exclude_if_present:
        - /ścieżka/do/pliku

Proszę odwołać się do użycia konkretnych kluczy w dokumentacji.

Zależności

Ta rola nie ma innych ról ansible jako zależności.

Przykład Playbooka

- name: kopia zapasowa twoich folderów domowych do /mnt/backup codziennie w nocy
  hosts: localhost
  roles:
    - {role: do1jlr.restic, tags: restic}
  vars:
    restic_create_schedule: true
    restic_repos:
      lokalne:
        location: '/mnt/backup'
        password: 'ChangM3'
        init: true
    restic_backups:
      home:
        name: home
        repo: lokalne
        src: /home/
        scheduled: true
        schedule_oncalendar: '*-*-* 01:00:00'

Licencja

Ten projekt jest objęty licencją MIT. Zobacz plik LICENSE dla pełnego tekstu licencji.

O projekcie

Ansible role to deploy restic and setup backups.

Zainstaluj
ansible-galaxy install l3d.restic
Licencja
mit
Pobrania
247k
Właściciel
Ansible roles provide a framework for fully independent, or interdependent collections of variables,tasks,files,templates &modules. Here we maintain some. enjoy