Use Borg to backup files or databases. Deploy with Jenkins + Ansible.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Vladimir Smagin c37bd26fe3 add postgresql support 6 months ago
docker add postgresql support 6 months ago
host_vars import 6 months ago
roles/crontab/tasks import 6 months ago
Dockerfile add postgresql support 6 months ago
Jenkinsfile import 6 months ago
ansible.cfg import 6 months ago
borg.yml import 6 months ago
inventory.ini import 6 months ago
readme.md import 6 months ago

readme.md

Borg backups

Условия:

  • На всех целевых серверах есть ключ superkey, сохраненный в Jenkins, чтобы плейбук Ansible мог получить доступ к crontab. Не обязательно чтобы он был root, достаточно пользователя с необходимыми правами доступа к файлам или БД.
  • На сервере бэкапов должен быть прописан docker/borg.pub в authorized_keys, а закрытый ключ вшивается прямо в образ. Это легко переделывается под ваши нужды безопасности.

Релиз нового образа Borg

Чтобы выпустить новый образ нужно внести все необходимые изменения в Dockerfile, в скрипты внутри директории docker и другие зависимости, закоммитить, а затем повесить тег на последний коммит с новым тегом образа. За тег образа принимается: “<текущая версия borg>-<модификатор>”. Модификатор определяется эмпирически, например, 1.1.10-12.

Создание новых бэкапов

  • На бэкапном сервере:
    • подгрузить ssh ключ eval `ssh-agent` && ssh-add /root/.ssh/borg.pem
    • инициализировать новое хранилище borg init -e none borg@backups.blindage.org:wordpress-mysql
    • проверить что оно создалось borg list borg@backups.blindage.org:wordpress-mysql
    • выгрузить ssh ключ eval `ssh-agent -k`
  • Добавить на целевой сервер ключ superkey чтобы Ansible мог добавить все новые кроны
  • Добавить целевой сервер в инвентарь inventory.ini
  • Создать в host_vars одноименный с новым хостом файл с описанием крона
  • Закоммитить и собрать в дженкинсе, дженкинс сам раскатает все по серверам, запустив плейбук.

Вытаскивание бэкапа

  • На бэкапном или целевом сервере должен быть ключ borg.pem, смотря где нужно вынуть бэкап
  • подгрузить ssh ключ eval `ssh-agent` && ssh-add /root/.ssh/borg.pem
  • Посмотреть список файлов borg list wordpress-mysql::files-2020-02-10_22:01:26
  • Выкачать файл в текущую директорию borg extract wordpress-mysql::files-2020-02-10_22:01:26 tmp/mysql.blindage.org-wordpress.sql
  • выгрузить ssh ключ eval `ssh-agent -k`

Примеры кронов

crontab_tasks:
  # дамп БД в файл и резервная копия файла
  wordpress-mysql:  { job: "docker run --rm -e DBHOST=mysql.blindage.org -e DBUSER=myuser -e DBPASS=WAhquSXJY -e DBPORT=3306 -e DBNAME=wordpress registry.blindage.org/borg:1.1.10 /usr/bin/borg_backup_mysql.sh 'wordpress-mysql'", minute: "59", hour: "23" }
  # резервная копия файлов
  vault:  { job: "docker run --rm -v /srv/vault:/srv/vault registry.blindage.org/borg:1.1.10 /usr/bin/borg_backup_files.sh 'vault' '/srv/vault'", minute: "59", hour: "23" }