Duplicati: бэкап в облако с шифрованием и расписанием

Что такое Duplicati и зачем он нужен

Duplicati — это бесплатное решение для резервного копирования с открытым исходным кодом, которое поддерживает более 20 облачных провайдеров и протоколов хранения. Программа работает на Windows, Linux и macOS, предоставляя веб-интерфейс для управления заданиями. Главное преимущество — встроенное шифрование AES-256 на стороне клиента: данные шифруются до отправки в облако, что гарантирует конфиденциальность даже при компрометации хранилища.

В корпоративной среде Duplicati закрывает несколько задач: бэкап файловых серверов в S3-совместимое хранилище, резервное копирование конфигураций Linux-серверов, дублирование критичных баз данных на удалённую площадку. При этом инкрементальная дедупликация позволяет экономить трафик и место — после первого полного бэкапа передаются только изменённые блоки данных.

Duplicati использует блочную дедупликацию: файлы разбиваются на блоки фиксированного размера (по умолчанию 100 КБ), каждый блок хешируется, и повторные блоки не передаются повторно. Это особенно эффективно для виртуальных машин и баз данных, где при ежедневных изменениях меняется лишь малая часть данных.

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

Duplicati поддерживает широкий набор целевых хранилищ:

  • S3-совместимые — Amazon S3, MinIO, Wasabi, Backblaze B2
  • Облачные диски — Google Drive, OneDrive, Dropbox
  • Протоколы — FTP, SFTP, WebDAV, OpenStack Swift
  • Локальные — сетевые папки SMB/CIFS, USB-диски

Для корпоративных сценариев рекомендуется S3-совместимое хранилище (MinIO или Wasabi) — это даёт предсказуемую стоимость, API-совместимость и контроль над данными.

Установка Duplicati на Linux и Windows

Установка Duplicati на основных платформах выполняется за несколько минут. После установки программа запускается как служба и предоставляет веб-интерфейс на порту 8200.

Установка на Ubuntu/Debian

Для установки на Debian-подобных системах используется официальный deb-пакет:

# Установка зависимостей
sudo apt update
sudo apt install -y mono-runtime libmono-system-net-http4.0-cil libmono-microsoft-csharp4.0-cil

# Скачивание последней версии
wget https://updates.duplicati.com/beta/duplicati_2.0.8.1-1_all.deb

# Установка
sudo dpkg -i duplicati_2.0.8.1-1_all.deb
sudo apt install -f

# Запуск как systemd-сервис
sudo systemctl enable duplicati
sudo systemctl start duplicati

После запуска интерфейс доступен по адресу http://localhost:8200. Для удалённого доступа отредактируйте файл /etc/default/duplicati и добавьте параметр --webservice-interface=any.

Установка на Windows Server

На Windows Server скачайте MSI-установщик с официального сайта и запустите его. При установке выберите опцию «Install as Windows Service» — это обеспечит автозапуск при перезагрузке сервера:

REM Установка через командную строку (silent)
msiexec /i Duplicati-2.0.8.1.msi /quiet /norestart INSTALLFOLDER="C:\Program Files\Duplicati 2"

REM Проверка службы
sc query DuplicatiService

REM Если служба не запустилась
net start DuplicatiService

В корпоративной среде рекомендуется установить пароль на веб-интерфейс через параметры запуска службы: --webservice-password=ВашПароль.

Настройка бэкапа в S3-совместимое хранилище

Рассмотрим настройку задания резервного копирования в MinIO — self-hosted S3-хранилище, которое часто используется в корпоративной инфраструктуре.

Создание задания через веб-интерфейс

В веб-интерфейсе Duplicati нажмите «Add backup» и настройте параметры:

  1. General — задайте имя задания и пароль шифрования (запишите его — без пароля восстановить данные невозможно)
  2. Destination — выберите «S3 Compatible», укажите сервер MinIO, Access Key и Secret Key
  3. Source Data — укажите папки для бэкапа, настройте фильтры исключений
  4. Schedule — задайте расписание (например, ежедневно в 02:00)
  5. Options — настройте retention policy

Параметры хранилища MinIO:

Server: minio.example.com:9000
Bucket: server-backups
Region: us-east-1
Storage class: (пусто)
Use SSL: Да (если настроен TLS)

Настройка через командную строку

Для автоматизации и массового деплоя удобнее использовать CLI-интерфейс:

# Создание задания бэкапа через CLI
duplicati-cli backup \
  "s3://minio.example.com:9000/server-backups?s3-server-name=minio.example.com" \
  /etc /var/www /home \
  --passphrase="SecureBackupKey2024!" \
  --retention-policy="1W:1D,4W:1W,12M:1M" \
  --s3-ext-accessid="minioadmin" \
  --s3-ext-secretkey="minioadminpassword" \
  --blocksize=1MB \
  --dblock-size=50MB \
  --exclude="*.tmp" \
  --exclude="*.log" \
  --exclude="/var/cache/*"

# Проверка целостности последнего бэкапа
duplicati-cli test \
  "s3://minio.example.com:9000/server-backups" \
  --passphrase="SecureBackupKey2024!" \
  --s3-ext-accessid="minioadmin" \
  --s3-ext-secretkey="minioadminpassword" \
  all

Параметр --retention-policy задаёт политику хранения: ежедневные бэкапы за последнюю неделю, еженедельные за 4 недели, ежемесячные за 12 месяцев. Параметр --dblock-size определяет размер архивных томов — для медленных каналов рекомендуется 50 МБ.

Шифрование и безопасность бэкапов

Шифрование в Duplicati реализовано по принципу «encrypt before upload» — данные шифруются на стороне клиента алгоритмом AES-256, и в хранилище попадает только зашифрованный поток. Даже если злоумышленник получит доступ к S3-бакету, без пароля расшифровать данные невозможно.

Ключ шифрования генерируется из пароля (passphrase) с использованием функции PBKDF2 с 10000 итерациями. Важно понимать: потеря пароля означает полную потерю бэкапов. Рекомендуется хранить пароль в защищённом хранилище секретов (HashiCorp Vault, KeePass, или хотя бы в запечатанном конверте в сейфе).

Дополнительные меры безопасности

Помимо шифрования, рекомендуется реализовать следующие меры:

  • Отдельный S3-ключ — создайте IAM-пользователя с минимальными правами (только PutObject/GetObject/DeleteObject на конкретный бакет)
  • Versioning на бакете — включите версионирование S3 для защиты от случайного удаления
  • Object Lock — для защиты от ransomware включите WORM-режим (Write Once Read Many)

Пример IAM-политики для MinIO:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": [
      "s3:PutObject",
      "s3:GetObject",
      "s3:DeleteObject",
      "s3:ListBucket"
    ],
    "Resource": [
      "arn:aws:s3:::server-backups",
      "arn:aws:s3:::server-backups/*"
    ]
  }]
}

Расписание и политики хранения

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

Рекомендуемые схемы расписания

Для разных типов данных рекомендуются разные стратегии:

Тип данныхЧастотаRetentionПример
Базы данныхКаждые 6 часов7D:6h, 4W:1D, 6M:1WMySQL дампы, PostgreSQL
Файловые серверыЕжедневно1W:1D, 4W:1W, 12M:1M/home, /var/www
КонфигурацииЕженедельно4W:1W, 12M:1M/etc, Docker Compose
Виртуальные машиныЕженедельно4W:1W, 3M:1Mqcow2, vmdk

Формат retention policy: период_хранения:интервал_между_бэкапами. Например, 1W:1D означает «за последнюю неделю хранить по одной копии в день».

Настройка уведомлений

Duplicati поддерживает отправку уведомлений о результатах бэкапа по email и через HTTP-вебхуки. Для настройки email-уведомлений добавьте параметры:

--send-mail-to=admin@example.com
--send-mail-from=duplicati@example.com
--send-mail-url=smtp://mail.example.com:587
--send-mail-username=duplicati@example.com
--send-mail-password=MailPassword123
--send-mail-level=Warning,Error
--send-mail-subject=Duplicati %OPERATIONNAME% - %PARSEDRESULT%

Для интеграции с системами мониторинга (Zabbix, Prometheus) используйте HTTP-вебхук: --send-http-url=http://monitoring.example.com/api/duplicati. Тело POST-запроса содержит JSON с результатами задания.

Восстановление данных из бэкапа

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

Восстановление через CLI

Для восстановления конкретной директории на определённую дату используйте команду restore:

# Восстановление всех файлов из последнего бэкапа
duplicati-cli restore \
  "s3://minio.example.com:9000/server-backups" \
  --passphrase="SecureBackupKey2024!" \
  --s3-ext-accessid="minioadmin" \
  --s3-ext-secretkey="minioadminpassword" \
  --restore-path=/tmp/restored/

# Восстановление конкретного файла на конкретную дату
duplicati-cli restore \
  "s3://minio.example.com:9000/server-backups" \
  --time="2024-01-15T02:00:00" \
  --passphrase="SecureBackupKey2024!" \
  --restore-path=/tmp/restored/ \
  "/etc/nginx/nginx.conf"

# Список доступных версий бэкапа
duplicati-cli list \
  "s3://minio.example.com:9000/server-backups" \
  --passphrase="SecureBackupKey2024!"

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

Проверка целостности бэкапов

Регулярная проверка целостности — обязательная практика. Настройте периодический запуск команды verify через cron:

# /etc/cron.weekly/duplicati-verify
#!/bin/bash
duplicati-cli test \
  "s3://minio.example.com:9000/server-backups" \
  --passphrase="SecureBackupKey2024!" \
  --s3-ext-accessid="minioadmin" \
  --s3-ext-secretkey="minioadminpassword" \
  5% 2>&1 | mail -s "Duplicati Integrity Check" admin@example.com

Параметр 5% означает проверку случайных 5% от всех архивных томов — это даёт хороший баланс между надёжностью и нагрузкой на хранилище.

Мониторинг и устранение неполадок

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

Типичные проблемы и решения

Наиболее частые проблемы и способы их устранения:

  • «Backend connection timed out» — увеличьте таймаут: --http-operation-timeout=10m. Проверьте firewall и DNS.
  • «Local database is broken» — пересоздайте локальную БД: duplicati-cli repair <URL>. Это не затронет бэкапы в хранилище.
  • «Remote file listing mismatch» — выполните duplicati-cli repair <URL> --rebuild-missing-dblock-files.
  • Медленные бэкапы — увеличьте --asynchronous-upload-limit=4 для параллельной загрузки.

Для интеграции с Prometheus установите exporter:

# docker-compose.yml для мониторинга
services:
  duplicati-exporter:
    image: ghcr.io/tynor88/duplicati-exporter:latest
    environment:
      DUPLICATI_URL: http://duplicati:8200
    ports:
      - "9750:9750"

Часто задаваемые вопросы

Да, но рекомендуется сначала создать дамп базы через mysqldump или pg_dump, а затем бэкапить файлы дампов через Duplicati. Прямое копирование файлов БД без остановки сервера может привести к неконсистентному бэкапу. Создайте скрипт pre-backup, который выполняет дамп перед запуском задания Duplicati.

Duplicati 2.x находится в стадии beta, но успешно используется тысячами организаций. Для критичных данных рекомендуется дополнительно: регулярно тестировать восстановление, хранить бэкапы минимум в двух разных хранилищах, мониторить результаты заданий. Стабильность значительно выросла в версиях 2.0.7+.

Объём зависит от скорости изменения данных. Для типичного файлового сервера с 100 ГБ данных первый полный бэкап займёт ~100 ГБ (с учётом сжатия — 50-70 ГБ), а ежедневные инкременты — 1-5% от полного объёма. Дедупликация на уровне блоков обеспечивает эффективность: если файл переименован, но содержимое не изменилось, дополнительного места не потребуется.

Экспортируйте конфигурацию задания через веб-интерфейс (раздел «Export» в настройках задания) в формате JSON. На новом сервере импортируйте файл через «Add backup → Import from file». Обратите внимание: пароль шифрования не экспортируется — его нужно будет ввести вручную. Локальная БД создастся автоматически при первом запуске через команду repair.

Нужна помощь с настройкой?

Специалисты АйТи Фреш помогут с внедрением и настройкой — 15+ лет опыта, обслуживание от 15 000 ₽/мес

📞 Связаться с нами
#Duplicati#бэкап в облако#резервное копирование#шифрование бэкапов#инкрементальный бэкап#S3 бэкап#восстановление данных#Duplicati настройка
Комментарии 0

Оставить комментарий

загрузка...