opened image

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

 

 

Duplicati - инструмент резервного копирования с веб-интерфейсом, который работает на Windows, Linux и macOS. Поддерживает S3, Backblaze B2, Google Drive, OneDrive, SFTP и ещё 15+ бэкендов. Шифрование AES-256 или GPG, расписания, email-уведомления - всё через браузер. Версия 2.0.9 актуальна на момент написания. Разберём установку через Docker, настройку бэкапа и восстановление.

 

 

Установка через Docker

 

Docker - самый удобный способ запустить Duplicati на Linux без проблем с зависимостями.

 

mkdir -p /opt/duplicati/{config,backups}

docker run -d \
  --name=duplicati \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Europe/Kiev \
  -p 127.0.0.1:8200:8200 \
  -v /opt/duplicati/config:/config \
  -v /opt/duplicati/backups:/backups \
  -v /var/www:/source/www:ro \
  -v /etc:/source/etc:ro \
  -v /home:/source/home:ro \
  --restart unless-stopped \
  lscr.io/linuxserver/duplicati:latest

 

Флаг :ro (read-only) у монтируемых директорий с данными - хорошая практика. Duplicati не должен изменять исходные файлы.

 

Проверяем запуск:

docker ps | grep duplicati
docker logs duplicati

 

 

 

 

Открытие веб-интерфейса

 

По умолчанию Duplicati слушает на порту 8200. Для безопасного доступа через nginx:

 

server {
    listen 443 ssl;
    server_name backup.example.com;

    ssl_certificate /etc/letsencrypt/live/backup.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/backup.example.com/privkey.pem;

    # Доступ только с вашего IP
    allow 185.10.20.30;
    deny all;

    location / {
        proxy_pass http://127.0.0.1:8200;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

 

Первый вход: откройте https://backup.example.com в браузере. При первом открытии Duplicati предложит установить пароль - обязательно сделайте это.

 

 

Создание задания бэкапа

 

В веб-интерфейсе нажмите "Add backup""Configure a new backup".

 

Шаг 1: Общие настройки

  • Name: Website backup

  • Encryption: AES-256 (встроенный) - вводим пароль шифрования

Пароль шифрования нельзя восстановить. Запишите его отдельно от данных.

 

Шаг 2: Хранилище (Destination)

Backblaze B2:

  • Storage Type: B2 Cloud Storage

  • BucketName: my-duplicati-backups

  • Account ID: your-account-id

  • Application Key: your-application-key

  • Folder path: myserver/website

Amazon S3:

  • Storage Type: S3 Compatible

  • Bucket name: my-duplicati-s3

  • AWS Access Key ID / AWS Secret Access Key

  • Region: eu-central-1

SFTP (другой сервер):

  • Storage Type: SSH (SFTP)

  • Server: backup-server.example.com:22

  • Username/Password или SSH-ключ

  • Path: /backups/myserver

 

Нажимаем "Test connection" - должно появиться "Connection worked!".

 

Шаг 3: Источник данных

Выбираем папки для бэкапа. В нашем случае Duplicati видит /source/www, /source/etc, /source/home (смонтированные директории хоста).

Можно исключить директории и маски:

  • *.log - исключить все логи

  • */cache/* - исключить кэш

  • */node_modules/* - исключить зависимости

 

Шаг 4: Расписание

Рекомендуемое расписание для сайта:

  • Ежедневно в 03:00 UTC

  • Запускать только при подключении к интернету - оставить отключённым (VPS всегда онлайн)

 

Шаг 5: Параметры хранения

  • Retention: Keep all backups for 7 days, keep daily for 4 weeks, keep weekly for 3 months

  • Remote volume size: 50 МБ (оптимально для большинства задач)

  • Upload verification: включить

Нажимаем "Save".

 

 

Запуск первого бэкапа

 

На странице заданий нажимаем кнопку запуска. Прогресс видно в реальном времени:

 

Backup started: Website backup
Scanning 4,521 files (2.3 GB)
Uploading: chunk 1/47 (50 MB)
Uploading: chunk 2/47 (50 MB)
...
Backup completed in 4 minutes 23 seconds
Added: 2.3 GB, Deleted: 0 bytes, Modified: 0 bytes

 

 

 

 

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

 

В настройках задания → Options → Advanced options:

 

send-mail-to = admin@example.com
send-mail-from = duplicati@example.com
send-mail-subject = Duplicati backup {backup-name} {status}
send-mail-body = {message}
send-mail-smtp = smtp.gmail.com:587
send-mail-username = gmail@gmail.com
send-mail-password = app-password-here
send-mail-level = Success,Warning,Error

 

Для Gmail нужен App Password (не основной пароль) - создаётся в настройках аккаунта Google при включённой 2FA.

 

 

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

 

Полное восстановление

  1. В веб-интерфейсе откройте задание

  2. Нажмите "Restore"

  3. Выберите точку восстановления (дату/время)

  4. Укажите место восстановления: оригинальное или альтернативное

  5. Нажмите "Restore"

 

Восстановление конкретных файлов

  1. Restore → выбираем дату

  2. Разворачиваем дерево файлов

  3. Отмечаем конкретные файлы или папки

  4. Указываем путь назначения

  5. Restore

 

Восстановление через командную строку

 

Если веб-интерфейс недоступен:

 

docker exec -it duplicati duplicati-cli restore \
  "b2://my-duplicati-backups/myserver/website" \
  --encrypt-passphrase="your-encryption-password" \
  --b2-accountid="your-account-id" \
  --b2-applicationkey="your-application-key" \
  --restore-path="/tmp/restore" \
  "*"

 

Восстановить конкретный файл:

docker exec -it duplicati duplicati-cli restore \
  "b2://my-duplicati-backups/myserver/website" \
  --encrypt-passphrase="your-encryption-password" \
  --b2-accountid="your-account-id" \
  --b2-applicationkey="your-application-key" \
  --restore-path="/tmp/restore" \
  "/source/www/wp-config.php"

 

 

Управление через командную строку

 

Все задания доступны через CLI внутри контейнера:

# Список заданий
docker exec duplicati duplicati-cli list-backups

# Запуск задания по ID
docker exec duplicati duplicati-cli run-backup "Website backup"

# Список снапшотов
docker exec duplicati duplicati-cli list-backup-sets \
  "b2://my-duplicati-backups/myserver/website" \
  --encrypt-passphrase="password" \
  --b2-accountid="id" \
  --b2-applicationkey="key"

# Проверка целостности
docker exec duplicati duplicati-cli test \
  "b2://my-duplicati-backups/myserver/website" \
  --encrypt-passphrase="password" \
  --b2-accountid="id" \
  --b2-applicationkey="key" \
  all

 

 

 

 

Параметры производительности

 

В Advanced options задания можно настроить:

# Ограничить скорость загрузки (КБ/с)
upload-speed=2048

# Ограничить скорость скачивания
download-speed=10240

# Число параллельных потоков загрузки
thread-priority=low

# Размер чанков (50 МБ по умолчанию)
blocksize=50mb

# Использовать сжатие
compression-module=zip

 

Размер чанка влияет на скорость и число файлов в хранилище. Меньший размер - больше файлов, лучше дедупликация. Больший размер - меньше транзакций, дешевле при тарификации по запросам.

 

 

Обновление Duplicati

 

docker pull lscr.io/linuxserver/duplicati:latest
docker stop duplicati
docker rm duplicati

# Запускаем снова той же командой
docker run -d \
  --name=duplicati \
  ...

 

Конфигурация сохранена в /opt/duplicati/config - при обновлении контейнера данные сохраняются.

 

 

Мониторинг через Duplicati Server

 

На странице About → System info можно посмотреть:

  • Размер базы данных конфигурации

  • Статистику последних бэкапов

  • Версию компонентов

 

Для внешнего мониторинга можно использовать Uptime Kuma с проверкой HTTP-статуса https://backup.example.com - если Duplicati упал, мониторинг это поймает.

 

 

Итог

 

Duplicati закрывает задачу бэкапов в облако с минимальным порогом входа - настройка через веб-браузер занимает 10 минут. AES-256 шифрование на стороне клиента означает, что данные в B2/S3 нечитаемы без вашего пароля. Главные правила: хранить пароль шифрования отдельно от данных, проверять работу уведомлений об ошибках и делать тестовое восстановление хотя бы раз в квартал.