Herkos

Vlastní server Blossom

Naposledy aktualizováno: 27. října 2026

Herkos Drive rozdělí každý soubor na šifrované bloky a uchovává je na několika serverech Blossom: tři kopie, nejméně na dvou druzích serverů, a jednu na vašem vlastním serveru. Veřejné servery bloky uchovávají zdarma, ale nic neslibují: mohou je smazat, zaplnit se nebo skončit.

Vlastní server Blossom uchová vaši kopii tak dlouho, jak sami určíte, a bloky přijímá jen z vašeho Drive. Tato stránka vysvětluje, jak ho nastavit ve třech krocích, a k tomu noční zálohu. Dobře se hodí k vlastnímu poštovnímu relé a zabere to asi patnáct minut, pokud už server máte.

Jaký server použít

blossom-server od hzrd149, verze 6.4.1 (6. října 2026, licence MIT). 27. října 2026 jsme ho spustili s konfigurací níže a s vlastním kódem Drive pro nahrávání a ověřili, co Drive potřebuje, ne co server slibuje:

Co Drive dělá Výsledek
Nahrává šifrované bloky po 8 MiB (application/octet-stream) Přijato
Před nahráním se ptá (BUD-06) Odpovídá a jakýkoli jiný klíč odmítne
Požádá váš server, aby zkopíroval blok z veřejného (BUD-04) Zkopírováno
Čte blok bez identifikace Vydáno, bajt po bajtu
Maže blok klíčem, který ho nahrál Smazáno: další dotaz vrátí 404
Nahrávání z jakéhokoli jiného klíče Odmítnuto (401)

Co budete potřebovat

Krok 1: spusťte server

Vytvořte pro něj složku, například /root/blossom, a uložte do ní tyto dva soubory. První je 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: {}

Druhý je config.yml. Do publicDomain zadejte svou doménu a klíč svazku vložte tam, kde stojí 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 znamená: nahrávat a žádat o kopie smí jen váš klíč svazku (requirePubkeyInRule) a blok se uchovává, dokud ho Drive nesmaže. Server vyžaduje v každém pravidle dobu platnosti; 100 years bez čtení je v praxi nikdy a Drive své bloky stejně pravidelně čte. Port naslouchá jen na samotném stroji (127.0.0.1): všechno jde přes proxy. Spusťte ho:

cd /root/blossom
docker compose up -d

Krok 2: předřaďte HTTPS

S Caddy je celá konfigurace (/etc/caddy/Caddyfile):

blossom.example.com {
    reverse_proxy 127.0.0.1:3000
}

Pokud stejný Caddy už obsluhuje vaše relé, přidejte tento blok pod ten jeho. Načtěte Caddy znovu (sudo systemctl reload caddy). Adresa https://blossom.example.com by teď měla v prohlížeči odpovídat, a to 404: domovská stránka záměrně není.

Krok 3: řekněte to Herkos Drive

  1. V Herkos Drive otevřete Nastavení → Servery, přidejte https://blossom.example.com a označte ho jako tvůj.
  2. Drive se ho před každým nahráním zeptá. Od té chvíle dostane každý nový soubor kopii tam a soubory, které už máte, dostanou svou, až Drive příště zkontroluje kopie.
  3. Ostatní servery v seznamu ponechte. Váš je jednou ze tří kopií, nikdy jedinou: když vypadne, vaše soubory jsou dál na ostatních a Drive vám to oznámí po týdnu ticha.

Krok 4: zálohujte každou noc

Když váš server odejde, Drive si toho všimne a dotčeným souborům vytvoří kopie na ostatních serverech ve vašem seznamu. Kopie na vašem serveru je ale jediná, která nezávisí na nikom jiném, a noční záloha vám umožní ji obnovit, aniž byste všechno znovu kopírovali přes internet.

Server má všechno uvnitř svazku Dockeru blossom_data (název začíná složkou, ve které jsou soubory; ověřte ho příkazem docker volume ls): bloky, každý v jednom souboru, a malou databázi SQLite, která říká, kdo který nahrál. Bloky se nikdy nemění, ale databáze se nesmí kopírovat, zatímco se do ní zapisuje. Proto skript všechno zkopíruje za běhu serveru, zastaví ho na těch pár sekund, které zabere zkopírovat, co se mezitím změnilo, znovu ho spustí a teprve pak kopii nahraje. Zatímco je zastavený, Drive to prostě o chvíli později zkusí znovu.

Kopie odchází ze serveru pomocí restic, který ji před odesláním zašifruje. Použijte místo u jiného poskytovatele, než má server: účet SFTP (storage box, počítač doma) nebo bucket kompatibilní s S3. Pokud už takhle zálohujete své relé, použijte stejné místo s jinou složkou.

  1. Nainstalujte nástroje a vytvořte repozitář. Heslo si uložte i do správce hesel: bez něj nelze kopie přečíst, a pokud je jen na serveru, zanikne spolu se serverem. Pro SFTP potřebuje root navíc klíč SSH, který záložní stroj přijme (sudo ssh-keygen -t ed25519, pak tam přidejte /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. Uložte toto jako /usr/local/bin/backup-blossom a nastavte jako spustitelné (sudo chmod 700 /usr/local/bin/backup-blossom). Pokud vaše soubory nejsou v /root/blossom, změňte BLOSSOM_DIR. Uchovává posledních 14 dní, 8 týdnů a 12 měsíců. Bloky se nikdy nemění, takže každá noc přidá jen to, co je nové.

    #!/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. Jednou ho spusťte ručně (sudo /usr/local/bin/backup-blossom), pak ho naplánujte pomocí sudo crontab -e. Druhý řádek každý měsíc načte zpět desetinu uložených dat, pokaždé jinou desetinu, aby se prokázalo, že kopie jdou pořád otevřít. Občas se podívejte do /var/log/backup-blossom.log: řádek s Fatal znamená, že kopie té noci selhala. Pokud se na stejném stroji zálohuje i relé, tyto časy se s jeho časy nepřekrývají.

    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
    

Obnovení (nový server nebo po selhání disku): znovu nastavte server (kroky 1 a 2) a zopakujte body 1 a 2 tohoto kroku se stejným repozitářem, ale místo vytvoření nového hesla zapište do /root/.restic-blossom-password heslo, které jste si uložili, a vynechte restic init. Pak zkopírujte nejnovější zálohu do svazku serveru:

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

Až příště zkontroluje kopie, Drive bloky znovu najde a z ostatních serverů dokopíruje vše, co přibylo po poslední záloze. Celý tento řetězec jsme vyzkoušeli 27. října 2026: záloha, smazání serveru, obnovení, zpětné přečtení každého bloku s ověřením jeho vlastního hashe a nakonec smazání klíčem Drive.

Jednou ročně proveďte toto obnovení na náhradním stroji a ověřte, že server odpovídá s vašimi bloky: je to jediný test, který prověří celý řetězec, včetně hesla.

Dobré vědět