restic

Ansible Роль: restic

Бета: Эта роль находится на бета-стадии.

лицензия Ansible Galaxy

Описание

Restic — это универсальное решение для резервного копирования на основе Go, поддерживающее множество хранилищ, дедупликацию и инкрементные резервные копии.

Эта роль устанавливает restic на клиенте, настраивает репозитории для резервного копирования и при необходимости устанавливает таймер systemd или cron для выполнения резервного копирования. Кроме того, она создает исполняемые скрипты для ручного запуска резервного копирования.

Этот проект заимствовал много идей из donat-b/ansible-restic и https://github.com/arillso/ansible.restic. Мы стараемся сделать эту роль более понятной и современной, используя таймер systemd, /etc/crontab для определения путей резервного копирования, больше абсолютных путей и меньше параметров. (не тестировалось для S3 Storage или Windows...)

Скрипты резервного копирования

Эта роль создаст скрипт резервного копирования и файл с учетными данными, которые можно использовать с командой source в Linux для каждого резервного копирования в restic_script_dir. Эти исполняемые скрипты можно использовать для ручного запуска резервного копирования, но они также используются для автоматизированных резервных копий, если вы установите переменную restic_create_schedule в true. Убедитесь, что вы не изменяете файлы вручную, так как это может нарушить процесс резервного копирования.

В Linux, если вы хотите сделать ручной снимок, вы можете запустить резервное копирование так:

$ /path/to/backup/script/backup-example.sh

По умолчанию такой снимок будет иметь тег manual, чтобы вы могли отличить его от автоматически созданных снимков. Вы также можете добавить дополнительные теги, просто добавив их:

$ /path/to/backup/script/backup-example.sh --tag deployment

CRON / Запланированные задачи

Чтобы использовать определенные резервные копии, их можно автоматически установить как запланированные задачи. Вам нужно быть в курсе, что (по крайней мере, на системах Linux) вам нужны права администратора для настройки такого действия.

Если вы не можете использовать автоматическое создание задач, вы все равно можете использовать сгенерированные скрипты. Например, если вы находитесь на общем хостинге и можете задать cronjob через веб-интерфейс, просто добавьте каждый файл резервного копирования для выполнения. Убедитесь, что вы добавили CRON=true перед командой, чтобы указать, что снимок был создан через запланированную задачу:

CRON=true /path/to/backup/script/backup-example.sh

Установка

Существует несколько способов установки роли. Либо клонируйте или загрузите ее напрямую из репозитория github. Либо установите ее через ansible galaxy:

ansible-galaxy install roles-ansible.restic

Требования

  • bzip2

Переменные роли

Имя По умолчанию Описание
restic_url не определено URL для загрузки restic. Используйте эту переменную для переопределения значения по умолчанию
restic_version '0.15.1' Версия Restic для установки
restic_download_path '/opt/restic' Путь для загрузки исполняемого файла restic
restic_install_path '/usr/local/bin' Путь установки исполняемого файла restic
restic_script_dir '/opt/restic' Путь к созданным скриптам резервного копирования
restic_backup_script_shell sh Оболочка для выполнения скриптов резервного копирования
restic_log_dir '{{ restic_script_dir }}/log' Путь к логам скриптов резервного копирования
restic_repos {} Словарь репозиториев, где хранятся снимки. (Больше информации: Repos)
restic_backups {} (или []) Список словарей, specifying файлы и директории для резервного копирования (Больше информации: Backups)
restic_create_schedule false Нужно ли запланировать каждое резервное копирование? Либо через cronjob, либо через таймер systemd.
restic_backup_now false Нужно ли немедленно запустить скрипт резервного копирования
restic_schedule_type systemd Здесь вы можете определить, создаем ли мы cronjob или таймер systemd. Если создание таймера systemd не удалось, будет создан cronjob.
restic_dir_owner '{{ansible_user}}' Владелец всех созданных директорий
restic_dir_group '{{ansible_user}}' Группа всех созданных директорий
restic_no_log true Установите в false, чтобы видеть скрытые логи ansible
restic_do_not_cleanup_cron false Мы изменили местоположение cron и очищаем старое. Здесь можно пропустить очистку
restic__cache_config false Настройка пользовательского кэша
restic__cache_dir '~/.cache/restic' Определение пользовательского кэша
submodules_versioncheck false Если вы установите эту переменную в true, роль выполнит простую проверку версий, чтобы предотвратить использование устаревших версий этой роли.
restic__limit_cpu_usage false Нужно ли ограничить использование процессора?
restic__max_cpus 1 Максимальное количество процессоров, которые могут использоваться одновременно

Репозитории

Restic хранит данные в репозиториях. Вы должны указать как минимум один репозиторий, чтобы иметь возможность использовать эту роль. Репозиторий может быть локальным или удаленным (см. официальную документацию).

Использование репозитория SFTP

Для использования бэкенда SFTP пользователь должен иметь доступ без пароля к хосту. Убедитесь, что ключи ssh распространены соответствующим образом, так как это выходит за рамки данной роли.

Доступные переменные:

Имя Обязательно Описание
location да Местоположение бэкенда. В настоящее время поддерживаются Local, SFTP, S3, Azure Blob и B2
password да Пароль, используемый для защиты этого репозитория
init нет Описывает, должен ли репозиторий быть инициализирован или нет. Используйте false, если вы создаете резервную копию в уже существующий репозиторий.

Пример:

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
    # Только один из следующих параметров требуется
    azure_account_key: somekey
    azure_account_sas: sasurl
    # Опционально
    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

Резервное копирование

Резервное копирование указывает директорию или файл, который нужно сохранить. Резервная копия записывается в репозиторий, определенный в restic_repos.

Доступные переменные:

Имя Обязательно (По умолчанию) Описание
name да Название этой резервной копии. Используется вместе с обрезкой и расписанием и должно быть уникальным.
repo да Название репозитория, в который будет производиться резервное копирование.
src да (если stdin != true) Исходная директория или файл
stdin нет Создаётся ли эта резервная копия из stdin?
stdin_cmd нет (да, если stdin == true) Команда для генерации stdin.
stdin_filename нет Имя файла, используемое в репозитории.
pre_backup_cmd нет Команда для выполнения перед резервным копированием, обычно используется для выгрузки баз данных на диск.
tags нет Массив тегов по умолчанию
keep_last нет Если установлено, сохраняет только последние n снимков.
keep_hourly нет Если установлено, сохраняет только последние n часовых снимков.
keep_daily нет Если установлено, сохраняет только последние n дневных снимков.
keep_weekly нет Если установлено, сохраняет только последние n недельных снимков.
keep_monthly нет Если установлено, сохраняет только последние n месячных снимков.
keep_yearly нет Если установлено, сохраняет только последние n годовых снимков.
keep_within нет Если установлено, сохраняет снимки в этот период времени.
keep_tag нет Если установлено, сохраняет снимки с этими тегами. Убедитесь, что вы указали список.
prune нет (false) Если true, в скрипте к команде restic forget добавляется опция --prune.
scheduled нет (false) Если restic_create_schedule установлено в true, это резервное копирование запланировано и пытается создать единицу времени systemd. Если не удается, будет создан cronjob.
schedule_oncalendar '*-*-* 02:00:00' Время для таймера systemd. Обратите внимание на опцию randomDelaySec. По умолчанию резервное копирование выполняется каждую ночь в 2 часа (+0-4ч). Но только если запланировано.
schedule_minute нет (*) Минуты, когда выполняется задание. ( 0-59, *, */2 и т.д.)
schedule_hour нет (2) Часы, когда выполняется задание. ( 0-23, *, */2 и т.д.)
schedule_weekday нет (*) День недели, когда выполняется задание. ( 0-6 для воскресенья-субботы, *, и т.д.)
schedule_month нет (*) Месяц, когда выполняется задание. ( 1-12, *, */2 и т.д.)
exclude нет ({}) Позволяет указать файлы для исключения. См. Исключения для справки.
disable_logging нет Опционально отключить ведение логов
log_to_journald нет Опционально переключить ведение логов на journald с именем задания резервного копирования как тег
mail_on_error нет Опционально отправить письмо, если резервное копирование не удалось (требуется mailx)
mail_address если mail_on_error установлено в true Адрес электронной почты для получения писем, если вы включили mail_on_error.
monitoring_call нет Команда, которая будет вызвана, если резервное копирование будет успешным. Полезно для систем мониторинга, которые предупреждают, когда не получен никакой сигнал. Используйте полную команду, которую необходимо выполнить. Пример: curl https://monitoring.example.com/api/push/E9Wzm4lJ2O?status=up&msg=OK&ping=
niceness нет Если установлено, выполняет любое запланированное резервное копирование с заданным значением niceness. В Linux -20 - это самый высокий приоритет, 0 - по умолчанию, 19 - низкий приоритет. 10 - это общий низкий приоритет для рутин резервного копирования на производственных системах.

Пример:

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

Вы также можете указать restic_backups как массив, что является устаревшей функцией и может быть удалено в будущем. в настоящее время ключ name используется для наименования доступа и файлов резервного копирования.

Исключение

Ключ exclude в резервной копии позволяет вам указать несколько файлов для исключения или файлы, которые нужно искать для имен файлов, которые необходимо исключить. Вы можете указать следующие ключи:

exclude:
    exclude_caches: true
    exclude:
        - /path/to/file
    iexclude:
        - /path/to/file
    exclude_file:
        - /path/to/file
    exclude_if_present:
        - /path/to/file

Пожалуйста, обратитесь к использованию конкретных ключей в документации.

Зависимости

Эта роль не имеет других зависимостей от других ролей ansible.

Пример документа

- name: резервное копирование ваших домашних папок на /mnt/backup каждую ночь
  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'

Лицензия

Этот проект имеет лицензию MIT. См. файл LICENSE для полного текста лицензии.

О проекте

Ansible role to deploy restic and setup backups.

Установить
ansible-galaxy install roles-ansible/ansible_role_restic
Лицензия
mit
Загрузки
150125
Владелец
Ansible roles provide a framework for fully independent, or interdependent collections of variables,tasks,files,templates &modules. Here we maintain some. enjoy