Власний сервер 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) |
Що вам знадобиться
- Машина, яка завжди ввімкнена й доступна з інтернету: невеликий VPS або домашній комп'ютер. Їй потрібно стільки місця на диску, скільки займає ваш Drive, і трохи запасу на зростання.
- Домен або піддомен, що вказує на неї, наприклад
blossom.example.com. - Docker і зворотний проксі, який забезпечує HTTPS. У прикладах використано Caddy, який сам отримує сертифікат.
- Ключ тому вашого Drive. Herkos Drive показує його в Налаштування → Сервери → Власний сервер у вигляді 64 літер і цифр. Це не ключ вашого профілю: Drive ніколи не завантажує дані ключем профілю, тож сервер, який приймає лише ваш npub, відхилив би Drive.
Крок 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
- У Herkos Drive відкрийте Налаштування → Сервери, додайте
https://blossom.example.comі позначте його як ваш. - Drive питає його перед кожним завантаженням. Відтепер кожен новий файл отримує там копію, а файли, які у вас уже були, отримають свою, коли Drive наступного разу перевірить копії.
- Залиште в списку й інші сервери. Ваш — одна з трьох копій, але ніколи не єдина: якщо він перестане працювати, ваші файли залишаться на інших, а Drive повідомить вас про це після тижня мовчання.
Крок 4: робіть резервну копію щоночі
Якщо ваш сервер вийде з ладу, Drive це помітить і створить копії уражених файлів на інших серверах із вашого списку. Але копія на вашому сервері — єдина, яка ні від кого більше не залежить, а щонічна резервна копія дає змогу відновити її, не копіюючи все заново через інтернет.
Сервер зберігає все всередині тому Docker blossom_data (назва починається з теки, в якій
лежать файли; перевірте її командою docker volume ls):
блоки, по одному файлу на кожен, і невелику базу даних SQLite, у якій записано, хто завантажив
кожен із них. Блоки ніколи не змінюються, але базу даних не можна копіювати, поки в неї
триває запис. Тож скрипт копіює все під час роботи сервера, зупиняє
його на ті кілька секунд, які потрібні, щоб скопіювати змінене за цей час, знову запускає його
і лише тоді вивантажує копію. Поки сервер зупинено, Drive просто повторює спробу
трохи пізніше.
Копія залишає сервер за допомогою restic, який шифрує її перед відправленням. Використовуйте місце в іншого провайдера, ніж сервер: обліковий запис SFTP (storage box, домашній комп'ютер) або S3-сумісний бакет. Якщо ви вже так робите резервні копії свого релея, використовуйте те саме місце, але іншу теку.
-
Встановіть інструменти й створіть репозиторій. Збережіть пароль також у своєму менеджері паролів: без нього копії неможливо прочитати, а якщо він зберігається лише на сервері, то загине разом із сервером. Для 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' -
Збережіть це як
/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 -
Запустіть його один раз вручну (
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.
Раз на рік виконуйте це відновлення на запасній машині й перевіряйте, що сервер відповідає вашими блоками: це єдина перевірка, яка доводить, що працює весь ланцюжок, включно з паролем.
Варто знати
- Завантажувати може лише ваш Drive. Будь-хто, хто знає адресу блока, може його звантажити, як і на будь-якому сервері Blossom, але блок зашифровано: без ключів із вашого Drive це просто шум.
- Якщо ключ тому зміниться (Drive повідомляє, коли том оновлюється), додайте
новий ключ ще одним рядком під
pubkeys, перезапустіть сервер (docker compose up -d) і залиште старий ключ на місці. - Оновлення. Прочитайте список змін,
змініть версію в
image:і виконайтеdocker compose pullтаdocker compose up -d. - Ваша IP-адреса. Сервер бачить адресу кожного застосунку, що до нього під'єднується, як і будь-який сервер. На вашому власному сервері їх бачите лише ви.