Herkos

Saját Blossom-szerver

Utolsó frissítés: 2026. október 27.

A Herkos Drive minden fájlt titkosított blokkokra vág, és ezeket több Blossom-szerveren tárolja: három példányban, legalább kétféle szerveren, és egyet egy saját szerveren. A nyilvános szerverek ingyen tárolják a blokkokat, de semmit sem ígérnek: törölhetik őket, megtelhetnek vagy bezárhatnak.

Egy saját Blossom-szerver addig őrzi az Ön példányát, ameddig Ön dönt, és csak az Ön Drive-jából fogad blokkokat. Ez az oldal elmagyarázza, hogyan állíthat be egyet három lépésben, valamint egy éjszakai biztonsági mentést. Jól kiegészíti a saját postafiók-relét, és ha már van szervere, körülbelül tizenöt percet vesz igénybe.

Melyik szervert használja?

blossom-server, hzrd149 munkája, 6.4.1-es verzió (2026. október 6., MIT-licenc). 2026. október 27-én futtattuk az alábbi konfigurációval és a Drive saját feltöltőkódjával, és azt ellenőriztük, amire a Drive-nak szüksége van, nem azt, amit a szerver hirdet:

Amit a Drive csinál Eredmény
8 MiB-os titkosított blokkokat tölt fel (application/octet-stream) Elfogadva
Feltöltés előtt rákérdez (BUD-06) Válaszol, és minden más kulcsot elutasít
Megkéri a szerverét, hogy másoljon át egy blokkot egy nyilvánosról (BUD-04) Átmásolva
Azonosítás nélkül olvas egy blokkot Kiszolgálva, bájtról bájtra
Töröl egy blokkot azzal a kulccsal, amely feltöltötte Törölve: újabb lekérésre 404
Feltöltés bármely más kulccsal Elutasítva (401)

Amire szüksége lesz

1. lépés: a szerver elindítása

Hozzon létre neki egy mappát, például /root/blossom, és mentse bele ezt a két fájlt. Az első a 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: {}

A második a config.yml. A publicDomain mezőbe írja a domainjét, a kötetkulcsát pedig oda, ahol YOUR-VOLUME-KEY áll:

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

Mit jelent ez: csak az Ön kötetkulcsa tölthet fel vagy kérhet másolatot (requirePubkeyInRule), és egy blokk addig marad meg, amíg a Drive ki nem törli. A szerver minden szabályban lejárati időt követel; a 100 years olvasás nélkül a gyakorlatban soha, és a Drive egyébként is rendszeresen olvassa a blokkjait. A port csak magán a gépen figyel (127.0.0.1): minden a proxyn keresztül megy. Indítsa el:

cd /root/blossom
docker compose up -d

2. lépés: HTTPS a szerver elé

A Caddy esetében a teljes konfiguráció (/etc/caddy/Caddyfile) ennyi:

blossom.example.com {
    reverse_proxy 127.0.0.1:3000
}

Ha ugyanaz a Caddy már a reléjét is kiszolgálja, ezt a blokkot az alá írja. Töltse újra a Caddyt (sudo systemctl reload caddy). Ha most böngészőben megnyitja a https://blossom.example.com címet, válaszolnia kell, mégpedig 404-gyel: kezdőlap szándékosan nincs.

3. lépés: a Herkos Drive beállítása

  1. A Herkos Drive-ban nyissa meg a Beállítások → Szerverek menüpontot, adja hozzá a https://blossom.example.com címet, és jelölje meg sajátként.
  2. A Drive minden feltöltés előtt megkérdezi. Ettől kezdve minden új fájlról kerül oda egy példány, a már meglévő fájlok pedig akkor kapják meg a sajátjukat, amikor a Drive legközelebb ellenőrzi a másolatokat.
  3. A többi szervert hagyja a listában. Az Öné a három példány egyike, soha nem az egyetlen: ha leáll, a fájljai továbbra is megvannak a többin, és a Drive egy hét csend után szól Önnek.

4. lépés: biztonsági mentés minden éjjel

Ha a szervere tönkremegy, a Drive észreveszi, és az érintett fájlokról a listája többi szerverén készít példányt. A saját szerverén lévő példány azonban az egyetlen, amely senki mástól nem függ, és egy éjszakai mentéssel újraépítheti anélkül, hogy mindent újra át kellene másolnia az interneten.

A szerver mindent a blossom_data Docker-köteten belül tárol (a név annak a mappának a nevével kezdődik, amelyben a fájlok vannak; ellenőrizze a docker volume ls paranccsal): a blokkokat, mindegyiket külön fájlban, és egy kis SQLite-adatbázist, amely nyilvántartja, ki melyiket töltötte fel. A blokkok soha nem változnak, de az adatbázist nem szabad másolni, amíg írás folyik bele. Ezért a szkript mindent átmásol futó szerver mellett, arra a néhány másodpercre leállítja, amíg átmásolja, ami közben megváltozott, újraindítja, és csak ezután tölti fel a másolatot. Amíg le van állítva, a Drive egyszerűen kicsit később újrapróbálkozik.

A másolat a restic segítségével kerül le a szerverről, amely titkosítja, mielőtt elhagyná a gépet. Olyan helyet használjon, amely a szervertől eltérő szolgáltatónál van: egy SFTP-fiókot (tárhelydobozt, otthoni számítógépet) vagy egy S3-kompatibilis tárolót (bucketet). Ha a reléjét már így menti, használja ugyanazt a helyet egy másik mappával.

  1. Telepítse az eszközöket, és hozza létre a tárolót. A jelszót a jelszókezelőjében is tartsa meg: nélküle a másolatok nem olvashatók, és ha csak a szerveren van, a szerverrel együtt elvész. SFTP esetén a rootnak egy olyan SSH-kulcs is kell, amelyet a mentési gép elfogad (sudo ssh-keygen -t ed25519, majd adja hozzá ott a /root/.ssh/id_ed25519.pub kulcsot).

    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. Mentse ezt /usr/local/bin/backup-blossom néven, és tegye futtathatóvá (sudo chmod 700 /usr/local/bin/backup-blossom). Módosítsa a BLOSSOM_DIR értékét, ha a fájljai nem a /root/blossom mappában vannak. A szkript megőrzi az utolsó 14 napot, 8 hetet és 12 hónapot. A blokkok soha nem változnak, így minden éjjel csak az új adatok kerülnek hozzá.

    #!/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. Futtassa le egyszer kézzel (sudo /usr/local/bin/backup-blossom), majd ütemezze a sudo crontab -e paranccsal. A második sor havonta visszaolvassa a tárolt adatok egytizedét, minden alkalommal egy másik tizedét, hogy bizonyítsa: a másolatok továbbra is megnyithatók. Időnként nézzen bele a /var/log/backup-blossom.log fájlba: egy Fatal szót tartalmazó sor azt jelenti, hogy az aznap éjjeli másolat nem sikerült. Ha a relé mentése ugyanazon a gépen fut, ezek az időpontok nem fedik át a relé időpontjait.

    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
    

Visszaállítás (új szerver vagy lemezhiba után): állítsa be újra a szervert (1. és 2. lépés), és ismételje meg ennek a lépésnek az 1. és 2. pontját ugyanazzal a tárolóval, de új jelszó létrehozása helyett a mentett jelszót írja a /root/.restic-blossom-password fájlba, és hagyja ki a restic init parancsot. Ezután másolja a legutóbbi mentést a szerver kötetébe:

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

Amikor legközelebb ellenőrzi a másolatokat, a Drive újra megtalálja a blokkokat, és a többi szerverről átmásolja mindazt, ami az utolsó mentés után érkezett. 2026. október 27-én az egész láncot kipróbáltuk: mentés, a szerver törlése, visszaállítás, minden blokk visszaolvasása a saját hash-ével ellenőrizve, végül törlés a Drive kulcsával.

Évente egyszer végezze el ezt a visszaállítást egy tartalék gépen, és ellenőrizze, hogy a szerver a blokkjaival válaszol-e: ez az egyetlen próba, amely a teljes láncot igazolja, a jelszót is beleértve.

Jó tudni