Herkos

Serverul dvs. Blossom propriu

Ultima actualizare: 27 octombrie 2026

Herkos Drive taie fiecare fișier în blocuri criptate și le păstrează pe mai multe servere Blossom: trei copii, pe cel puțin două tipuri de server, și una pe un server al dvs. Serverele publice păstrează blocurile gratuit, dar nu promit nimic: le pot șterge, se pot umple sau se pot închide.

Un server Blossom propriu vă păstrează copia cât timp decideți dvs. și primește blocuri doar de la Drive-ul dvs. Această pagină explică cum să configurați unul în trei pași, plus o copie de rezervă în fiecare noapte. Se potrivește bine cu releul dvs. propriu drept căsuță poștală și durează aproximativ cincisprezece minute dacă aveți deja un server.

Ce server să folosiți

blossom-server de la hzrd149, versiunea 6.4.1 (6 octombrie 2026, licență MIT). L-am rulat pe 27 octombrie 2026 cu configurația de mai jos și cu codul de încărcare al lui Drive și am verificat de ce are nevoie Drive, nu ce declară serverul:

Ce face Drive Rezultat
Încarcă blocuri criptate de 8 MiB (application/octet-stream) Acceptate
Întreabă înainte de încărcare (BUD-06) Răspunde și refuză orice altă cheie
Îi cere serverului dvs. să copieze un bloc de pe unul public (BUD-04) Copiat
Citește un bloc fără să se identifice Servit, octet cu octet
Șterge un bloc cu cheia care l-a încărcat Șters: o nouă cerere primește 404
Încărcări de la orice altă cheie Refuzate (401)

De ce aveți nevoie

Pasul 1: rulați serverul

Creați un dosar pentru el, de exemplu /root/blossom, și salvați în el aceste două fișiere. Primul este 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: {}

Al doilea este config.yml. Puneți domeniul dvs. în publicDomain și cheia de volum acolo unde scrie 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

Ce spune: doar cheia dvs. de volum poate încărca sau cere copii (requirePubkeyInRule), iar un bloc este păstrat până când Drive îl șterge. Serverul cere o expirare în fiecare regulă; 100 years fără a fi citit înseamnă, în practică, niciodată, iar Drive își citește oricum blocurile în mod regulat. Portul ascultă doar pe mașina însăși (127.0.0.1): totul trece prin proxy. Porniți-l:

cd /root/blossom
docker compose up -d

Pasul 2: puneți HTTPS în față

Cu Caddy, întreaga configurație (/etc/caddy/Caddyfile) este:

blossom.example.com {
    reverse_proxy 127.0.0.1:3000
}

Dacă același Caddy deservește deja releul dvs., adăugați acest bloc sub cel existent. Reîncărcați Caddy (sudo systemctl reload caddy). Deschiderea https://blossom.example.com într-un browser ar trebui acum să primească un răspuns, cu un 404: nu există pagină principală, intenționat.

Pasul 3: anunțați Herkos Drive

  1. În Herkos Drive, deschideți Setări → Servere, adăugați https://blossom.example.com și marcați-l ca al dvs.
  2. Drive îl întreabă înainte de fiecare încărcare. De atunci înainte, fiecare fișier nou primește o copie acolo, iar fișierele pe care le aveați deja o primesc pe a lor data viitoare când Drive verifică copiile.
  3. Păstrați celelalte servere în listă. Al dvs. ține una dintre cele trei copii, niciodată singura: dacă este căzut, fișierele dvs. sunt încă pe celelalte, iar Drive vă anunță după o săptămână de tăcere.

Pasul 4: faceți o copie de rezervă în fiecare noapte

Dacă serverul dvs. moare, Drive observă și le dă fișierelor afectate copii pe celelalte servere din listă. Dar copia de pe serverul dvs. este singura care nu depinde de nimeni altcineva, iar o copie de rezervă în fiecare noapte vă permite s-o refaceți fără a copia totul din nou prin internet.

Serverul păstrează totul în volumul Docker blossom_data (numele începe cu dosarul în care se află fișierele; verificați-l cu docker volume ls): blocurile, câte un fișier pentru fiecare, și o mică bază de date SQLite care spune cine a încărcat fiecare bloc. Blocurile nu se schimbă niciodată, dar baza de date nu trebuie copiată în timp ce se scrie în ea. Așa că scriptul copiază totul cu serverul pornit, îl oprește pentru cele câteva secunde cât durează copierea a ceea ce s-a schimbat între timp, îl repornește și abia apoi încarcă copia. Cât timp este oprit, Drive pur și simplu încearcă din nou puțin mai târziu.

Copia pleacă de pe server cu restic, care o criptează înainte să plece. Folosiți un loc la un alt furnizor decât cel al serverului: un cont SFTP (un storage box, un computer acasă) sau un bucket compatibil S3. Dacă faceți deja astfel copii de rezervă ale releului, folosiți același loc, cu un alt dosar.

  1. Instalați instrumentele și creați depozitul. Păstrați parola și în managerul de parole: fără ea copiile nu pot fi citite, iar dacă există doar pe server, moare odată cu serverul. Pentru SFTP, root are nevoie și de o cheie SSH pe care mașina de backup o acceptă (sudo ssh-keygen -t ed25519, apoi adăugați /root/.ssh/id_ed25519.pub acolo).

    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. Salvați acest script ca /usr/local/bin/backup-blossom și faceți-l executabil (sudo chmod 700 /usr/local/bin/backup-blossom). Schimbați BLOSSOM_DIR dacă fișierele dvs. nu sunt în /root/blossom. Păstrează ultimele 14 zile, 8 săptămâni și 12 luni. Blocurile nu se schimbă niciodată, așa că în fiecare noapte se adaugă doar ce este nou.

    #!/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. Rulați-l o dată manual (sudo /usr/local/bin/backup-blossom), apoi programați-l cu sudo crontab -e. A doua linie recitește lunar o zecime din datele stocate, de fiecare dată o altă zecime, ca să dovedească faptul că copiile pot fi încă deschise. Aruncați din când în când o privire în /var/log/backup-blossom.log: o linie cu Fatal înseamnă că, în acea noapte, copia a eșuat. Dacă și copia de rezervă a releului se face pe aceeași mașină, aceste ore nu se suprapun cu ale ei.

    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
    

Pentru restabilire (un server nou sau după o defecțiune a discului): configurați din nou serverul (pașii 1 și 2) și repetați punctele 1 și 2 ale acestui pas cu același depozit, dar scrieți parola salvată în /root/.restic-blossom-password în loc să creați una nouă și săriți peste restic init. Apoi copiați cea mai recentă copie de rezervă în volumul serverului:

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

Data viitoare când verifică copiile, Drive regăsește blocurile și copiază de pe celelalte servere tot ce a sosit după ultima copie de rezervă. Am încercat tot acest lanț pe 27 octombrie 2026: copie de rezervă, server șters, restabilire, fiecare bloc recitit cu propriul hash și apoi șters cu cheia lui Drive.

O dată pe an, faceți această restabilire pe o mașină de rezervă și verificați că serverul răspunde cu blocurile dvs.: este singurul test care dovedește că întregul lanț funcționează, inclusiv parola.

Bine de știut