Herkos

Váš vlastný server Blossom

Naposledy aktualizované: 27. októbra 2026

Herkos Drive rozdelí každý súbor na šifrované bloky a uchováva ich na viacerých serveroch Blossom: tri kópie, aspoň na dvoch druhoch serverov a jednu na vašom vlastnom serveri. Verejné servery uchovávajú bloky zadarmo, ale nič nesľubujú: môžu ich vymazať, zaplniť sa alebo skončiť.

Vlastný server Blossom uchová vašu kópiu tak dlho, ako sa rozhodnete, a bloky prijíma len z vášho Drive. Táto stránka vysvetľuje, ako ho nastaviť v troch krokoch, plus nočnú zálohu. Dobre sa hodí k vášmu vlastnému poštovému relé, a ak už server máte, zaberie to asi pätnásť minút.

Ktorý server použiť

blossom-server od hzrd149, verzia 6.4.1 (6. októbra 2026, licencia MIT). 27. októbra 2026 sme ho spustili s konfiguráciou nižšie a s vlastným kódom Drive na nahrávanie a overili, čo Drive potrebuje, nie čo server inzeruje:

Čo robí Drive Výsledok
Nahráva šifrované bloky po 8 MiB (application/octet-stream) Prijaté
Pred nahraním sa pýta (BUD-06) Odpovedá a akýkoľvek iný kľúč odmietne
Požiada váš server, aby skopíroval blok z verejného (BUD-04) Skopírované
Číta blok bez identifikácie Vydané, bajt po bajte
Odstráni blok kľúčom, ktorý ho nahral Odstránené: ďalšia požiadavka vráti 404
Nahrávanie z akéhokoľvek iného kľúča Odmietnuté (401)

Čo potrebujete

Krok 1: spustite server

Vytvorte preň priečinok, napríklad /root/blossom, a uložte doň tieto dva súbory. Prvý 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 zadajte svoju doménu a kľúč zväzku vložte tam, kde je 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

Čo to znamená: nahrávať a žiadať o kópie smie len váš kľúč zväzku (requirePubkeyInRule) a blok sa uchováva, kým ho Drive neodstráni. Server vyžaduje v každom pravidle dobu platnosti; 100 years bez čítania je v praxi nikdy a Drive svoje bloky aj tak pravidelne číta. Port počúva len na samotnom stroji (127.0.0.1): všetko ide cez proxy. Spustite ho:

cd /root/blossom
docker compose up -d

Krok 2: dajte pred neho HTTPS

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

blossom.example.com {
    reverse_proxy 127.0.0.1:3000
}

Ak ten istý Caddy už obsluhuje vaše relé, pridajte tento blok pod ten jeho. Znova načítajte Caddy (sudo systemctl reload caddy). Keď teraz otvoríte https://blossom.example.com v prehliadači, mal by odpovedať, a to 404: domovská stránka zámerne nie je.

Krok 3: povedzte to Herkos Drive

  1. V Herkos Drive otvorte Nastavenia → Servery, pridajte https://blossom.example.com a označte ho ako tvoj.
  2. Drive sa ho pred každým nahraním spýta. Odvtedy dostane každý nový súbor kópiu tam a súbory, ktoré už máte, dostanú svoju, keď Drive nabudúce skontroluje kópie.
  3. Ostatné servery v zozname ponechajte. Váš je jednou z troch kópií, nikdy jedinou: ak vypadne, vaše súbory sú stále na ostatných a Drive vám to oznámi po týždni ticha.

Krok 4: zálohujte ho každú noc

Ak váš server zlyhá, Drive si to všimne a dotknutým súborom vytvorí kópie na ostatných serveroch vo vašom zozname. Kópia na vašom serveri je však jediná, ktorá nezávisí od nikoho iného, a nočná záloha vám ju umožní obnoviť bez toho, aby ste všetko znova kopírovali cez internet.

Server uchováva všetko vo zväzku Docker blossom_data (názov začína priečinkom, v ktorom sú súbory; overte ho príkazom docker volume ls): bloky, každý v jednom súbore, a malú databázu SQLite, ktorá hovorí, kto ktorý nahral. Bloky sa nikdy nemenia, ale databáza sa nesmie kopírovať, kým sa do nej zapisuje. Preto skript všetko skopíruje počas behu servera, zastaví ho na tých pár sekúnd, ktoré trvá skopírovať, čo sa medzitým zmenilo, znova ho spustí a až potom kópiu nahrá. Kým je zastavený, Drive to jednoducho o chvíľu neskôr skúsi znova.

Kópia odchádza zo servera pomocou restic, ktorý ju zašifruje skôr, než odíde. Použite miesto u iného poskytovateľa, než je server: účet SFTP (storage box, počítač doma) alebo úložisko kompatibilné s S3. Ak už takto zálohujete svoje relé, použite to isté miesto s iným priečinkom.

  1. Nainštalujte nástroje a vytvorte repozitár. Heslo si uložte aj do správcu hesiel: bez neho sa kópie nedajú prečítať, a ak by bolo len na serveri, zanikne spolu so serverom. Pre SFTP potrebuje root aj kľúč SSH, ktorý záložný stroj akceptuje (sudo ssh-keygen -t ed25519, potom tam pridajte /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 ako /usr/local/bin/backup-blossom a nastavte ho ako spustiteľný (sudo chmod 700 /usr/local/bin/backup-blossom). Ak vaše súbory nie sú v /root/blossom, zmeňte BLOSSOM_DIR. Uchováva posledných 14 dní, 8 týždňov a 12 mesiacov. Bloky sa nikdy nemenia, takže každá noc pridá len to, čo 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. Spustite ho raz ručne (sudo /usr/local/bin/backup-blossom) a potom ho naplánujte cez sudo crontab -e. Druhý riadok každý mesiac spätne prečíta desatinu uložených údajov, zakaždým inú desatinu, aby overil, že sa kópie stále dajú otvoriť. Z času na čas sa pozrite do /var/log/backup-blossom.log: riadok s Fatal znamená, že kópia v tú noc zlyhala. Ak sa relé zálohuje na tom istom stroji, tieto časy sa s jeho časmi neprekrý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
    

Obnovenie (nový server alebo po zlyhaní disku): znova nastavte server (kroky 1 a 2) a zopakujte body 1 a 2 tohto kroku s tým istým repozitárom, ale namiesto vytvárania nového hesla zapíšte uložené heslo do /root/.restic-blossom-password a vynechajte restic init. Potom skopírujte najnovšiu zálohu do zväzku servera:

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

Keď nabudúce skontroluje kópie, Drive bloky opäť nájde a z ostatných serverov dokopíruje všetko, čo pribudlo po poslednej zálohe. Celý tento reťazec sme vyskúšali 27. októbra 2026: záloha, odstránenie servera, obnovenie, spätné prečítanie každého bloku s overením jeho vlastného hashu a nakoniec odstránenie kľúčom Drive.

Raz za rok vykonajte toto obnovenie na náhradnom stroji a overte, že server odpovedá s vašimi blokmi: je to jediný test, ktorý preverí celý reťazec vrátane hesla.

Dobré vedieť