Zerobyte
Панель для Restic и бэкапов Docker заменяет самописную связку Restic и cron: сохраняет версии файлов, показывает снимки и возвращает отдельный файл через браузер без покупки лицензии панели и с хранилищем на ваш выбор. Развернули 0.44.2 на Fatmetal Cloud Server, замерили память и проверили восстановление при остановленной панели.
Вердикт
- Владельцу Docker-приложений, которому нужно возвращать удаленные вложения и старые конфиги
- Администратору Restic, который хочет выбирать снимок мышью и видеть результат задания в браузере
- Тому, кто хочет сохранить возможность восстановления отдельной программой после потери панели
- Для восстановления всей виртуальной машины вместе с загрузчиком и ОС
- Для выдачи клиентам изолированных кабинетов резервного копирования
Что это и какую задачу решает
Владелец приложения обычно вспоминает о резервной копии после удаления нужного файла. Zerobyte дает ему список дат, дерево каталогов внутри снимка и выбор места восстановления.
Копирование выполняет Restic: он шифрует данные и повторно использует уже сохраненные блоки. Панель отвечает за источники, расписание, хранение снимков и показ результата.
Копии можно открыть напрямую через Restic, даже если Zerobyte остановлен: достаточно доступа к хранилищу и сохраненного ключа восстановления. Работающая панель для возврата файлов не нужна.
В нашей проверке у отчета поменяли сумму, сделали второй снимок и вернули первую версию в отдельный каталог. Текущий файл при этом остался прежним.
Чем отличается от Restic и платных аналогов
Если Restic уже запускается по расписанию и восстановление вам понятно, обязательной причины менять эту схему нет. Панель полезна, когда снимки нужно просматривать и выбирать файлы без командной строки.
| Продукт | Цена лицензии | Что выбираете |
|---|---|---|
| Zerobyte | 0, инфраструктура отдельно | Веб-панель и стандартный репозиторий Restic |
| Restic + cron | 0, инфраструктура отдельно | Скрипты, расписание и просмотр снимков своими командами |
| Duplicacy Web Commercial | 50 USD за компьютер в год | Платная панель, другой движок и формат копий; хранилище отдельно |
| Acronis Cyber Protect Cloud | Расчет у поставщика | Платформа для провайдеров с оплатой по нагрузкам или объему |
Цена Duplicacy взята из прайса 10 ноября 2026 года. Там указаны Stripe и PayPal; для российской карты доступный способ оплаты не указан.
Политика Acronis исключает новый бизнес в России. Это влияет на покупку, но не делает файловую панель заменой всей корпоративной платформы.
За Zerobyte не нужен зарубежный лицензионный платеж. Сервер и место для копий оплачиваются отдельно; на выделенном VPS вся схема может стоить дороже одной лицензии конкурента.
Как устроены панель и копии
Один контейнер содержит приложение на Bun, SQLite, Restic и вспомогательные программы. Отдельные PostgreSQL, Redis и очередь для этой установки не нужны.
В каталоге /var/lib/zerobyte лежит состояние панели. Репозиторий с копиями расположен отдельно: в нашем примере это каталог хоста, доступный контейнеру как /repositories/demo.
Для файловых источников достаточно обычных подключенных каталогов Docker. Мы убрали дополнительные привилегии из расширенного примера: локальный сценарий работает без SYS_ADMIN и устройства FUSE.
Не путайте ключи. APP_SECRET нужен приложению для защиты сохраненных секретов. Recovery key открывает копии Restic. Пароль администратора дает вход в панель и не заменяет ни один из них.
Какой сервер и диск брать
Численный минимум ресурсов в документации не задан. Мы проверили CPU2-RAM4-DISK50: два ядра, 4 ГБ памяти и диск 50 ГБ, Ubuntu 24.04.
| Рекомендуемый тариф | CPU2-RAM4-DISK50 |
| Текущая цена сервера | 650 руб/мес на 10 ноября 2026 |
| Память после работы | 158 МиБ вместе с Caddy |
| Образ на диске | 384 МиБ |
| Занято на диске после тестовых копий | 4,32 ГиБ |
Перед установкой направьте A-запись вашего домена на сервер и откройте TCP 80/443. Понадобятся SSH и права sudo.
Четыре гигабайта - проверенная конфигурация, а не обязательный минимум приложения. При копировании Restic использовал оба ядра: процессор важен для скорости даже при небольшом расходе памяти.
Считайте место под историю. В тесте замена 104 МиБ файлов добавила 52 МиБ к репозиторию. Цена сервера не включает отдельное объектное хранилище; срок хранения снимков задайте до заполнения диска.
В маркетплейсе Fatmetal
Не хотите ставить руками?
Этот стек есть в маркетплейсе Fatmetal - можно не повторять установку из этого разбора вручную. Заказываете сервер, за пару минут получаете рабочий домен, валидный TLS и файл с доступами.
Рекомендуемая конфигурация:
2 vCPU · 4 ГБ RAM · 50 ГБ NVMe от 585 ₽/мес
Развертывание на Fatmetal Cloud Server
Выполняйте команды в одной root-сессии.
Установите Docker и Caddy
В root-сессии (sudo -i) установите пакеты из официального репозитория Docker.
apt-get update apt-get install -y ca-certificates curl caddy install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc printf 'deb [signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable ' > /etc/apt/sources.list.d/docker.list apt-get update && apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-pluginПодготовьте каталоги и секрет
Замените ваш-домен; подготовьте каталоги источника и восстановления.
install -d /opt/zerobyte /var/lib/zerobyte /srv/zerobyte-demo/{source,repository,restore} cd /opt/zerobyte umask 077 printf 'BASE_URL=https://ваш-домен APP_SECRET=%s ' "$(openssl rand -hex 32)" > .env printf 'Invoice Q4 - version 1 Amount: 15000 RUB ' > /srv/zerobyte-demo/source/report.txtЗакрепите образ и подключите данные
Создайте compose.yaml: фиксированный тег сохраняет версию, localhost закрывает порт.
cat > compose.yaml <<'YAML' services: zerobyte: image: ghcr.io/nicotsx/zerobyte:v0.44.2 container_name: zerobyte restart: unless-stopped ports: ["127.0.0.1:4096:4096"] environment: TZ: UTC BASE_URL: ${BASE_URL} APP_SECRET: ${APP_SECRET} TRUST_PROXY: "true" volumes: - /etc/localtime:/etc/localtime:ro - /var/lib/zerobyte:/var/lib/zerobyte - /srv/zerobyte-demo/source:/sources/demo:ro - /srv/zerobyte-demo/repository:/repositories/demo - /srv/zerobyte-demo/restore:/restore YAMLЗащитите первый вход
Пароль Caddy защищает также создание администратора; прочитайте /root/zerobyte-proxy.pass командой cat.
openssl rand -hex 16 > /root/zerobyte-proxy.pass PROXY_HASH=$(caddy hash-password --plaintext "$(cat /root/zerobyte-proxy.pass)") cat > /etc/caddy/Caddyfile <<EOF ваш-домен { basicauth { operator $PROXY_HASH } reverse_proxy 127.0.0.1:4096 } EOFЗапустите сервис
Caddy выпустит сертификат; BASE_URL должен совпадать с адресом в браузере.
caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile docker compose pull docker compose up -d systemctl reload caddy docker compose psСоздайте администратора и сохраните ключ
Откройте https://ваш-домен, введите operator и пароль Caddy. Заполните Email, Username, Password, Confirm Password. Подтвердите пароль и скачайте Recovery Key на другую машину.
Как сохранить файлы и вернуть старую версию
На первом стенде образ скачался за 10 секунд. Установка панели еще не создает копий приложений: теперь подключите источник и запустите первое задание.
Откройте Sources → Create Source, выберите локальный каталог и укажите /sources/demo. Это путь внутри контейнера; на сервере ему соответствует /srv/zerobyte-demo/source.
В Repositories создайте локальное хранилище с путем /repositories/demo. Затем создайте Backup Job: выберите источник, репозиторий, Daily 03:30 и Keep Last 3. Расписание в примере работает по UTC.
Нажмите Backup Now и дождитесь снимка. Измените report.txt, запустите задачу еще раз: в списке появятся две версии, а не одна перезаписанная копия.
printf 'Invoice Q4 - version 2\nAmount: 18000 RUB\n' > /srv/zerobyte-demo/source/report.txtВыберите старый снимок, откройте Restore, отметьте report.txt и задайте Custom Location → /restore. Результат появится на хосте в /srv/zerobyte-demo/restore/report.txt.
Сравните содержимое с текущим файлом. На стенде восстановленная версия совпала по SHA-256 с исходным отчетом, а действующий отчет сохранил новую сумму.
Что происходит при копировании 1 ГиБ
Набор состоял из 1024 файлов: половина бинарные, половина сжимаемые JSON. Источник и копии лежали на локальном диске; числа помогают оценить именно файловую задачу.
| Операция | Время | Результат |
|---|---|---|
| Первый бэкап 1 ГиБ | 14 с | Репозиторий 513 МиБ |
| Повтор без изменений | 0,6 с | Новых блоков данных нет |
| После замены 104 МиБ файлов | 2 с | Рост репозитория на 52 МиБ |
Панель после работы занимала 140 МиБ, Caddy еще 18 МиБ. Пик приложения при полном копировании составил 241 МиБ. В этой задаче память тарифа оставалась с запасом.
Страница входа отвечала за 73 мс в простое и за 76 мс во время первого бэкапа. Повторный запуск контейнера с готовыми данными вернул страницу входа за 2,8 секунды.
Размер исходника не равен размеру истории. Сжатие уменьшило первую копию смешанного набора почти вдвое. Дальнейший расход определяют новые блоки и число сохраняемых версий; удаление файла из источника не удаляет его старые копии сразу.
Проверено на версии v0.44.2, 10 ноября 2026. На новых версиях результаты могут отличаться.
Как вернуть файл без работающей панели
Для этого нужны сам репозиторий и скачанный Recovery Key. Скопируйте ключ на машину восстановления как /root/restic.pass, ограничьте доступ и поставьте отдельный Restic.
apt-get install -y restic
chmod 600 /root/restic.pass
restic -r /srv/zerobyte-demo/repository/ID-репозитория --password-file /root/restic.pass snapshotsЗамените ID-репозитория именем подкаталога, который Zerobyte создал внутри хранилища. Из списка snapshots возьмите ID нужной даты и подставьте вместо ID-снимка:
restic -r /srv/zerobyte-demo/repository/ID-репозитория --password-file /root/restic.pass \
restore ID-снимка:/sources/demo --target /srv/zerobyte-demo/restore-without-panel --include report.txtТак вернется только report.txt из выбранной версии. Проверьте его содержимое перед заменой рабочего файла и удалите временную копию ключа с машины восстановления.
На стенде мы остановили контейнер Zerobyte и выполнили восстановление отдельным Restic 0.16.4 из Ubuntu. Он прочитал репозиторий, созданный Restic 0.19.1; файл совпал с исходной версией.
Это позволяет отделить восстановление от доступности веб-приложения. Для аварии заранее сохраните адрес хранилища, доступ к нему и ключ: искать их в недоступной панели будет поздно.
Где может сломаться
Причина. В нашей установке Caddy еще завершал выпуск сертификата. Приложение уже отвечало локально, а HTTPS еще не был готов.
Решение. Посмотрите журнал: после успешной проверки домена дождитесь окончания выдачи. При ошибке проверки сверьте A-запись и доступность портов 80/443.
journalctl -u caddy -n 50 --no-pager
curl -I http://127.0.0.1:4096/loginПричина. Корневой compose репозитория предназначен для разработки и тестов. Он отличается от production-примера и не фиксирует нужный серверный релиз.
Решение. Используйте compose из инструкции выше. Проверьте фактически запущенный образ, прежде чем создавать копии:
docker inspect zerobyte --format '{{.Config.Image}}'Каталог источника в нашем compose подключен с :ro. Для восстановления выбирайте /restore: у панели есть право записывать туда, а действующие файлы остаются защищены от случайной замены.
Безопасность, резервная копия панели и обновления
Оставьте 4096 на localhost, HTTPS и отдельный пароль Caddy. Не выдавайте этот пароль посторонним: он защищает и экран создания первого администратора.
Перед обновлением остановите панель и сохраните состояние вместе с .env, compose и настройками прокси. Архив содержит секреты; перенесите его в защищенное место вне VPS.
cd /opt/zerobyte
docker compose stop zerobyte
tar -czf /root/zerobyte-state.tgz -C / var/lib/zerobyte opt/zerobyte etc/caddy root/zerobyte-proxy.pass
docker compose start zerobyteЧтобы вернуть состояние на сервер с установленными Docker и Caddy, загрузите архив по прежнему пути и выполните:
cd /opt/zerobyte && docker compose stop zerobyte
tar -xzf /root/zerobyte-state.tgz -C /
docker compose up -d
systemctl reload caddyЭтот архив сохраняет настройки панели; репозиторий с пользовательскими копиями и Recovery Key храните отдельно. Для обновления измените тег образа в compose на выбранный стабильный релиз:
cd /opt/zerobyte
docker compose pull && docker compose up -d
docker compose logs --tail=50 zerobyteПосле обновления войдите через публичный адрес, запустите задачу и верните один файл. Это проверяет больше, чем статус running: копия должна действительно читаться.
Уязвимости прошлых версий
Инструкция и рецепт карточки используют исправленную 0.44.2. Если у вас версия из таблицы, сохраните состояние и обновите образ командами из предыдущего раздела.
| Бюллетень | Уровень | Затронуты / исправлено | Риск старой версии |
|---|---|---|---|
| CVE-2025-68435 | Критический | Ниже 0.18.5 / 0.18.5 и 0.19.0 | Часть API допускала операции без входа |
| GHSA-prg5-2rhh-p4xm | Средний | До 0.43.2 включительно / 0.44.0 | Участник мог получить ключ восстановления и доступы хранилищ |
| GHSA-9p7m-678w-9pfc | Средний | Подтверждена 0.43.2 / 0.44.0 | Исключенный участник продолжал получать метаданные задач |
В 0.44.1 дополнительно усилили защиту запросов и проверку адресов входа. При переносе на другой домен меняйте BASE_URL и конфигурацию Caddy вместе.
Хранилище и уведомления
Для S3 есть собственная форма репозитория: Endpoint, Bucket, Access Key ID, Secret Access Key. Это настройки назначения копий, а не подключение исходного каталога.
- Объектное хранилище. Для внешних копий можно выбрать S3 с холодным HDD-классом. Бакет и его объем оплачиваются отдельно от сервера панели.
- Уведомления. В Notifications → Create Destination → Email укажите свой SMTP, получателя и Use TLS, затем нажмите Test. На стенде тестовое письмо действительно пришло.
- Docker-приложения. Подключайте конкретные каталоги с вложениями и конфигами. Пример показывает файловый источник: путь в контейнере отличается от пути на хосте.
Когда это НЕ ваш выбор
Нужен готовый план аварийного восстановления
Это файловые копии, а не образ всей VM или услуга с SLA. Репозиторий на том же диске исчезнет вместе с сервером; рабочая схема требует независимого хранилища.
Нужно копировать работающую базу как обычную папку
Чтение файлов PostgreSQL или MySQL не гарантирует согласованную копию. Подготовьте дамп штатными средствами базы и уже его включайте в файловое задание.
Нужны независимые операторы и русский интерфейс
Участники организации считаются доверенными операторами хоста; тонкого разделения прав на восстановление нет. Интерфейс 0.44.2 английский, настройки языка нет.
Нужна длительная поддержка фиксированной версии
Проект еще в линии 0.x. Обновления требуют чтения примечаний к релизу и проверки восстановления; поддержку старого выпуска нельзя предполагать автоматически.
Частые вопросы
Где искать Docker volumes?
В нашей схеме источником служит каталог хоста, подключенный в контейнер только для чтения. Для своего приложения замените левую часть монтирования на его каталог данных.
Нужен ли отдельный сервер базы?
Нет, состояние хранится во встроенной SQLite в /var/lib/zerobyte. Этот каталог должен переживать замену контейнера.
Как оставить только последние копии?
В Backup Job задайте Retention → Keep Last. На стенде использовали 3 для демонстрационной задачи и 5 для набора 1 ГиБ.
Можно вернуть один файл?
Да: выберите снимок, отметьте файл в Restore и задайте Custom Location. Мы вернули старый отчет, сохранив текущую версию в источнике.
Что сохранить кроме копий?
Recovery Key, доступ к хранилищу и архив состояния панели с APP_SECRET. Проверяйте, что эти материалы доступны с другой машины.
Потребуется платный ключ Zerobyte?
Нет. Серверная версия распространяется под AGPL-3.0; лицензионного платежа для включения резервного копирования нет. Условия лицензии и notices сохраняются.
Итог
Zerobyte подходит владельцу Docker-приложений, которому нужен понятный выбор снимка и файла. На CPU2-RAM4-DISK50 панель с Caddy занимала 158 МиБ, а копирование 1 ГиБ заняло 14 секунд.
Главный результат проверки - старый файл удалось вернуть отдельным Restic при остановленной панели. Сохраните ключ вне сервера и организуйте независимое хранилище: тогда веб-интерфейс остается удобным способом управления, а не единственным путем к данным.
Рекомендуемая конфигурация для установки:
2 vCPU · 4 ГБ RAM · 50 ГБ NVMe
Не хотите устанавливать вручную?
Запустите Zerobyte на этой конфигурации автоматически - от 585 ₽/мес.
Этот стек у нас запущен на тарифе CPU2-RAM4-DISK50. Нашли баг в гайде - напишите, поправим в течение дня.