Zerobyte: веб-панель для бэкапов на Restic
На прошлой неделе видел видео, где упоминалась Zerobyte, так что решил её попробовать сам. Сразу скажу, что панелька понравилась. Я её подробно изучил и проверил на реальных примерах, так что могу обстоятельно всё рассказать.
📌 Особенности Zerobyte:
▪️Приятный и логичный веб интерфейс.
▪️В качестве бэкенда для бэкапов использует Restic. У меня было много заметок про него с примерами, можно по тэгу посмотреть, так что не буду повторяться и рассказывать, что это такое.
▪️В качестве бэкенда для хранения может использовать локальную директорию, S3, Rest Server, SFTP, Rclone и некоторые другие облачные хранилища.
▪️Может бэкапить локальные директории, SMB и NFS шары, ресурсы, доступные по WebDAV и SFTP.
Связка Restic и Rclone делает Zerobyte универсальным решением, которое выполняет роль управляющей обвязки и не вносит свой слой обработки. То есть в случае чего доступ к бэкапам и данным можно получить напрямую, минуя веб панель.
Я для примера подключил к Zerobyte шару по SMB и забэкапил её в S3 бакет Селектела. Доступ в S3 настроен через Rclone, так что начнём настройку с него. Ставим на сервер, где будет работать Zerobyte:
# apt install rclone
Дальше настраиваем доступ к хранилищу S3. Для этого надо создать бакет, выдать права через отдельного сервисного пользователя и настроить доступ через rclone. Я не буду всё это описывать, так как очень большой объём. В документации хостера подробно показано. Я в своё время по ним делал. После настройки надо проверить, что через Rclone виден подключенный бакет:
# rclone ls selectel_s3:zerobyte
Теперь рисуем конфигурацию compose.yml для запуска панели. Я обнаружил в ней один баг, из-за которого не получалось в качестве источника для бэкапов смонтировать внутрь контейнера SMB или NFS ресурс. Контейнеру не хватает каких-то прав. Решается добавлением этих прав или запуска контейнера в привилегированном режиме. Если это недопустимо, то можно монтировать ресурсы к хосту и прокидывать в контейнер.
Вот мой итоговый compose.yml:
services:
zerobyte:
image: ghcr.io/nicotsx/zerobyte:v0.25
container_name: zerobyte
restart: unless-stopped
cap_add:
- SYS_ADMIN
- SYS_PTRACE
security_opt:
- seccomp:unconfined
- apparmor:unconfined
ports:
- "4096:4096"
devices:
- /dev/fuse:/dev/fuse
environment:
- TZ=Europe/Moscow
- BASE_URL=http://192.168.137.29:4096
- APP_SECRET=f47c06b21f12a2261f9dd
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/lib/zerobyte:/var/lib/zerobyte
- /mnt/backup:/backup
- ~/.config/rclone:/root/.config/rclone:ro
Запускаем:
# docker compose up -d
Идём в веб интерфейс по IP адресу сервера на порт 4096, создаём нового пользователя.
Теперь вам нужно создать Volume - это источник бэкапов. Потом создаём репозиторий - место, где будут храниться бэкапы. В качестве бэкенда указываем Rclone и настроенный ранее Remote в Селектеле.
После этого идём в раздел Backups и добавляем задание, запускаем. После того, как оно отработает, можно сходить в бакет и проверить, появились ли там данные. В бакете будет располагаться шифрованный репозиторий Restic. Сами данные вы не увидите, так как Restic всё шифрует, поэтому в качестве хранилища можно использовать всё, что угодно. Тот же Rclone поддерживает подключение к Яндекс.Диску.
Провозился несколько часов, пока всё проверил и настроил. Долго ковырялся с подключением по SMB, пока не понял, что ошибка Permission denied во время подключения это не ошибка доступа к шаре, а нехватка прав у контейнера.
В целом продукт интересный, мне понравился. Если продолжит развитие, то завоюет популярность.
#restic #backup