Перейти к основному содержимому
  1. Posts/
  2. Backup/

Duplicati: резервное копирование с шифрованием для домашнего сервера

··968 слов·5 минут· loading · loading · ·
Stilicho2011
Автор
Stilicho2011
Пишу о homelab, self-hosting, автоматизации и open-source решениях
Оглавление
Backup - This article is part of a series.
Part : This Article

Если вам понравилась настоящая статья, то можете поддержать автора став спонсором на бусти.

Duplicati + Docker: автоматические бэкапы за 10 минут
#

Резервные копии - одна из самых важных частей любой инфраструктуры.
Даже в домашнем Homelab, да и, собственно говоря, везде, потеря данных может стоить очень дорого. Причём речь идёт не только о самих данных, но и о времени, которое потребуется на их восстановление. Не исключено, что последнее окажется даже дороже.

Note

У меня на YouTube-канале есть ролик про установку и настройку Proxmox Backup Server. Но это решение специфическое, и не все используют Proxmox в Homelab.

В этой статье разберём:

  • что такое Duplicati
  • как установить его на сервер
  • как настроить автоматические бэкапы
  • как хранить резервные копии локально и в облаке

Что такое Duplicati
#

Duplicati - это open-source система резервного копирования, которая поддерживает:

  • шифрование AES-256
  • дедупликацию
  • инкрементальные бэкапы
  • хранение в облаках
  • web-интерфейс управления

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

  • S3
  • Backblaze B2
  • Google Drive
  • WebDAV
  • FTP / SFTP
  • локальные диски
  • NAS

Это делает его отличным решением для Homelab и self-hosted инфраструктуры, так как поддерживает все что надо обычному хоумлабберу.


Основные возможности
#

Из основных возможностей, наверное, стоит обратить внимание на:

Шифрование
#

Все данные могут шифроваться на стороне клиента перед отправкой.

Поддерживаются:

  • AES-256
  • passphrase-защита

Это означает, что даже облачный провайдер не сможет прочитать ваши данные. То есть можно быть относительно спокойным за бэкапы в облаке и за то, что никто не будет тренировать свои ИИ-модели на ваших данных.


Инкрементальные бэкапы
#

Duplicati хранит данные блоками.

Это позволяет:

  • сохранять только изменения
  • уменьшать объём хранилища
  • ускорять резервное копирование

Так как система сохраняет только ту информацию, которая изменилась, то все происходит очень быстро, а нам проще планировать объем дискового пространства


Web-интерфейс
#

После установки вы получаете удобную web-панель.

Через неё можно:

  • создавать задания
  • управлять расписанием
  • восстанавливать файлы
  • проверять состояние бэкапов

Тут, в общем-то, всё понятно. Конечно, администраторы со стажем могут кривить рот - мол, графический интерфейс это «пошло». Но не поддавайтесь на провокации. Интерфейс - это нормально. Если, конечно, его не школьник рисовал.


Docker compose файл из видео
#

За основу я взял образ (сборку) от linuxserver.io как наиболее user-friendly вариант для homelab

services:   # Раздел для описания всех сервисов Docker
  duplicati:   # Имя сервиса
    image: linuxserver/duplicati:latest   # Образ Docker, последняя версия Duplicati от LinuxServer
    container_name: duplicati   # Имя контейнера в Docker
    hostname: duplicati   # Имя хоста внутри контейнера
    entrypoint:   # Переопределение точки входа контейнера
      - /init   # Используется скрипт /init, предоставляемый образом LinuxServer
    #ports:   # Публикация портов контейнера на хосте
    #  - 8200:8200 # MGMT UI - интерфейс управления Duplicati будет доступен на порту 8200
    #expose:   # Порт, который будет виден другим контейнерам в сети Docker
    #  - 8200
    environment:   # Переменные окружения для контейнера
      - PUID=0   # UID пользователя внутри контейнера (0 = root, обычно для теста/администрирования)
      - PGID=1000   # GID группы внутри контейнера (должен соответствовать вашей группе на хосте)
      - TZ=Europe/Moscow   # Часовой пояс для контейнера
      - SETTINGS_ENCRYPTION_KEY=B2NcaR2X6gwSGt # Ключ шифрования Duplicati (необходимо изменить!)
      - DUPLICATI__WEBSERVICE_PASSWORD=adminadminadmin # Пароль для веб-интерфейса (изменить обязательно!)
    restart: unless-stopped   # Контейнер автоматически перезапустится, если он упадет, кроме явной остановки
    volumes:   # Монтирование директорий хоста в контейнер
      - /home/stilicho/docker/duplicati/backups:/backups   # Директория для хранения бэкапов
      - /home/stilicho/docker/duplicati/config:/config   # Конфигурация и настройки Duplicati
      - /home/stilicho/docker:/source # Директория с исходными файлами для бэкапа (можно изменить)
    networks:   # Сеть Docker, в которой будет работать контейнер
      - proxy
    labels:   # Метки для Traefik (обратного прокси)
      - "traefik.enable=true"   # Включить обработку Traefik для этого контейнера
      - "traefik.docker.network=proxy"   # Использовать сеть proxy для Traefik
      - "traefik.http.routers.duplicati.entrypoints=web"   # Входной пункт Traefik (порт 80)
      - "traefik.http.routers.duplicati.rule=Host(`duplicati.stilicho.ru`)"   # Домен, по которому доступен сервис
      - "traefik.http.middlewares.duplicati-https-redirect.redirectscheme.scheme=https"   # Перенаправление HTTP -> HTTPS
      - "traefik.http.routers.duplicati.middlewares=duplicati-https-redirect"   # Подключаем middleware для редиректа
      - "traefik.http.routers.duplicati-secure.entrypoints=websecure"   # HTTPS маршрут Traefik (порт 443)
      - "traefik.http.routers.duplicati-secure.rule=Host(`duplicati.stilicho.ru`)"   # Домен HTTPS
      - "traefik.http.routers.duplicati-secure.tls=true"   # Включаем TLS
      - "traefik.http.routers.duplicati-secure.tls.certresolver=cloudflare"   # Используем Cloudflare для генерации сертификата
      - "traefik.http.routers.duplicati-secure.service=duplicati"   # Назначаем сервис для маршрута
      - "traefik.http.services.duplicati.loadbalancer.server.port=8200"   # Порт сервиса внутри контейнера для Traefik
      #- traefik.http.routers.duplicati.middlewares=ipwhitelist@file   # (закомментировано) пример ограничения по IP

networks:   # Раздел для описания сетей
    proxy:   # Сеть с именем proxy
        external: true   # Используем внешнюю сеть Docker, созданную заранее (например для Traefik)
Important
  • PUID=0 означает root в контейнере. Для production лучше использовать непривилегированного пользователя.
  • SETTINGS_ENCRYPTION_KEY и DUPLICATI__WEBSERVICE_PASSWORD обязательно нужно менять на свои, иначе данные и веб-интерфейс небезопасны.
  • /source монтируется весь /home/stilicho/docker, если не нужно все бэкапить - лучше сузить путь до конкретных папок.
  • Traefik labels управляют HTTPS и редиректами. Если Traefik ещё не настроен - их можно удалить до настройки прокси.
  • пароли и другие чувствительные данные желательно указывать с помощью отдельного файла с окружением .env

Работа с приложением
#

Так как у меня есть видеообзор, в этой статье я остановлюсь только на ключевых деталях.

После установки приложения переходим по поддоменному имени. Откроется окно приветствия, где нужно ввести пароль администратора, указанный в docker-compose файле.

Экран входа в веб-интерфейс Duplicati - ввод пароля администратора

Нас встречает довольно минималистичное меню с «выжигающим роговицу» светлым режимом. Ночной режим можно включить в разделе Settings.

Главный экран Duplicati со списком бэкапов (пока пустой)

В разделе Add backup можно выбрать нужное действие: создать новый бэкап или восстановить его из конфигурационного файла (если он у вас есть).

Экран Add backup: выбор создания нового бэкапа или импорта из файла

Так как нам нужно создать бэкап, выбираем опцию Add new backup.

В появившемся меню задаём необходимые параметры. При желании можно включить шифрование бэкапа.

Общие настройки бэкапа: имя, описание и шифрование AES-256

В следующих двух окнах выбираем:

  • место хранения бэкапа
  • используемый сервис

В видео я выбрал File system, так как бэкапил демонстрационные файлы на примонтированное через fstab хранилище.

Выбор типа хранилища назначения: File system, S3, SSH и другие
Выбор пути в файловой системе для хранения бэкапа

Приложение предложит протестировать соединение.

Диалог проверки подключения к хранилищу назначения

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

В нашем случае выбираем директорию source, так как она указана в docker-compose файле:

Выбор директории source для резервного копирования
 /home/stilicho/docker:/source # Директория с исходными файлами для бэкапа (можно изменить)

Далее задаём расписание бэкапов.

Настройка расписания бэкапов - ежедневный запуск в 13:00

В следующем окне настраиваются дополнительные параметры: размер томов, количество хранимых копий и так далее.

Дополнительные параметры бэкапа: размер тома и политика хранения

После завершения настройки в разделе Home появятся ваши задания для резервного копирования.

Созданное задание резервного копирования в списке My backups

Как я уже писал выше, чтобы не усложнять статью, я не буду подробно разбирать процесс восстановления. В видеообзоре он показан, и там всё достаточно логично и интуитивно понятно.

Backup - This article is part of a series.
Part : This Article

Related

Podman: обратная сторона медали - о каких недостатках стоит знать заранее

·1951 слово·10 минут· loading · loading
Разбираем реальные ограничения Podman: сеть и порты в rootless-режиме, неполная совместимость с Docker Compose, виртуальная машина на macOS/Windows вместо демона, отсутствие оркестрации на несколько хостов, менее зрелая экосистема и более высокий порог входа для новичков.

Docker упёрся в лимит сетей: как я это диагностировал и починил через default-address-pools

··976 слов·5 минут· loading · loading
Разбор реального кейса: после перехода на отдельную Docker-сеть под каждый compose-стэк упёрся в лимит could not find an available, non-overlapping IPv4 address pool. Почему так происходит, как это продиагностировать и как навсегда решить через default-address-pools в daemon.json.