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.
ansible-galaxy install l3d.restic