Бэкап и восстановление Duplicati
Если restic и borg кажутся избыточно «терминальными» — писать скрипты, парсить вывод, помнить флаги для листинга снапшотов, — Duplicati решает ту же задачу через браузер: создали задание в веб-интерфейсе, выставили расписание, нажали «Сохранить», и дальше бэкапы идут сами. Расплата за удобство — свои нюансы: SQLite-база с состоянием, которая иногда рассинхронизируется, и процесс на Mono/.NET, который любит ошибиться в оценке памяти на слабых VPS. Разберём установку, первое задание, хранение версий и — самое важное — реальное восстановление, а не только теорию про «бэкапы должны быть».
Содержание
- Что такое Duplicati и когда он оправдан
- Установка в Docker на VPS
- Настройка первого задания бэкапа через веб-интерфейс
- Куда складывать бэкапы: локально, S3, SFTP, Backblaze B2
- Расписание, версии и политика хранения (retention)
- Восстановление данных: из веб-интерфейса и Disaster Recovery
- Мониторинг, уведомления и типичные проблемы
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Duplicati и когда он оправдан
Duplicati — open-source инструмент резервного копирования с веб-интерфейсом, написанный на .NET. Ключевые особенности:
- Дедупликация и инкрементальные бэкапы — после первого полного прохода каждый следующий бэкап передаёт только изменённые блоки данных.
- Встроенное шифрование AES-256 — данные шифруются до отправки на хранилище, при желании можно переключиться на GPG.
- Десятки бэкендов из коробки — локальный диск, SFTP/SSH, FTP, WebDAV, Amazon S3, Backblaze B2, Google Drive, OneDrive, Azure Blob и другие — без танцев с rclone.
- Расписание и retention-политики через UI, без правки crontab.
- Уведомления по email или через HTTP-запрос при успехе/ошибке.
Стоит выбирать Duplicati, если: вы администрируете сервер не каждый день и хотите визуально видеть статус бэкапов; в команде есть люди, которым проще открыть страницу в браузере, чем зайти по SSH; бэкапите разнородные файловые данные (не одну БД), где полезен файловый браузер для точечного восстановления.
Не самый удачный выбор, если нужен максимальный перформанс на терабайтных объёмах (restic и borg обычно быстрее и экономнее по памяти), важна декларативная конфигурация в git (Duplicati хранит состояние в собственной SQLite-базе, а не в plain-текстовых конфигах), или сервер совсем слабый — Mono-процесс под нагрузкой ест заметно больше памяти, чем компактный Go-бинарник restic.
Сравнить подходы можно в статье про установку restic на VPS — тот же класс задач, но через CLI.
Установка в Docker на VPS
Проще всего поднять Duplicati образом от LinuxServer.io — он уже настроен на постоянный конфиг и типовые тома. Понадобится Docker и docker-compose на сервере.
# docker-compose.yml
services:
duplicati:
image: lscr.io/linuxserver/duplicati:latest
container_name: duplicati
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Moscow
# - CLI_ARGS= #optional, для доп. флагов Duplicati
- SETTINGS_ENCRYPTION_KEY=замените-на-случайную-строку
volumes:
- ./config:/config
- ./backups:/backups # локальное хранилище назначения
- /home:/source/home:ro # что бэкапим — монтируем read-only
- /etc:/source/etc:ro
ports:
- "127.0.0.1:8200:8200"
restart: unless-stopped
Обратите внимание на порт: он проброшен только на 127.0.0.1, то есть снаружи веб-интерфейс недоступен напрямую — это осознанное решение, у Duplicati в базовой поставке нет надёжной защиты от брутфорса на уровне приложения. Доступ наружу дайте через SSH-туннель (ssh -L 8200:localhost:8200 user@server) или через reverse proxy с базовой авторизацией и TLS.
docker compose up -d
docker compose logs -f duplicati
После старта откройте http://localhost:8200 (через туннель) и сразу задайте пароль на вход — Settings → Options → «Require a password to access the user interface». Без этого шага любой, кто дотянется до порта, получает полный доступ к бэкапам и их удалению.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНастройка первого задания бэкапа через веб-интерфейс
Создание задания — мастер из нескольких шагов:
- General — имя задания (например,
home-backup) и способ шифрования: AES-256 (встроенный) с passphrase или GPG. Passphrase сохраните отдельно и надёжно — без него данные не восстановить даже локально, это не «забыл пароль от сайта». - Backend — куда складывать бэкап: локальная папка, SFTP, S3-совместимое хранилище и так далее (подробнее ниже).
- Source Data — какие папки бэкапить. В контейнере это пути внутри
/source/..., которые вы примонтировали в docker-compose. Можно исключить по маске (*.tmp,*/node_modules/*,*/cache/*). - Schedule — расписание: ежедневно/еженедельно/ежемесячно, время запуска, разрешить ли запуск, если предыдущий ещё не завершился.
- Options — политика хранения версий, лимиты по размеру блока (
--blocksize, по умолчанию 100 КБ — для больших файлов имеет смысл увеличить до 1 МБ), throttling по скорости, число одновременных потоков загрузки.
После создания задание можно запустить вручную кнопкой Run — это лучший способ проверить, что всё настроено верно, не дожидаясь ночного расписания.
Куда складывать бэкапы: локально, S3, SFTP, Backblaze B2
Правило 3-2-1 никто не отменял: локальная копия бэкапа на том же диске, что и данные, спасает от случайного rm -rf, но не от отказа диска или сервера целиком. Duplicati поддерживает несколько типов назначений одновременно — можно завести два задания на разные бэкенды с одним источником.
| Бэкенд | Когда уместен | Особенности в Duplicati |
|---|---|---|
| Local folder / mounted drive | Быстрое восстановление, промежуточная копия | Не защищает от отказа сервера |
| SFTP (SSH) | Свой второй VPS в другой локации | Нужен только логин/пароль или ключ, порт 22 |
| S3-совместимое (Amazon S3, MinIO) | Долгосрочное хранение, гибкая ёмкость | Указываете access key, secret key, bucket, endpoint |
| Backblaze B2 | Дешёвое офсайт-хранение | Отдельный Application Key именно для бэкапов |
| WebDAV | Nextcloud и подобные | Универсально, но медленнее S3 |
Для офсайт-копии логично использовать отдельный сервер в другой стране: даже базовый VPS с диском под SFTP закрывает задачу «бэкап не на той же площадке, что и продакшен». Сколько ресурсов реально нужно под такую роль — в статье сколько ресурсов нужно VPS для бэкапов и архива, а выбор локации разобран в материале про VPS для бэкапов и архива.
Для SFTP-назначения в Duplicati backend выглядит так:
Storage Type: SFTP (SSH)
Server: 203.0.113.10
Port: 22
Path: /backups/duplicati
Username: backupuser
Authentication: Password / Client Certificate
Проверьте подключение кнопкой Test connection прямо в мастере — она честно покажет, доступен ли путь и хватает ли прав на запись, ещё до сохранения задания.
Расписание, версии и политика хранения (retention)
Без retention-политики бэкап будет расти бесконечно — каждая версия хранит уникальные блоки, и если файлы часто меняются, место кончится быстрее, чем кажется. В Options → Backup retention доступны варианты:
- Keep all backups — ничего не удаляется (годится только для коротких периодов или очень дешёвого хранилища).
- Smart backup retention — Duplicati сам прореживает версии: последние несколько хранятся все, дальше — по одной в день, потом по одной в неделю, потом по одной в месяц.
- Custom retention — явное правило вида
1W:1D,4W:1W,12M:1M(последнюю неделю — версия за каждый день, следующий месяц — раз в неделю, следующий год — раз в месяц).
# Пример custom retention для еженедельных полных архивов сайта
7D:1D,8W:1W,12M:1M
После смены политики не забывайте про Compact — операцию, которая физически освобождает место, удаляя блоки, на которые больше не ссылается ни одна оставшаяся версия. Duplicati делает это автоматически после каждого бэкапа, но на хранилищах с платой за запросы (некоторые S3-совместимые провайдеры) это заметная статья расходов — можно отключить автокомпакт (--no-auto-compact) и запускать его отдельно, раз в неделю.
Восстановление данных: из веб-интерфейса и Disaster Recovery
Восстановление — то, ради чего всё затевалось, и именно его стоит регулярно проверять на тестовых данных, а не верить, что «раз бэкап зелёный — всё ок».
Обычное восстановление (сервер и Duplicati живы):
- Откройте задание → вкладка Restore.
- Выберите версию по дате — файловый браузер покажет содержимое именно этого снапшота.
- Отметьте файлы или папки целиком, выберите «Restore to original location» или «Restore to another location» (полезно, чтобы не перезаписать текущие файлы, а сравнить).
- При конфликте имён Duplicati предложит перезаписать, пропустить или сохранить с суффиксом.
Disaster Recovery (сервер потерян, конфигурация Duplicati недоступна) — сценарий, который проверяют реже всего, а нужен именно тогда, когда всё остальное уже пошло не так:
- На новом сервере поднимите пустой Duplicati (тем же docker-compose).
- На экране логина есть ссылка Restore from backup files directly — не нужно сначала пересоздавать задание.
- Укажите тип хранилища и параметры доступа к бэкапу (тот же S3/SFTP, где лежат данные).
- Введите passphrase шифрования — без него дальше пути нет, поэтому его нужно хранить отдельно от бэкапируемого сервера (менеджер паролей, зашифрованный файл в другом месте).
- Duplicati скачает служебные файлы (
dlist,dindex), покажет список версий и даст восстановить нужные данные напрямую, даже не создавая полноценное задание.
Отдельно проверьте восстановление баз данных — частая причина «бэкап есть, а сервис не поднимается»: для СУБД нужен консистентный дамп (pg_dump/mysqldump) до передачи файла в Duplicati, а не бэкап сырых файлов на живую. Общие грабли при восстановлении БД разобраны в статье про восстановление базы данных из бэкапа на практике.
Мониторинг, уведомления и типичные проблемы
Бэкап, о падении которого никто не узнал, — это отсутствие бэкапа с задержкой. В Duplicati уведомления настраиваются в Settings → General:
send-mail-to = admin@example.com
send-mail-level = Fatal,Error,Warning
send-mail-smtp-server = smtp.example.com:587
Либо через HTTP-хук (send-http-url) на сервис вроде healthchecks.io, который поднимет тревогу, если бэкап не отчитался вовремя — принцип dead man's switch надёжнее, чем «письмо только при ошибке», потому что ловит и ситуацию, когда задание вообще перестало запускаться. Как это настроить в общем виде — в статье про мониторинг cron-задач через healthchecks.io.
Частые проблемы на практике:
- «Database is locked» — обычно из-за перезапуска контейнера во время бэкапа или параллельного запуска двух заданий с одной БД. Дождитесь завершения текущей операции или запустите Repair базы из UI.
- Рост потребления памяти на больших источниках — увеличьте
--blocksize(меньше метаданных на блок) и ограничьте--asynchronous-concurrent-upload-limit. - Зависание на «Verifying backend files» — по умолчанию Duplicati проверяет случайную выборку файлов на бэкенде при каждом запуске; на медленном SFTP это заметно. Настраивается через
--backup-test-samples.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Чем Duplicati принципиально отличается от restic или borg?
Веб-интерфейсом и встроенным планировщиком вместо CLI и cron. Внутренняя механика похожа — блочная дедупликация и шифрование, — но Duplicati хранит состояние в SQLite-базе, а не в простых читаемых репозиториях, и это чуть менее «прозрачно» для отладки руками.
Нужен ли отдельный сервер под сами бэкапы или можно на том же VPS?
Локальная копия на том же сервере — не полноценный бэкап, а страховка от случайного удаления файла. Для реальной защиты от отказа сервера нужна вторая точка — второй VPS в другой локации или облачное хранилище, куда Duplicati отправляет данные по SFTP/S3.
Что будет, если забыть passphrase шифрования?
Данные восстановить не получится — Duplicati использует AES-256, и это не «сбросить пароль через почту», а полная потеря доступа к зашифрованным блокам. Passphrase нужно хранить отдельно от сервера-источника, в менеджере паролей или зашифрованном архиве.
Можно ли бэкапить так Docker-тома и базы данных?
Файлы тома — да, но для баз данных правильнее сначала сделать консистентный дамп (pg_dump, mysqldump) во временный файл, а уже его отдавать в задание Duplicati — иначе есть риск получить бэкап БД в промежуточном, несогласованном состоянии.
Как часто проверять, что восстановление реально работает?
Минимум раз в квартал — разворачивать тестовое восстановление на отдельном сервере или в отдельную папку и сверять контрольные файлы. Бэкап без проверенного восстановления — это предположение, а не гарантия.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →