Własny serwer Blossom
Ostatnia aktualizacja: 27 października 2026
Herkos Drive tnie każdy plik na zaszyfrowane bloki i przechowuje je na kilku serwerach Blossom: trzy kopie, na co najmniej dwóch rodzajach serwerów, i jedną na Twoim własnym serwerze. Publiczne serwery przechowują bloki za darmo, ale niczego nie obiecują: mogą je usunąć, zapełnić się albo zostać zamknięte.
Własny serwer Blossom przechowuje Twoją kopię tak długo, jak zdecydujesz, i przyjmuje bloki tylko z Twojego Drive. Ta strona wyjaśnia, jak go skonfigurować w trzech krokach, plus nocna kopia zapasowa. Dobrze uzupełnia własny przekaźnik na pocztę i zajmuje około piętnastu minut, jeśli masz już serwer.
Którego serwera użyć
blossom-server autorstwa hzrd149, wersja 6.4.1 (6 października 2026, licencja MIT). 27 października 2026 uruchomiliśmy go z poniższą konfiguracją i z kodem wysyłania samego Drive i sprawdziliśmy, czego potrzebuje Drive, a nie co reklamuje serwer:
| Co robi Drive | Wynik |
|---|---|
Wysyła zaszyfrowane bloki po 8 MiB (application/octet-stream) |
Przyjęte |
| Pyta przed wysłaniem (BUD-06) | Odpowiada i odprawia każdy inny klucz |
| Prosi Twój serwer o skopiowanie bloku z publicznego (BUD-04) | Skopiowany |
| Odczytuje blok bez identyfikacji | Wydany, bajt w bajt |
| Usuwa blok kluczem, który go wysłał | Usunięty: ponowne zapytanie daje 404 |
| Wysyłanie z każdego innego klucza | Odrzucone (401) |
Czego potrzebujesz
- Maszyny, która jest zawsze włączona i osiągalna z internetu: małego VPS-a albo komputera w domu. Potrzebuje tyle miejsca na dysku, ile mieści Twój Drive, i trochę zapasu na przyszłość.
- Domeny lub subdomeny, która na nią wskazuje, na przykład
blossom.example.com. - Dockera i reverse proxy, które zapewnia HTTPS. Przykłady używają Caddy, który sam zdobywa certyfikat.
- Klucza woluminu Twojego Drive. Herkos Drive pokazuje go w Ustawienia → Serwery → Twój własny serwer jako 64 litery i cyfry. To nie jest klucz Twojego profilu: Drive nigdy nie wysyła kluczem profilu, więc serwer, który przyjmuje tylko Twój npub, odprawiłby Drive.
Krok 1: uruchom serwer
Utwórz dla niego folder, na przykład /root/blossom, i zapisz w nim te dwa pliki.
Pierwszy to 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: {}
Drugi to config.yml. Wpisz swoją domenę w publicDomain, a klucz woluminu w
miejsce 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
Co to oznacza: tylko Twój klucz woluminu może wysyłać bloki lub prosić o kopie
(requirePubkeyInRule), a blok jest przechowywany, dopóki Drive go nie usunie.
Serwer wymaga terminu wygaśnięcia w każdej regule; 100 years bez odczytu to w
praktyce nigdy, a Drive i tak regularnie odczytuje swoje bloki. Port nasłuchuje
tylko na samej maszynie (127.0.0.1): wszystko przechodzi przez proxy.
Uruchom go:
cd /root/blossom
docker compose up -d
Krok 2: dodaj HTTPS z przodu
Z Caddy cała konfiguracja (/etc/caddy/Caddyfile) wygląda tak:
blossom.example.com {
reverse_proxy 127.0.0.1:3000
}
Jeśli ten sam Caddy obsługuje już Twój przekaźnik, dodaj ten blok pod tamtym.
Przeładuj Caddy (sudo systemctl reload caddy). Otwarcie
https://blossom.example.com w przeglądarce powinno teraz dać odpowiedź 404:
strony głównej celowo nie ma.
Krok 3: powiedz o nim Herkos Drive
- W Herkos Drive otwórz Ustawienia → Serwery, dodaj
https://blossom.example.comi oznacz go jako twój. - Drive pyta go przed każdym wysłaniem. Od tej chwili każdy nowy plik dostaje tam kopię, a pliki, które już miałeś, dostaną swoją, gdy Drive następnym razem sprawdzi kopie.
- Zostaw na liście pozostałe serwery. Twój jest jedną z trzech kopii, nigdy jedyną: jeśli przestanie działać, Twoje pliki nadal są na pozostałych, a Drive powiadomi Cię po tygodniu ciszy.
Krok 4: rób kopię zapasową co noc
Jeśli Twój serwer padnie, Drive to zauważy i da plikom, których to dotyczy, kopie na pozostałych serwerach z Twojej listy. Ale kopia na Twoim serwerze jest jedyną, która nie zależy od nikogo innego, a nocna kopia zapasowa pozwala ją odbudować bez ponownego kopiowania wszystkiego przez internet.
Serwer trzyma wszystko w woluminie Dockera blossom_data (nazwa zaczyna się od
nazwy folderu, w którym są pliki; sprawdź ją poleceniem docker volume ls):
bloki, każdy w osobnym pliku, i małą bazę SQLite, która zapisuje, kto wysłał
każdy z nich. Bloki nigdy się nie zmieniają, ale bazy nie wolno kopiować, gdy
trwa do niej zapis. Dlatego skrypt kopiuje wszystko przy działającym serwerze,
zatrzymuje go na kilka sekund potrzebnych na skopiowanie tego, co zmieniło się
w międzyczasie, uruchamia go ponownie i dopiero wtedy wysyła kopię. Gdy jest
zatrzymany, Drive po prostu próbuje ponownie nieco później.
Kopia opuszcza serwer za pomocą restic, który szyfruje ją, zanim wyjdzie. Użyj miejsca u innego dostawcy niż serwer: konta SFTP (storage box, komputer w domu) albo kubełka zgodnego z S3. Jeśli już w ten sposób robisz kopię zapasową przekaźnika, użyj tego samego miejsca z innym folderem.
-
Zainstaluj narzędzia i utwórz repozytorium. Hasło zapisz też w swoim menedżerze haseł: bez niego kopii nie da się odczytać, a jeśli istnieje tylko na serwerze, zginie razem z serwerem. W przypadku SFTP root potrzebuje też klucza SSH akceptowanego przez maszynę z kopiami (
sudo ssh-keygen -t ed25519, a następnie dodaj tam/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' -
Zapisz to jako
/usr/local/bin/backup-blossomi nadaj prawo wykonywania (sudo chmod 700 /usr/local/bin/backup-blossom). ZmieńBLOSSOM_DIR, jeśli Twoje pliki nie są w/root/blossom. Skrypt zachowuje ostatnie 14 dni, 8 tygodni i 12 miesięcy. Bloki nigdy się nie zmieniają, więc każda noc dodaje tylko to, co nowe.#!/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 -
Uruchom go raz ręcznie (
sudo /usr/local/bin/backup-blossom), a potem zaplanuj za pomocąsudo crontab -e. Druga linia co miesiąc odczytuje dziesiątą część zapisanych danych, za każdym razem inną, aby udowodnić, że kopie nadal da się otworzyć. Zaglądaj od czasu do czasu do/var/log/backup-blossom.log: linia zFataloznacza, że kopia z tej nocy się nie udała. Jeśli kopia zapasowa przekaźnika jest robiona na tej samej maszynie, te godziny nie pokrywają się z jego godzinami.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
Aby przywrócić (nowy serwer albo po awarii dysku): skonfiguruj serwer
ponownie (kroki 1 i 2) i powtórz punkty 1 i 2 tego kroku z tym samym
repozytorium, ale zamiast tworzyć nowe hasło, wpisz zapisane hasło do
/root/.restic-blossom-password i pomiń restic init. Następnie skopiuj
najnowszą kopię do woluminu serwera:
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
Kiedy następnym razem sprawdzi kopie, Drive odnajdzie bloki i dokopiuje z pozostałych serwerów wszystko, co przyszło po ostatniej kopii zapasowej. Cały ten łańcuch przetestowaliśmy 27 października 2026: kopia zapasowa, usunięcie serwera, przywrócenie, odczyt każdego bloku ze sprawdzeniem jego własnego skrótu, a na koniec usunięcie kluczem Drive.
Raz w roku wykonaj to przywracanie na zapasowej maszynie i sprawdź, czy serwer odpowiada Twoimi blokami: to jedyny test, który sprawdza cały łańcuch, łącznie z hasłem.
Warto wiedzieć
- Wysyłać może tylko Twój Drive. Każdy, kto zna adres bloku, może go pobrać, jak na każdym serwerze Blossom, ale blok jest zaszyfrowany: bez kluczy z Twojego Drive to szum.
- Jeśli zmieni się Twój klucz woluminu (Drive informuje, gdy wolumin jest
odnawiany), dodaj nowy jako kolejną linię pod
pubkeys, uruchom ponownie (docker compose up -d) i zostaw tam stary. - Aktualizacje. Przeczytaj listę zmian,
zmień wersję w
image:i uruchomdocker compose pullorazdocker compose up -d. - Twój adres IP. Serwer widzi adres każdej aplikacji, która się z nim łączy, jak każdy serwer. Na Twoim własnym serwerze widzisz je tylko Ty.