Herkos

Власний сервер Blossom

Останнє оновлення: 27 жовтня 2026 року

Herkos Drive розрізає кожен файл на зашифровані блоки й зберігає їх на кількох серверах Blossom: три копії, щонайменше на двох видах серверів, і одна — на вашому власному сервері. Публічні сервери зберігають блоки безкоштовно, але нічого не обіцяють: вони можуть їх видалити, переповнитися або закритися.

Власний сервер Blossom зберігає вашу копію стільки, скільки вирішите ви, і приймає блоки лише від вашого Drive. Ця сторінка пояснює, як налаштувати такий сервер у три кроки, плюс щонічне резервне копіювання. Він добре доповнює власний поштовий релей, а все налаштування займає близько п'ятнадцяти хвилин, якщо у вас уже є сервер.

Який сервер обрати

blossom-server від hzrd149, версія 6.4.1 (6 жовтня 2026 року, ліцензія MIT). 27 жовтня 2026 року ми запустили його з наведеною нижче конфігурацією та власним кодом завантаження Drive і перевірили те, що потрібно Drive, а не те, що рекламує сервер:

Що робить Drive Результат
Завантажує зашифровані блоки по 8 MiB (application/octet-stream) Приймаються
Питає перед завантаженням (BUD-06) Відповідає й відхиляє будь-який інший ключ
Просить ваш сервер скопіювати блок із публічного (BUD-04) Скопійовано
Читає блок без ідентифікації Віддано байт у байт
Видаляє блок ключем, яким його завантажено Видалено: повторний запит дає 404
Завантаження з будь-якого іншого ключа Відхиляються (401)

Що вам знадобиться

Крок 1: запустіть сервер

Створіть для нього теку, наприклад /root/blossom, і збережіть у ній ці два файли. Перший — docker-compose.yml:

services:
  blossom:
    image: ghcr.io/hzrd149/blossom-server:6.4.1
    environment:
      BLOSSOM_REQUIRE_CONFIG: "1"
    ports:
      - "127.0.0.1:3000:3000"
    volumes:
      - data:/app/data
      - ./config.yml:/app/config.yml:ro
    restart: unless-stopped
volumes:
  data: {}

Другий — config.yml. Вкажіть свій домен у publicDomain, а ключ тому — там, де написано YOUR-VOLUME-KEY:

port: 3000
host: 0.0.0.0
publicDomain: blossom.example.com
storage:
  backend: local
  local:
    dir: ./data/blobs
  rules:
    - type: "*"
      expiration: 100 years
      pubkeys:
        - "YOUR-VOLUME-KEY"
upload:
  requireAuth: true
  maxSize: 104857600
  requirePubkeyInRule: true
mirror:
  enabled: true
  requireAuth: true
delete:
  requireAuth: true
list:
  enabled: false
media:
  enabled: false
report:
  enabled: false
landing:
  enabled: false

Що тут сказано: завантажувати блоки й просити копії може лише ваш ключ тому (requirePubkeyInRule), а блок зберігається, доки Drive його не видалить. Серверу потрібен строк зберігання в кожному правилі; 100 years без читання — це на практиці ніколи, а Drive і так регулярно читає свої блоки. Порт слухає лише на самій машині (127.0.0.1): усе проходить через проксі. Запустіть його:

cd /root/blossom
docker compose up -d

Крок 2: поставте попереду HTTPS

З Caddy уся конфігурація (/etc/caddy/Caddyfile) така:

blossom.example.com {
    reverse_proxy 127.0.0.1:3000
}

Якщо той самий Caddy вже обслуговує ваш релей, додайте цей блок під блоком релея. Перезавантажте Caddy (sudo systemctl reload caddy). Тепер, якщо відкрити https://blossom.example.com у браузері, він має відповісти — кодом 404: домашньої сторінки немає, і так задумано.

Крок 3: повідомте Herkos Drive

  1. У Herkos Drive відкрийте Налаштування → Сервери, додайте https://blossom.example.com і позначте його як ваш.
  2. Drive питає його перед кожним завантаженням. Відтепер кожен новий файл отримує там копію, а файли, які у вас уже були, отримають свою, коли Drive наступного разу перевірить копії.
  3. Залиште в списку й інші сервери. Ваш — одна з трьох копій, але ніколи не єдина: якщо він перестане працювати, ваші файли залишаться на інших, а Drive повідомить вас про це після тижня мовчання.

Крок 4: робіть резервну копію щоночі

Якщо ваш сервер вийде з ладу, Drive це помітить і створить копії уражених файлів на інших серверах із вашого списку. Але копія на вашому сервері — єдина, яка ні від кого більше не залежить, а щонічна резервна копія дає змогу відновити її, не копіюючи все заново через інтернет.

Сервер зберігає все всередині тому Docker blossom_data (назва починається з теки, в якій лежать файли; перевірте її командою docker volume ls): блоки, по одному файлу на кожен, і невелику базу даних SQLite, у якій записано, хто завантажив кожен із них. Блоки ніколи не змінюються, але базу даних не можна копіювати, поки в неї триває запис. Тож скрипт копіює все під час роботи сервера, зупиняє його на ті кілька секунд, які потрібні, щоб скопіювати змінене за цей час, знову запускає його і лише тоді вивантажує копію. Поки сервер зупинено, Drive просто повторює спробу трохи пізніше.

Копія залишає сервер за допомогою restic, який шифрує її перед відправленням. Використовуйте місце в іншого провайдера, ніж сервер: обліковий запис SFTP (storage box, домашній комп'ютер) або S3-сумісний бакет. Якщо ви вже так робите резервні копії свого релея, використовуйте те саме місце, але іншу теку.

  1. Встановіть інструменти й створіть репозиторій. Збережіть пароль також у своєму менеджері паролів: без нього копії неможливо прочитати, а якщо він зберігається лише на сервері, то загине разом із сервером. Для SFTP root також потрібен SSH-ключ, який приймає машина для резервних копій (sudo ssh-keygen -t ed25519, потім додайте туди /root/.ssh/id_ed25519.pub).

    sudo apt install restic rsync
    sudo sh -c 'openssl rand -base64 32 > /root/.restic-blossom-password'
    sudo sh -c 'cat > /root/.restic-blossom-env' <<'END'
    export RESTIC_REPOSITORY=sftp:backup@backup.example.com:/blossom
    export RESTIC_PASSWORD_FILE=/root/.restic-blossom-password
    END
    sudo chmod 600 /root/.restic-blossom-password /root/.restic-blossom-env
    sudo sh -c '. /root/.restic-blossom-env && restic init'
    
  2. Збережіть це як /usr/local/bin/backup-blossom і зробіть виконуваним (sudo chmod 700 /usr/local/bin/backup-blossom). Змініть BLOSSOM_DIR, якщо ваші файли лежать не в /root/blossom. Скрипт зберігає копії за останні 14 днів, 8 тижнів і 12 місяців. Блоки ніколи не змінюються, тож кожна ніч додає лише нове.

    #!/bin/sh
    set -eu
    . /root/.restic-blossom-env
    BLOSSOM_DIR=/root/blossom
    COPY=/var/backups/blossom-data
    VOLUME=$(docker volume inspect --format '{{ .Mountpoint }}' blossom_data)
    mkdir -p "$COPY"
    rsync -a --delete "$VOLUME/" "$COPY/"
    cd "$BLOSSOM_DIR"
    docker compose stop blossom
    trap 'docker compose start blossom' EXIT
    rsync -a --delete "$VOLUME/" "$COPY/"
    docker compose start blossom
    trap - EXIT
    restic backup "$COPY" --tag blossom
    restic forget --tag blossom --keep-daily 14 --keep-weekly 8 --keep-monthly 12 --prune
    
  3. Запустіть його один раз вручну (sudo /usr/local/bin/backup-blossom), потім заплануйте за допомогою sudo crontab -e. Другий рядок щомісяця зчитує десяту частину збережених даних, щоразу іншу, щоб довести, що копії й досі можна відкрити. Час від часу переглядайте /var/log/backup-blossom.log: рядок із Fatal означає, що копія тієї ночі не вдалася. Якщо на цій самій машині робиться резервна копія релея, цей час не перетинається з її часом.

    35 4 * * * /usr/local/bin/backup-blossom >> /var/log/backup-blossom.log 2>&1
    55 5 2 * * . /root/.restic-blossom-env && restic check --read-data-subset=10% >> /var/log/backup-blossom.log 2>&1
    

Щоб відновити (новий сервер або після збою диска): знову налаштуйте сервер (кроки 1 і 2) і повторіть пункти 1 і 2 цього кроку з тим самим репозиторієм, але запишіть збережений пароль у /root/.restic-blossom-password замість того, щоб створювати новий, і пропустіть restic init. Потім скопіюйте останню резервну копію в том сервера:

sudo sh -c '. /root/.restic-blossom-env && restic restore latest --tag blossom --target /'
cd /root/blossom && sudo docker compose stop blossom
sudo rsync -a --delete /var/backups/blossom-data/ "$(sudo docker volume inspect --format '{{ .Mountpoint }}' blossom_data)/"
sudo docker compose start blossom

Коли Drive наступного разу перевірить копії, він знову знайде блоки й докопіює з інших серверів усе, що надійшло після останньої резервної копії. 27 жовтня 2026 року ми перевірили весь цей ланцюжок: резервна копія, видалення сервера, відновлення, читання кожного блока зі звіркою його хеша й подальше видалення ключем Drive.

Раз на рік виконуйте це відновлення на запасній машині й перевіряйте, що сервер відповідає вашими блоками: це єдина перевірка, яка доводить, що працює весь ланцюжок, включно з паролем.

Варто знати