El teu propi servidor Blossom
Última actualització: 27 d'octubre de 2026
Herkos Drive talla cada fitxer en blocs xifrats i els guarda en diversos servidors Blossom: tres còpies, en almenys dos tipus de servidor, i una en un servidor teu. Els servidors públics guarden blocs de franc, però no prometen res: els poden purgar, omplir-se o tancar.
Un servidor Blossom propi guarda la teva còpia tant de temps com decideixis i només accepta blocs del teu Drive. Aquesta pàgina explica com muntar-ne un en tres passos, més una còpia de seguretat cada nit. Va bé juntament amb el teu propi relay de correu, i calen uns quinze minuts si ja tens un servidor.
Quin servidor cal fer servir
blossom-server de hzrd149, versió 6.4.1 (6 d'octubre de 2026, llicència MIT). El vam posar en marxa el 27 d'octubre de 2026 amb la configuració de sota i el codi de pujada del mateix Drive, i vam comprovar què necessita Drive, no què anuncia el servidor:
| Què fa Drive | Resultat |
|---|---|
Puja blocs xifrats de 8 MiB (application/octet-stream) |
Acceptats |
| Pregunta abans de pujar (BUD-06) | Respon, i rebutja qualsevol altra clau |
| Demana al teu servidor que copiï un bloc d'un de públic (BUD-04) | Copiat |
| Llegeix un bloc sense identificar-se | Servit, byte a byte |
| Esborra un bloc amb la clau que el va pujar | Esborrat: si es torna a demanar, dona 404 |
| Pujades des de qualsevol altra clau | Rebutjades (401) |
Què et cal
- Una màquina sempre engegada i accessible des d'internet: un VPS petit o un ordinador a casa. Necessita tant disc com ocupi el teu Drive, i una mica de marge per créixer.
- Un domini o subdomini que hi apunti, per exemple
blossom.example.com. - Docker i un proxy invers que ofereixi HTTPS. Els exemples fan servir Caddy, que obté el certificat pel seu compte.
- La clau del volum del teu Drive. Herkos Drive la mostra a Configuració → Servidors → El teu servidor personal, com a 64 lletres i xifres. No és la clau del teu perfil: Drive mai no puja amb la clau del perfil, així que un servidor que només accepti el teu npub rebutjaria Drive.
Pas 1: posa en marxa el servidor
Crea una carpeta per al servidor, per exemple /root/blossom, i desa-hi aquests
dos fitxers. El primer és 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: {}
El segon és config.yml. Posa el teu domini a publicDomain i la teva clau del
volum on diu 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
Què diu: només la teva clau del volum pot pujar o demanar còpies
(requirePubkeyInRule), i un bloc es guarda fins que Drive l'esborra. El
servidor necessita una caducitat a cada regla; 100 years sense ser llegit és, a
la pràctica, mai, i de tota manera Drive llegeix els seus blocs regularment. El
port només escolta a la mateixa màquina (127.0.0.1): tot passa pel proxy.
Engega'l:
cd /root/blossom
docker compose up -d
Pas 2: posa-hi HTTPS al davant
Amb Caddy, tota la configuració (/etc/caddy/Caddyfile) és:
blossom.example.com {
reverse_proxy 127.0.0.1:3000
}
Si el mateix Caddy ja serveix el teu relay, afegeix aquest bloc a sota del seu.
Recarrega Caddy (sudo systemctl reload caddy). Si obres
https://blossom.example.com en un navegador, ara hauria de respondre, amb un
404: no hi ha pàgina d'inici, expressament.
Pas 3: digues-ho a Herkos Drive
- A Herkos Drive, obre Configuració → Servidors, afegeix
https://blossom.example.comi marca'l com a teu. - Drive li pregunta abans de cada pujada. A partir d'aleshores, cada fitxer nou hi té una còpia, i els fitxers que ja tenies reben la seva la propera vegada que Drive comprovi les còpies.
- Mantén els altres servidors a la llista. El teu és una de les tres còpies, mai l'única: si cau, els teus fitxers continuen als altres, i Drive t'avisa després d'una setmana de silenci.
Pas 4: fes-ne una còpia de seguretat cada nit
Si el teu servidor mor, Drive se n'adona i dona als fitxers afectats còpies als altres servidors de la teva llista. Però la còpia del teu servidor és l'única que no depèn de ningú més, i una còpia cada nit et permet refer-la sense tornar a copiar-ho tot per internet.
El servidor ho guarda tot dins del volum de Docker blossom_data (el nom comença
amb la carpeta on hi ha els fitxers; comprova-ho amb docker volume ls): els
blocs, un fitxer cadascun, i una petita base de dades SQLite que diu qui ha pujat
cadascun. Els blocs no canvien mai, però la base de dades no s'ha de copiar
mentre s'hi escriu. Així que l'script ho copia tot amb el servidor en marxa,
l'atura els pocs segons que triga a copiar el que ha canviat mentrestant, el
torna a engegar, i només llavors puja la còpia. Mentre està aturat, Drive
simplement ho torna a provar una mica més tard.
La còpia surt del servidor amb restic, que la xifra abans que surti. Fes servir un lloc d'un proveïdor diferent del del servidor: un compte SFTP (una storage box, un ordinador a casa) o un bucket compatible amb S3. Si ja fas així la còpia del teu relay, fes servir el mateix lloc amb una altra carpeta.
-
Instal·la les eines i crea el repositori. Guarda la contrasenya també al teu gestor de contrasenyes: sense ella les còpies no es poden llegir, i si només viu al servidor, mor amb el servidor. Per a SFTP, root també necessita una clau SSH que la màquina de còpies accepti (
sudo ssh-keygen -t ed25519, i després afegeix-hi/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' -
Desa això com a
/usr/local/bin/backup-blossomi fes-lo executable (sudo chmod 700 /usr/local/bin/backup-blossom). CanviaBLOSSOM_DIRsi els teus fitxers no són a/root/blossom. Conserva els últims 14 dies, 8 setmanes i 12 mesos. Els blocs no canvien mai, així que cada nit només afegeix el que és 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 -
Executa'l una vegada a mà (
sudo /usr/local/bin/backup-blossom) i després programa'l ambsudo crontab -e. La segona línia torna a llegir una desena part de les dades guardades cada mes, una desena diferent cada vegada, per demostrar que les còpies encara es poden obrir. Mira de tant en tant/var/log/backup-blossom.log: una línia ambFatalvol dir que la còpia d'aquella nit ha fallat. Si la còpia del relay es fa a la mateixa màquina, aquestes hores no coincideixen amb les seves.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
Per restaurar (un servidor nou, o després d'una avaria del disc): torna a muntar
el servidor (passos 1 i 2) i repeteix els punts 1 i 2 d'aquest pas amb el mateix
repositori, però escriu la contrasenya que vas guardar a
/root/.restic-blossom-password en lloc de crear-ne una de nova, i salta't
restic init. Després copia l'última còpia al volum del servidor:
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
La propera vegada que comprovi les còpies, Drive torna a trobar els blocs i copia dels altres servidors el que hagi arribat després de l'última còpia. Vam provar tota aquesta cadena el 27 d'octubre de 2026: còpia, servidor esborrat, restauració, cada bloc rellegit amb el seu propi hash, i esborrat després amb la clau de Drive.
Un cop l'any, fes aquesta restauració en una màquina de recanvi i comprova que el servidor respon amb els teus blocs: és l'única prova que demostra tota la cadena, contrasenya inclosa.
Bo de saber
- Només el teu Drive pot pujar. Qualsevol que conegui l'adreça d'un bloc el pot baixar, com a qualsevol servidor Blossom, però està xifrat: sense les claus del teu Drive és soroll.
- Si la teva clau del volum canvia (Drive t'avisa quan es renova un volum),
afegeix la nova com una altra línia sota
pubkeys, reinicia (docker compose up -d) i deixa-hi l'antiga. - Actualitzacions. Llegeix el registre de canvis,
canvia la versió a
image:i executadocker compose pullidocker compose up -d. - La teva adreça IP. El servidor veu l'adreça de cada aplicació que s'hi connecta, com qualsevol servidor. Al teu propi servidor, l'únic que les veu ets tu.