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

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

·987 слов·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 файле.

Правило для доступа к WebGUI (порт 8006)

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

Правило для доступа к WebGUI (порт 8006)

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

Правило для доступа к WebGUI (порт 8006)

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

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

Правило для доступа к WebGUI (порт 8006)

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

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

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

Правило для доступа к WebGUI (порт 8006)
Правило для доступа к WebGUI (порт 8006)

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

Правило для доступа к WebGUI (порт 8006)

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

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

Правило для доступа к WebGUI (порт 8006)

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

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

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

Правило для доступа к WebGUI (порт 8006)

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

Правило для доступа к WebGUI (порт 8006)

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

Правило для доступа к WebGUI (порт 8006)

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

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

Related

Grimmory — self-hosted библиотека и читалка для вашей коллекции книг

·1192 слов·6 минут· loading · loading
Подробная инструкция по установке и настройке Grimmory: развёртывание в Docker, добавление книг, организация библиотеки и использование встроенной веб-читалки.