↓ Перейти к основному содержимому
  1. Posts/
  2. Backup/

Zerobyte - автоматизация резервного копирования для self-hosted инфраструктуры

Stilicho2011
Автор
Stilicho2011
Пишу о homelab, self-hosting, автоматизации и open-source решениях
Оглавление
Backup - This article is part of a series.
Part : This Article
Tip

Если вам понравилась эта статья, вы можете стать спонсором на Boosty.

Zerobyte - автоматизация резервного копирования для Homelab
#

Резервное копирование - одна из ключевых задач любой инфраструктуры.
В домашнем Homelab или self-hosted окружении важно иметь систему, которая:

  • автоматически выполняет бэкапы
  • поддерживает шифрование
  • умеет работать с облачными хранилищами
  • имеет удобный интерфейс управления

Именно такую задачу решает Zerobyte.

В этой статье разберем:

  • что такое Zerobyte
  • как установить его через Docker
  • как настроить первое резервное копирование
  • как восстанавливать данные

Что такое Zerobyte
#

Zerobyte - это инструмент для автоматизации резервного копирования, который помогает сохранять данные на различных хранилищах. Построенный на основе Restic, он предоставляет современный веб-интерфейс для планирования, управления и мониторинга зашифрованных резервных копий вашего удаленного хранилища.

Сайт проекта с документацией: zerobyte.app
Исходный код: github.com/nicotsx/zerobyte

Warning

Zerobyte все еще находится на версии 0.x.x и может существенно меняться от версии к версии. Проект в стадии активной разработки.

После того, как я выпустил ролик про приложения-открытия 2025 года, в числе которых я рассказывал про Zerobyte, мне часто пишут с вопросом, почему я не рассказал о том или ином решении. По мнению задающего вопросы, именно то приложение, которым он пользуется, самое лучшее :) Ниже я постарался свести в некую табличку особенности самых популярных решений.

Особенности Zerobyte:

  • Автоматическое резервное копирование с шифрованием, сжатием и политиками хранения, реализованное с помощью Restic
  • Гибкое расписание для автоматических заданий резервного копирования с тонкой настройкой политики хранения
  • Сквозное шифрование (end-to-end), обеспечивающее защиту данных на всех этапах
  • Поддержка нескольких протоколов: резервное копирование с NFS, SMB, WebDAV, SFTP или локальных директорий

Это делает Zerobyte удобной альтернативой таким решениям как:

Если же вы работаете в экосистеме Proxmox, обратите внимание также на специализированное решение Proxmox Backup Server.


Сравнение популярных решений для резервного копирования
#

Backup toolWeb UIEncryptionDeduplicationDocker
Duplicati✔✔✔✔
Kopia✔✔✔✔
BorgBackup✖✔✔✔
Zerobyte✔✔✔✔

Duplicati vs Zerobyte - сравнение систем резервного копирования
#

Так как в предыдущей статье я рассказывал про приложение Duplicati, то давайте сравним Duplicati и героя сегодняшней статьи более подробно.

Duplicati и Zerobyte - это решения для резервного копирования данных, ориентированные на self-hosted инфраструктуру и домашние лаборатории. Оба инструмента предоставляют веб-интерфейс, автоматизацию и поддержку удаленных хранилищ, однако они используют разные архитектурные подходы.

Duplicati - это самостоятельная система резервного копирования со своим движком.

Zerobyte - это веб-интерфейс и менеджер задач резервного копирования, построенный поверх backup-движка restic.


Краткая таблица сравнения
#

КритерийDuplicatiZerobyte
Тип решенияСамостоятельная система резервного копированияМенеджер резервных копий
Backup-движокСобственныйRestic
АрхитектураМонолитное приложениеWeb UI + restic backend
ИнтерфейсWeb UI + CLIWeb UI (репозитории можно открыть restic CLI)
ШифрованиеAES-256Встроенное шифрование restic
ДедупликацияБлочная дедупликацияДедупликация restic
Инкрементальные бэкапыДаДа
СжатиеДаДа
Версионирование файловДаДа
Восстановление файловДаДа
Планировщик задачДаДа
Поддержка облачных хранилищДаЧерез restic или с помощью rclone
Локальные хранилищаДаДа
Поддержка S3ДаДа
Поддержка WebDAVДаКак источник, как хранилище - через rclone
Поддержка SFTPДаДа
Поддержка rcloneДа (нужен бинарник rclone)Да
Управление несколькими задачамиДаДа
Контроль snapshot-овДаДа
Логи и мониторингДаДа
Открытый исходный кодДаДа
Зрелость проектаВысокаяНовый проект
Простота установкиОчень простаяПростая
Гибкость конфигурацииСредняяВысокая

Архитектура решений
#

Duplicati
#

Duplicati представляет собой полностью автономную систему резервного копирования.
Приложение включает:

  • backup-движок
  • веб-интерфейс
  • систему планирования
  • поддержку облачных хранилищ
  • механизм дедупликации
  • шифрование

Благодаря этому Duplicati можно установить как единое приложение и сразу использовать для создания резервных копий.


Zerobyte
#

Zerobyte работает иначе. Это интерфейс управления для restic, популярного backup-движка.

Zerobyte добавляет:

  • веб-панель управления
  • создание backup-задач
  • управление расписанием
  • просмотр snapshot-ов
  • восстановление файлов
  • централизованное управление несколькими репозиториями

Фактически Zerobyte выполняет роль панели управления для restic-инфраструктуры. И у этого есть приятный бонус: репозитории, которые он создает, - это обычные репозитории restic. Если с самим Zerobyte что-то случится, данные можно достать штатным restic из консоли (об этом ниже, в разделе про восстановление).


Поддерживаемые хранилища
#

Duplicati
#

Duplicati поддерживает большое количество облачных сервисов:

  • Amazon S3
  • Backblaze B2
  • Google Drive
  • OneDrive
  • Dropbox
  • WebDAV
  • SFTP
  • rclone (нужен установленный бинарник rclone)
  • локальные диски
  • NAS

Zerobyte
#

У Zerobyte два разных понятия, и списки у них разные.

Источники (Volumes) - откуда берем данные:

  • локальные директории (примонтированные в контейнер)
  • NFS
  • SMB
  • WebDAV
  • SFTP
  • rclone

Репозитории (Repositories) - куда складываем бэкапы:

  • локальные директории
  • S3-совместимые хранилища (Amazon S3, MinIO, Wasabi и т.п.) и Cloudflare R2
  • Google Cloud Storage
  • Azure Blob Storage
  • REST Server (restic)
  • SFTP
  • rclone - а через него еще 40+ облачных провайдеров, включая Google Drive, Dropbox и OneDrive

По набору хранилищ инструменты в итоге примерно равны: оба умеют работать через rclone, просто у Zerobyte это штатный тип репозитория прямо в интерфейсе.


Основные преимущества
#

Преимущества Duplicati
#

  • очень простая установка
  • готовая система резервного копирования
  • поддерживает самые распространенные облачные хранилища
  • зрелый и хорошо известный проект
  • удобный web-интерфейс

Duplicati отлично подходит для:

  • домашних серверов
  • NAS
  • персональных бэкапов
  • небольших homelab-инфраструктур

Преимущества Zerobyte
#

  • современная архитектура
  • использование надежного backup-движка restic
  • поддержка rclone-хранилищ
  • гибкая работа с репозиториями
  • удобное управление snapshot-ами
  • бэкапы хранятся в обычном формате restic и не привязаны к самому Zerobyte

Zerobyte лучше подходит для:

  • продвинутых homelab
  • инфраструктур с несколькими backup-задачами
  • пользователей restic

Когда выбрать Duplicati
#

Duplicati стоит выбрать, если:

  • нужна простая система резервного копирования
  • важна быстрая установка
  • требуется поддержка популярных облачных сервисов
  • инфраструктура небольшая

Duplicati - хороший выбор для большинства домашних серверов.


Когда выбрать Zerobyte
#

Zerobyte лучше выбрать, если:

  • вы уже используете restic
  • нужна более гибкая архитектура backup-системы
  • важно, чтобы бэкапы можно было открыть и без самого приложения - обычным restic
  • есть несколько backup-репозиториев

Итог сравнения Duplicati и Zerobyte
#

ИнструментЛучше всего подходит для
DuplicatiПростые и быстрые бэкапы для домашнего сервера
ZerobyteУправление restic-бэкапами и более гибкие инфраструктуры

Оба инструмента являются open-source и могут использоваться в self-hosted среде. Выбор зависит от того, нужен ли вам готовый backup-клиент (Duplicati) или менеджер инфраструктуры бэкапов на базе restic (Zerobyte).

Основные возможности Web интерфейса Zerobyte
#

Web-интерфейс
#

Zerobyte предоставляет современную web-панель управления, через которую можно:

  • создавать backup-задачи
  • запускать бэкапы вручную
  • отслеживать статус
  • восстанавливать файлы

Использование Restic
#

В основе Zerobyte используется Restic, что дает:

  • дедупликацию
  • шифрование
  • инкрементальные бэкапы
  • поддержку множества backend-хранилищ

Docker Compose файл из видео
#

services: # Объявление всех сервисов (контейнеров), которыми управляет Docker Compose
  zerobyte: # Имя сервиса (логическое имя контейнера)
    image: ghcr.io/nicotsx/zerobyte:latest # Образ контейнера. Для проекта версии 0.x надежнее закрепить версию (например :v0.43), а не использовать latest
    container_name: zerobyte # Явное имя контейнера для удобства управления (docker ps, логи и т.д.)
    restart: unless-stopped # Автоматический рестарт контейнера при падении (кроме ручной остановки)
    cap_add:
      - SYS_ADMIN # Добавляет расширенные привилегии (нужно для FUSE и работы с удаленными шарами). Если бекапите локальные данные, закомментируйте строку
      - SYS_PTRACE # Позволяет отслеживать процессы. В актуальном официальном примере этой строки нет
    #ports:
    #  - "4096:4096" # Проброс порта наружу (не нужен, если используется Traefik)
    devices:
      - /dev/fuse:/dev/fuse # Проброс FUSE-устройства для работы с rclone/монтированием. Если бекапите локальные данные, закомментируйте строку
    environment: # Переменные окружения для настройки приложения
      - TZ=Europe/Moscow # Таймзона контейнера (важно для расписаний и логов)
      - BASE_URL=https://zerobyte.stilicho.ru # Адрес, по которому вы открываете Zerobyte (от https:// зависят secure-cookies)
      - APP_SECRET=<сгенерируйте_openssl_rand_-hex_32> # Секрет для шифрования чувствительных данных в базе (32+ символов, обязательно свой)
    security_opt: # Ослабление механизмов безопасности контейнера
      - seccomp:unconfined # Отключает seccomp профиль (разрешает больше системных вызовов). В актуальном официальном примере этой строки нет
      - apparmor:unconfined # Отключает AppArmor профиль (снимает ограничения доступа). В актуальном официальном примере этой строки нет
    volumes: # Монтирование директорий (данные и доступ к файлам)
      - /etc/localtime:/etc/localtime:ro # Синхронизация времени с хостом (read-only)
      - /home/stilicho/docker/zerobyte:/var/lib/zerobyte # Данные Zerobyte (конфиги, база, состояние)
      - /home/stilicho/docker:/mydata # Директория с данными для бэкапа (источник volumes)
    networks:
      proxy: # Подключение к сети proxy (для работы с Traefik)
    labels: # Метки для автоматической конфигурации Traefik
      - "traefik.enable=true" # Включает обработку контейнера Traefik
      - "traefik.http.routers.zerobyte.entrypoints=web" # HTTP вход (порт 80)
      - "traefik.http.routers.zerobyte.rule=Host(`zerobyte.stilicho.ru`)" # Маршрутизация по домену
      - "traefik.http.middlewares.zerobyte-https-redirect.redirectscheme.scheme=https" # Редирект HTTP → HTTPS
      - "traefik.http.routers.zerobyte.middlewares=zerobyte-https-redirect" # Применение редиректа
      - "traefik.http.routers.zerobyte-secure.entrypoints=websecure" # HTTPS вход (порт 443)
      - "traefik.http.routers.zerobyte-secure.rule=Host(`zerobyte.stilicho.ru`)" # HTTPS правило маршрутизации
      - "traefik.http.routers.zerobyte-secure.tls=true" # Включение TLS (HTTPS)
      - "traefik.http.routers.zerobyte-secure.tls.certresolver=cloudflare" # Выпуск сертификата через Cloudflare
      - "traefik.http.routers.zerobyte-secure.service=zerobyte" # Привязка к сервису
      - "traefik.http.services.zerobyte.loadbalancer.server.port=4096" # Внутренний порт приложения в контейнере
      - "traefik.docker.network=proxy" # Указание сети для Traefik

networks: # Объявление сетей
  proxy: # Имя сети
    external: true # Сеть уже создана (Docker Compose не будет ее создавать)
Warning

Раздел cap_add и devices дают излишние права. Используйте их только в случае, если понимаете возможные последствия. Например, в моем случае без указанных параметров не было возможности подключиться к SMB-шаре на TrueNAS.

Несколько важных моментов по этому файлу (сверено с официальной документацией):

  • APP_SECRET шифрует хранящиеся в базе Zerobyte секреты - доступы к хранилищам, пароли и т.п. Нужна случайная строка от 32 символов, сгенерировать ее можно командой openssl rand -hex 32. Не копируйте значение из чужих примеров и держите его в .env, а не прямо в compose.
  • Права контейнера. В актуальном официальном примере для работы с удаленными шарами нужны только cap_add: SYS_ADMIN и /dev/fuse. SYS_PTRACE и отключение seccomp/AppArmor там не используются - если у вас все монтируется и без них, лучше их убрать. А если бэкапите только локальные папки, можно убрать и SYS_ADMIN с /dev/fuse: документация описывает такой упрощенный вариант отдельно.
  • Не бэкапьте Zerobyte самим собой. В примере в /mydata монтируется вся папка /home/stilicho/docker, а внутри нее лежит и /home/stilicho/docker/zerobyte - база самого Zerobyte и локальные репозитории (/var/lib/zerobyte/repositories). Если выбрать /mydata целиком, бэкап начнет копировать сам себя. Папку zerobyte стоит исключить или выбирать в задании конкретные подпапки.
  • /var/lib/zerobyte должен лежать на локальном диске. Документация прямо предупреждает: не указывайте для него сетевую шару - будут проблемы с правами и сильно упадет производительность.
  • Не выставляйте Zerobyte в интернет. Авторы проекта настоятельно не рекомендуют делать его доступным снаружи. Traefik здесь нужен для HTTPS и доступа по поддомену внутри своей сети, а не для публикации наружу.

Работа с приложением
#

Приложение достаточно легковесное, образ быстро скачивается и так же быстро разворачивается. После этого переходим по поддоменному имени, которое мы присвоили нашему приложению, в моем случае - это zerobyte.stilicho.ru.

Нас приветствует окно первичной регистрации, где мы должны задать значения логина и пароля администратора, указать адрес электронной почты и скачать recovery key для восстановления из резервной копии (в случае если такое потребуется).

Окно первоначальной регистрации

Окно регистрации администратора Zerobyte

Окно для введения данных регистрации и опции для скачивания ключа восстановления

Окно скачивания ключа восстановления (Recovery Key) с подтверждением пароля
Important

Recovery key - это файл restic.pass, то есть пароль restic, которым шифруются все репозитории, созданные в Zerobyte. Без него зашифрованные бэкапы не открыть. Храните его вне сервера, который бэкапите, например в менеджере паролей вроде Vaultwarden. Иначе ключ от сейфа окажется заперт в самом сейфе.

Нас приветствует приятный ретро интерфейс (угловатый, как мой Мерседес W124) в красно-черных тонах. Если вы ситх, а вдобавок еще и любитель ретро, то этот интерфейс вам очень понравится.

Главный экран Zerobyte: раздел Volumes, пока без единого тома

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

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

Соответственно, раздел Volumes - это «что мы будем бекапировать и местоположение файлов».

Создание тома с выбором backend: Directory, NFS, SMB, WebDAV, SFTP, rclone

Раздел Repositories отвечает за настройку целевого ресурса, куда мы все бекапируем.

Создание репозитория с выбором backend: Local, S3, Cloudflare R2, Google Cloud Storage, Azure Blob Storage, REST Server, SFTP, rclone

Раздел Backups позволяет нам тонко настраивать работы по резервному копированию, в том числе, но не ограничиваясь: когда, во сколько начинать процедуру резервного копирования, сколько копий хранить и т.д.

Создание задачи резервного копирования: имя, репозиторий, частота, время выполнения, пути для бекапа

В разделе Notifications мы с вами настраиваем, каким образом и с помощью чего мы хотим получать уведомления.

Создание уведомления с выбором типа: Email, Slack, Discord, Gotify, Ntfy, Pushover, Telegram, Webhook, Shoutrrr

Ну и в самом низу настройки администрирования.

Раздел Settings → Account: профиль пользователя, смена пароля, recovery key

Восстановление данных
#

Бэкап, из которого ни разу не пробовали восстановиться, - это не бэкап, а надежда. Поэтому коротко о том, как достать данные обратно.

Восстановление через интерфейс
#

Восстановление запускается из раздела Backups:

  1. Открываем задание, в котором лежат нужные данные.
  2. Выбираем snapshot за нужную дату.
  3. В файловом браузере отмечаем нужные файлы или папки. Если ничего не отмечать, восстановится весь просматриваемый snapshot.
  4. Выбираем, куда восстанавливать: Original location (на исходное место) или Custom location (в другую папку).
  5. Указываем, что делать с уже существующими файлами, и нажимаем Restore.

Помимо восстановления на сервер, есть кнопка Download - она скачивает выбранный файл или папку прямо в браузер. Удобно, когда нужно быстро вытащить один-два файла себе на компьютер.

Для Docker-сервисов надежнее восстанавливать не поверх рабочих файлов, а в отдельную папку (Custom location), проверить содержимое и уже потом переносить нужное. Это советует и сама документация Zerobyte. А если все-таки восстанавливаете на исходное место - сначала остановите контейнер, чьи файлы возвращаете, и убедитесь, что папка смонтирована в Zerobyte без :ro: бэкапить из read-only папки можно, а восстанавливать в нее - нет.

Если Zerobyte недоступен
#

Здесь как раз выручает то, что Zerobyte - это надстройка над restic. Его репозитории - обычные репозитории restic, поэтому если сервер с Zerobyte умер, данные можно достать штатной утилитой restic с любой машины. Понадобятся только доступ к хранилищу и recovery key (restic.pass):

# список snapshot-ов в репозитории
restic -r /path/to/repository --password-file restic.pass snapshots

# восстановить последний snapshot в отдельную папку
restic -r /path/to/repository --password-file restic.pass restore latest --target /tmp/restore

Для S3, SFTP и других хранилищ вместо локального пути указывается адрес репозитория в формате restic (например, s3:... или sftp:...) и соответствующие доступы.

Проверка бэкапов
#

Раз в какое-то время стоит делать пробное восстановление: взять пару папок, восстановить их в отдельное место и убедиться, что внутри то, что нужно. Это пара минут, которые однажды сэкономят очень много нервов.

Backup - This article is part of a series.
Part : This Article

Related

Duplicati - резервное копирование с шифрованием для домашнего сервера

··1534 слов·8 минут· loading · loading
Пошаговая инструкция по установке и настройке Duplicati для автоматических зашифрованных бэкапов на домашнем сервере или в облако

Vinchin Backup & Recovery V9.0 SP3 - обзор и практика на Proxmox VE

·4671 слово·23 минут· loading · loading
Разбираю Vinchin Backup & Recovery V9.0 SP3 - платформонезависимое резервное копирование и миграцию для смешанной и импортонезависимой инфраструктуры: архитектуру, установку на голое железо, поддержку Proxmox VE и российских платформ виртуализации (zVirt, РЕД, ROSA, HOSTVM), а также подробное сравнение с Proxmox Backup Server.

Proxmox Backup Server 4.2.0 - установка, настройка и резервное копирование Proxmox VE

··2531 слово·12 минут· loading · loading
Полная инструкция по установке и настройке Proxmox Backup Server 4.2.0 для создания надежной системы резервного копирования виртуальных машин и контейнеров Proxmox VE.