Резервное копирование на Yandex Disk при помощи backupninja
Пару лет назад беспокойство о данных на личных VPS победило лень, и я озаботился исследованием простых способов резервного копирования. От программного обеспечения в первую очередь требовалось наличие в репозиториях Debian, а от сервиса хранения - достаточный объём и бесплатность. В итоге была выбрана связка backupninja + Yandex Disk.
backupninja это по сути упрощённый единый интерфейс командной строки к разнообразным утилитам резервного копирования. Написан целиком на bash.
Yandex Disk, думаю, в представлении не нуждается. Выбран был как первый сервис из испытанных, который вообще не создал проблем с использованием WebDAV. Сервисы выбирались из каталога 100 Free Online Backup Services.
Ниже будет описано, как небольшими усилиями настроить резервное копирование данных на сервер WebDav с применением шифрования и инкрементальных копий.
Установка backupninja
apt-get install backupninja duplicity
Настройки пакета по-умолчанию просто работают. Мне понадобилось исправить только
reportsuccess = no
чтобы не удалять каждый день по несколько писем о том, что всё хорошо.
Настройка резервной копии
Прежде всего требуется учётная запись в сервисах Яндекса. По-видимому в Яндексе лояльно относятся к использованию нескольких учёток, поэтому есть смысл завести отдельную для бэкапов, чтобы не трепать пароль от основной.
Настройки резервных копий хранятся в /etc/backup.d. Делать копию будем при помощи duplicity. Метод копирования определяется расширением файла с настройками, поэтому создадим файл /etc/backup.d/disk.yandex.ru.dup
testconnect = no
options = --ssl-cacert-file /etc/ssl/certs/ca-certificates.crt
[gpg]
password = gpg_password
[source]
include = /etc
include = /home
include = /srv
include = /var/backups
exclude = /home//.cache
[dest]
increments = 15
keep = 30
desturl = webdavs://yandex_account@webdav.yandex.ru/path/to/server/backups/
ftp_password = yandex_password
Коротко о настройках.
- testconnect = no
Используется только для соединений по ssh. Для WebDAV не используется и выдаёт об этом предупреждение, если не отключить.
- options = --ssl-cacert-file /etc/ssl/certs/ca-certificates.crt
Необходимо для подключения к WebDAV по HTTPS.
- password
Будет использован для шифрования файлов резервной копии.
- include / exclude
Задаёт список файлов, включенных в резервную копию.
- increments
Количество дней между полными копиями.
- keep
Количество дней, в течение которых будет храниться резервная копия.
- yandex_account / yandex_password
Данные учётной записи в Яндексе.
Подробное описание настроек duplicity можно прочитать в файле /usr/share/doc/backupninja/examples/example.dup.
Резервное копирование баз данных
backupninja сохраняет дампы баз данных на файловой системе. Чтобы сохранить дампы удалённо, нужно запланировать задание снятия дампа раньше задания копирования файлов. Например настройки полного копирования сервера PostgreSQL выглядят так:
databases = all
format = custom
when = everyday at 00
Дампы всех баз данных в 00:00 сохраняются в каталог /var/backup/postgres, после чего в 01:00 копируются на удалённый сервер.
Восстановление резервной копии
Сама по себе утилита backupninja не предназначена для восстановления данных. Способ восстановления зависит от выбранного способа резервного копирования. По-хорошему в пару к backupnunja нужно писать restoreninja.
Для облегчения работы с резервными копиями, сделанными duplicity как описано в этой статье, я предлагаю небольшой вспомогательный скрипт backupninja-dup. Например, команда восстановления данных из последней копии будет выглядеть так:
backupninja-dup disk.yandex.ru restore /tmp/restore