
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 backupEncryption: AES-256 (встроенный) - вводим пароль шифрования
Пароль шифрования нельзя восстановить. Запишите его отдельно от данных.
Шаг 2: Хранилище (Destination)
Backblaze B2:
Storage Type: B2 Cloud Storage
BucketName:
my-duplicati-backupsAccount ID:
your-account-idApplication Key:
your-application-keyFolder path:
myserver/website
Amazon S3:
Storage Type: S3 Compatible
Bucket name:
my-duplicati-s3AWS Access Key ID / AWS Secret Access Key
Region:
eu-central-1
SFTP (другой сервер):
Storage Type: SSH (SFTP)
Server:
backup-server.example.com:22Username/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.
Восстановление данных
Полное восстановление
В веб-интерфейсе откройте задание
Нажмите "Restore"
Выберите точку восстановления (дату/время)
Укажите место восстановления: оригинальное или альтернативное
Нажмите "Restore"
Восстановление конкретных файлов
Restore → выбираем дату
Разворачиваем дерево файлов
Отмечаем конкретные файлы или папки
Указываем путь назначения
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 нечитаемы без вашего пароля. Главные правила: хранить пароль шифрования отдельно от данных, проверять работу уведомлений об ошибках и делать тестовое восстановление хотя бы раз в квартал.