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
- O mașină care este mereu pornită și accesibilă de pe internet: un VPS mic sau un computer acasă. Are nevoie de atât spațiu pe disc cât ocupă Drive-ul dvs., plus ceva loc pentru creștere.
- Un domeniu sau subdomeniu care indică spre ea, de exemplu
blossom.example.com. - Docker și un proxy invers care oferă HTTPS. Exemplele folosesc Caddy, care obține singur certificatul.
- Cheia de volum a Drive-ului dvs. Herkos Drive o afișează în Setări → Servere → Serverul tău propriu, ca 64 de litere și cifre. Nu este cheia profilului dvs.: Drive nu încarcă niciodată cu cheia profilului, așa că un server care acceptă doar npub-ul dvs. ar respinge Drive.
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
- În Herkos Drive, deschideți Setări → Servere, adăugați
https://blossom.example.comși marcați-l ca al dvs. - 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.
- 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.
-
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.pubacolo).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' -
Salvați acest script ca
/usr/local/bin/backup-blossomși faceți-l executabil (sudo chmod 700 /usr/local/bin/backup-blossom). SchimbațiBLOSSOM_DIRdacă 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 -
Rulați-l o dată manual (
sudo /usr/local/bin/backup-blossom), apoi programați-l cusudo 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 cuFatalî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
- Doar Drive-ul dvs. poate încărca. Oricine cunoaște adresa unui bloc îl poate descărca, ca pe orice server Blossom, dar blocul este criptat: fără cheile din Drive-ul dvs. este doar zgomot.
- Dacă cheia dvs. de volum se schimbă (Drive vă anunță când un volum este
reînnoit), adăugați-o pe cea nouă ca încă o linie sub
pubkeys, reporniți (docker compose up -d) și lăsați-o pe cea veche acolo. - Actualizări. Citiți jurnalul de modificări,
schimbați versiunea din
image:și rulațidocker compose pullșidocker compose up -d. - Adresa dvs. IP. Serverul vede adresa fiecărei aplicații care se conectează la el, ca orice server. Pe propriul server, singurul care le vede sunteți dvs.