Резервное копирование YunoHost с помощью Borg
Инструкция предполагает что вы умеете работать в консоли Linux,
выполнять файловые операции, а также знакомы с протоколом ssh и
основами сетевого взаимодействия
Задача
Не допустить потери пользовательских данных при возникновении проблем с сервером, на котором они хранятся.
Определения
- Сервер - система, которая будет хранить бэкапы. Для примера возьмём за адрес сервера mystorage.space
- Клиент - система с работающим YunoHost, с которого будут сниматься резервные копии. Например myhosting.space
Предварительные условия
- Сервер, на котором будем хранить бэкапы
- Возможность стабильного доступа к этому серверу по ip или доменному имени (напрямую или через сетевое устройство с белым IP)
- Права рута для установки и настройки Борг-сервера и доступа ssh для Борг-клиента
В качестве хранилища бэкапов у меня используется Synology, поэтому в
части руководства будет описана специфика его настройки.
Настройка
Настройка сервера бэкапов
Установка Borg
В общем случае Borg присутствует практически во всех популярных дистрибутивах. Информацию по установке можно получить на этой странице.
В случае с Synology, Borg можно установить через Центр пакетов, найдя его через поиск в разделе Сообщество. После установки в интерфейсе пользователя ничего не появится т.к. это консольная утилита. При установке необходимо будет ввести пароль для дешифровки бэкапов - этот пароль нужно сохранить в надёжное место!
Подготовка пользователя
Необходимо создать пользователя и группу, а так же директорию для ключа. Пользователя и группу, можно к примеру назвать borg-backup. После создания, необходимо соответственно включить пользователя в группу.
В Synology управление пользователями и группами производится через веб-интерфейс, в Панели управления. Созданного пользователя необходимо добавить в группу administrators, иначе доступ по ssh работать не будет.
Далее необходимо создать каталоги и выдать на них права. Обычно каталог пользователя располагается по адресу /home/, но у Synology немного другая структура, команды ниже приведены для него:
# mkdir -p /var/services/homes/borg-backup/.ssh
# touch /var/services/homes/borg-backup/.ssh/authorized_keys
# chown -R borg-backup:borg-backup /var/services/homes/borg-backup
# chmod -R 0700 /var/services/homes/borg-backup
Настройка клиента
Установка Borg
Установка происходит через веб-интерфейс, также, как и для других пакетов YunoHost. Для того чтобы через поиск можно было найти Borg, в фильтре справа от поисковой строки необходимо выбрать пункт "все приложения".
В процессе установки необходимо ввести адрес Сервера и каталог для бэкапов.
Для удобства в качестве каталога назначения можно указать адрес сервера, с которого снимается бэкап. Вместо доменного имени можно использовать IP, порт также не обязательно должен быть 22, если например у вас настроен проброс порта с маршрутизатора на Сервер.
ssh://borg-backup@mystorage.space:22/~/myhosting.space
Настройка и проверка доступа по ssh
После установки Borg на YunoHost сгенерируются ключи доступа по ssh, публичный ключ необходимо вписать на сервер. Взять его можно в админке YunoHost, в разделе Приложения / borg. Ключ будет находиться в строке Public key: и выглядит примерно так: ssh-ed25519 AAAAC3NzaC1lZD....
. Копируем его в буфер обмена или куда-нибудь ещё.
Далее необходимо вставить ключ на Сервер, в файл /var/services/homes/borg-backup/.ssh/authorized_keys
Для того, чтобы избежать проблемы с поиском исполняемого файла borg на сервере, необходимо в строке перед ключом вставить путь к исполняемому файлу borg. Для Synology это выглядит так: command="/usr/local/bin/borg serve" ssh-ed25519 AAAAC3NzaC1lZD...
.
Узнать, где исполняемый файл располагается в вашем дистрибутиве можно командой:
# type -a borg
Чтобы проверить авторизацию, необходимо зайти на Клиента в консоль под рутом и выполнить команду:
# ssh -i ~/.ssh/id_borg_ed25519 borg-backup@mystorage.space -p 22
В результате должна произойти авторизация на Сервер. Консоль при этом не вернёт ввод, из-за запуска исполняемого файла borg.
Ручной запуск и проверка
Чтобы не ждать наступления времени выполнения резервного копирования по расписанию можно запустить его вручную, командой:
# systemctl start borg
Консольный ввод при этом повиснет и продолжительность этого подвисания напрямую связана с объёмом данных резервного копирования.
Если что-то пошло не так, подробный лог можно посмотреть в админке YunoHost в разделе Инструменты / Логи.
После того как консоль вернёт управление, можно запросить с сервера информацию о бэкапах:
# app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg info "$(yunohost app setting $app repository)"
Отчёт по резервному копированию также можно посмотреть через веб-интерфейс YunoHost в разделе Приложения / borg на вкладке Advanced.
Восстановление
Полное восстановление должно происходить также в YunoHost с установленным borg и настроенным подключением по ssh. Понадобится ключ для расшифровки бэкапов, о котором указывалось вначале, а также перенос ключа для подключения по ssh с Клиента на Сервер т.к. при новой установке borg ключ сгенерируется новый.
Для того чтобы восстановить бэкап, нужно знать его имя, для этого необходимо выполнить команду из прошлого раздела.
После получения имени необходимо сформировать команду и выполнить её в консоли на Клиенте. Для примера я укажу для восстановления бэкап Hubzilla:
app=borg; BORG_PASSPHRASE="$(yunohost app setting $app passphrase)" BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " borg export-tar "$(yunohost app setting $app repository)::_auto_hubzilla-2023-02-05_14:28" /home/yunohost.backup/archives/hubzilla.tar
В этой команде имя бэкапа
_auto_hubzilla-2023-02-05_14:28
.Я не стал указывать полное имя файла для архива т.к. YunoHost потом не
даст удалить этот архив через интерфейс - там ограничение в 30
символов на имя файла бэкапа, поэтому архив называется просто
hubzilla.tar
Заключение
Работа с автоматическими бэкапами в YunoHost кажется мозговыносящей, но будь у меня эта инструкция, я не потратил бы на настройку несколько вечеров.
Разумеется с бэкапами можно проводить гораздо большее количество операций чем просто восстановление по имени архива, например просмотр содержимого, извлечение отдельных файлов и т.п. Для удобного оперирования архивами есть программы с графическим интерфейсом, например Vorta.
Настройку частоты резервного копирования также можно произвести достаточно гибко через настройки веб-интерфейса. Там есть соответствующее поле, работающее с форматом systemd OnCalendar format. Например можно указать 3:00 и резервное копирование будет выполняться каждые сутки в 3 часа ночи.