Личное облако и файлы

Zerobyte

Панель для Restic и бэкапов Docker заменяет самописную связку Restic и cron: сохраняет версии файлов, показывает снимки и возвращает отдельный файл через браузер без покупки лицензии панели и с хранилищем на ваш выбор. Развернули 0.44.2 на Fatmetal Cloud Server, замерили память и проверили восстановление при остановленной панели.

Проверено на версии v0.44.2, 10 ноября 2026~12 минут чтенияFatmetal Team
Резервное копированиеЛицензия: AGPL-3.0Статус: запущен у нас, v0.44.2

Вердикт

Подходит
  • Владельцу Docker-приложений, которому нужно возвращать удаленные вложения и старые конфиги
  • Администратору Restic, который хочет выбирать снимок мышью и видеть результат задания в браузере
  • Тому, кто хочет сохранить возможность восстановления отдельной программой после потери панели
Не подходит
  • Для восстановления всей виртуальной машины вместе с загрузчиком и ОС
  • Для выдачи клиентам изолированных кабинетов резервного копирования
Рекомендуем: CPU2-RAM4-DISK50Сложность: mediumRAM в простое: 158 МиБ с CaddyГлавный риск: потеря ключа ResticДля постоянной работы: HTTPS, отдельная авторизация, внешние копии
Что это

Что это и какую задачу решает

Владелец приложения обычно вспоминает о резервной копии после удаления нужного файла. Zerobyte дает ему список дат, дерево каталогов внутри снимка и выбор места восстановления.

Копирование выполняет Restic: он шифрует данные и повторно использует уже сохраненные блоки. Панель отвечает за источники, расписание, хранение снимков и показ результата.

Копии можно открыть напрямую через Restic, даже если Zerobyte остановлен: достаточно доступа к хранилищу и сохраненного ключа восстановления. Работающая панель для возврата файлов не нужна.

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

Zerobyte 0.44.2
Снимки Zerobyte и статистика первого бэкапа набора 1 ГиБ
Три снимка набора 1 ГиБ: полный, без изменений и после замены части файлов.
Сравнение

Чем отличается от Restic и платных аналогов

Если Restic уже запускается по расписанию и восстановление вам понятно, обязательной причины менять эту схему нет. Панель полезна, когда снимки нужно просматривать и выбирать файлы без командной строки.

ПродуктЦена лицензииЧто выбираете
Zerobyte0, инфраструктура отдельноВеб-панель и стандартный репозиторий Restic
Restic + cron0, инфраструктура отдельноСкрипты, расписание и просмотр снимков своими командами
Duplicacy Web Commercial50 USD за компьютер в годПлатная панель, другой движок и формат копий; хранилище отдельно
Acronis Cyber Protect CloudРасчет у поставщикаПлатформа для провайдеров с оплатой по нагрузкам или объему

Цена Duplicacy взята из прайса 10 ноября 2026 года. Там указаны Stripe и PayPal; для российской карты доступный способ оплаты не указан.

Политика Acronis исключает новый бизнес в России. Это влияет на покупку, но не делает файловую панель заменой всей корпоративной платформы.

За Zerobyte не нужен зарубежный лицензионный платеж. Сервер и место для копий оплачиваются отдельно; на выделенном VPS вся схема может стоить дороже одной лицензии конкурента.

Под капотом

Как устроены панель и копии

Один контейнер содержит приложение на Bun, SQLite, Restic и вспомогательные программы. Отдельные PostgreSQL, Redis и очередь для этой установки не нужны.

Bun 1.4.4SQLiteRestic 0.19.1rclone 1.75.2Docker ComposeCaddy

В каталоге /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 использовал оба ядра: процессор важен для скорости даже при небольшом расходе памяти.

i

Считайте место под историю. В тесте замена 104 МиБ файлов добавила 52 МиБ к репозиторию. Цена сервера не включает отдельное объектное хранилище; срок хранения снимков задайте до заполнения диска.

В маркетплейсе Fatmetal

Не хотите ставить руками?

Этот стек есть в маркетплейсе Fatmetal - можно не повторять установку из этого разбора вручную. Заказываете сервер, за пару минут получаете рабочий домен, валидный TLS и файл с доступами.

Рекомендуемая конфигурация:
2 vCPU · 4 ГБ RAM · 50 ГБ NVMe от 585 ₽/мес

В маркетплейс →
Установка

Развертывание на Fatmetal Cloud Server

Выполняйте команды в одной root-сессии.

  1. Установите 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
  2. Подготовьте каталоги и секрет

    Замените ваш-домен; подготовьте каталоги источника и восстановления.

    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
  3. Закрепите образ и подключите данные

    Создайте 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
  4. Защитите первый вход

    Пароль 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
  5. Запустите сервис

    Caddy выпустит сертификат; BASE_URL должен совпадать с адресом в браузере.

    caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile
    docker compose pull
    docker compose up -d
    systemctl reload caddy
    docker compose ps
  6. Создайте администратора и сохраните ключ

    Откройте 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
Zerobyte 0.44.2
Две версии резервной копии и файлы первого снимка
В первом снимке доступны report.txt и конфигурация приложения.

Выберите старый снимок, откройте Restore, отметьте report.txt и задайте Custom Location → /restore. Результат появится на хосте в /srv/zerobyte-demo/restore/report.txt.

Сравните содержимое с текущим файлом. На стенде восстановленная версия совпала по SHA-256 с исходным отчетом, а действующий отчет сохранил новую сумму.

Zerobyte 0.44.2
Восстановление одного старого файла в отдельный каталог
Выбираем один файл и /restore, не перезаписывая действующие данные.
Замеры

Что происходит при копировании 1 ГиБ

Набор состоял из 1024 файлов: половина бинарные, половина сжимаемые JSON. Источник и копии лежали на локальном диске; числа помогают оценить именно файловую задачу.

ОперацияВремяРезультат
Первый бэкап 1 ГиБ14 сРепозиторий 513 МиБ
Повтор без изменений0,6 сНовых блоков данных нет
После замены 104 МиБ файлов2 сРост репозитория на 52 МиБ

Панель после работы занимала 140 МиБ, Caddy еще 18 МиБ. Пик приложения при полном копировании составил 241 МиБ. В этой задаче память тарифа оставалась с запасом.

Страница входа отвечала за 73 мс в простое и за 76 мс во время первого бэкапа. Повторный запуск контейнера с готовыми данными вернул страницу входа за 2,8 секунды.

i

Размер исходника не равен размеру истории. Сжатие уменьшило первую копию смешанного набора почти вдвое. Дальнейший расход определяют новые блоки и число сохраняемых версий; удаление файла из источника не удаляет его старые копии сразу.

Проверено на версии 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; файл совпал с исходной версией.

Это позволяет отделить восстановление от доступности веб-приложения. Для аварии заранее сохраните адрес хранилища, доступ к нему и ключ: искать их в недоступной панели будет поздно.

Грабли

Где может сломаться

ERR_SSL_PROTOCOL_ERROR при первом открытии

Причина. В нашей установке Caddy еще завершал выпуск сертификата. Приложение уже отвечало локально, а HTTPS еще не был готов.

Решение. Посмотрите журнал: после успешной проверки домена дождитесь окончания выдачи. При ошибке проверки сверьте A-запись и доступность портов 80/443.

journalctl -u caddy -n 50 --no-pager
curl -I http://127.0.0.1:4096/login
В compose обнаружился APP_VERSION=0.20.0

Причина. Корневой 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. Это настройки назначения копий, а не подключение исходного каталога.

Zerobyte 0.44.2
Форма S3-репозитория Zerobyte
Параметры S3 задаются в интерфейсе; ключи на снимке не заполнены.
  • Объектное хранилище. Для внешних копий можно выбрать S3 с холодным HDD-классом. Бакет и его объем оплачиваются отдельно от сервера панели.
  • Уведомления. В Notifications → Create Destination → Email укажите свой SMTP, получателя и Use TLS, затем нажмите Test. На стенде тестовое письмо действительно пришло.
  • Docker-приложения. Подключайте конкретные каталоги с вложениями и конфигами. Пример показывает файловый источник: путь в контейнере отличается от пути на хосте.
Ограничения

Когда это НЕ ваш выбор

Нужен готовый план аварийного восстановления

Это файловые копии, а не образ всей VM или услуга с SLA. Репозиторий на том же диске исчезнет вместе с сервером; рабочая схема требует независимого хранилища.

Нужно копировать работающую базу как обычную папку

Чтение файлов PostgreSQL или MySQL не гарантирует согласованную копию. Подготовьте дамп штатными средствами базы и уже его включайте в файловое задание.

Нужны независимые операторы и русский интерфейс

Участники организации считаются доверенными операторами хоста; тонкого разделения прав на восстановление нет. Интерфейс 0.44.2 английский, настройки языка нет.

Нужна длительная поддержка фиксированной версии

Проект еще в линии 0.x. Обновления требуют чтения примечаний к релизу и проверки восстановления; поддержку старого выпуска нельзя предполагать автоматически.

FAQ

Частые вопросы

Где искать 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 ₽/мес.

Запустить Zerobyte →
Анонсы новых разборов в Telegram-канале Новые гайды и карточки в маркетплейсе первыми @fatmetal_channel →

Этот стек у нас запущен на тарифе CPU2-RAM4-DISK50. Нашли баг в гайде - напишите, поправим в течение дня.