Il tuo server Blossom
Ultimo aggiornamento: 27 ottobre 2026
Herkos Drive taglia ogni file in blocchi cifrati e li conserva su diversi server Blossom: tre copie, su almeno due tipi di server, e una su un server tuo. I server pubblici conservano i blocchi gratis, ma non promettono nulla: possono eliminarli, riempirsi o chiudere.
Un server Blossom tutto tuo conserva la tua copia per tutto il tempo che decidi tu e accetta blocchi solo dal tuo Drive. Questa pagina spiega come configurarne uno in tre passi, più un backup notturno. Si abbina bene al tuo relay per la posta, e ci vogliono circa quindici minuti se hai già un server.
Quale server usare
blossom-server di hzrd149, versione 6.4.1 (6 ottobre 2026, licenza MIT). Il 27 ottobre 2026 lo abbiamo messo alla prova con la configurazione qui sotto e con il codice di caricamento di Drive, e abbiamo verificato ciò di cui Drive ha bisogno, non cosa dichiara il server:
| Cosa fa Drive | Risultato |
|---|---|
Carica blocchi cifrati da 8 MiB (application/octet-stream) |
Accettati |
| Chiede prima di caricare (BUD-06) | Risponde, e respinge qualsiasi altra chiave |
| Chiede al tuo server di copiare un blocco da uno pubblico (BUD-04) | Copiato |
| Legge un blocco senza identificarsi | Servito, byte per byte |
| Elimina un blocco con la chiave che lo ha caricato | Eliminato: chiedendolo di nuovo si ottiene 404 |
| Caricamenti da qualsiasi altra chiave | Rifiutati (401) |
Cosa ti serve
- Una macchina sempre accesa e raggiungibile da internet: un piccolo VPS o un computer a casa. Le serve tanto disco quanto ne occupa il tuo Drive, più un po' di spazio per crescere.
- Un dominio o sottodominio che punti a essa, per esempio
blossom.example.com. - Docker e un reverse proxy che fornisca HTTPS. Gli esempi usano Caddy, che ottiene il certificato da solo.
- La chiave del volume del tuo Drive. Herkos Drive la mostra in Impostazioni → Server → Il tuo server personale, come 64 lettere e cifre. Non è la chiave del tuo profilo: Drive non carica mai con la chiave del profilo, quindi un server che accetta solo il tuo npub respingerebbe Drive.
Passo 1: avvia il server
Crea una cartella apposita, per esempio /root/blossom, e salvaci dentro questi due
file. Il primo è 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: {}
Il secondo è config.yml. Metti il tuo dominio in publicDomain e la tua chiave
del volume dove c'è scritto 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
Cosa dice: solo la tua chiave del volume può caricare o chiedere copie
(requirePubkeyInRule), e un blocco viene conservato finché Drive non lo elimina. Il
server richiede una scadenza in ogni regola; 100 years senza essere letto equivale,
in pratica, a mai, e comunque Drive legge regolarmente i suoi blocchi. La porta è in
ascolto solo sulla macchina stessa (127.0.0.1): tutto passa attraverso il proxy.
Avvialo:
cd /root/blossom
docker compose up -d
Passo 2: metti HTTPS davanti
Con Caddy, l'intera configurazione (/etc/caddy/Caddyfile) è:
blossom.example.com {
reverse_proxy 127.0.0.1:3000
}
Se lo stesso Caddy serve già il tuo relay, aggiungi questo blocco sotto quello del
relay. Ricarica Caddy (sudo systemctl reload caddy). Aprendo
https://blossom.example.com in un browser ora dovrebbe rispondere, con un 404:
non c'è una home page, ed è voluto.
Passo 3: dillo a Herkos Drive
- In Herkos Drive, apri Impostazioni → Server, aggiungi
https://blossom.example.come segnalo come tuo. - Drive lo interpella prima di ogni caricamento. Da quel momento ogni nuovo file riceve lì una copia, e i file che avevi già ricevono la loro la prossima volta che Drive controlla le copie.
- Tieni gli altri server nell'elenco. Il tuo è una delle tre copie, mai l'unica: se va giù, i tuoi file sono ancora sugli altri, e Drive te lo dice dopo una settimana di silenzio.
Passo 4: fanne un backup ogni notte
Se il tuo server muore, Drive se ne accorge e dà ai file interessati delle copie sugli altri server del tuo elenco. Ma la copia sul tuo server è l'unica che non dipende da nessun altro, e un backup notturno ti permette di ricostruirla senza ricopiare tutto via internet.
Il server conserva tutto dentro il volume Docker blossom_data (il nome inizia con
la cartella in cui si trovano i file; verificalo con docker volume ls): i blocchi,
un file ciascuno, e un piccolo database SQLite che dice chi ha caricato ognuno di
essi. I blocchi non cambiano mai, ma il database non va copiato mentre ci si sta
scrivendo. Quindi lo script copia tutto con il server in funzione, lo ferma per i
pochi secondi che servono a copiare ciò che è cambiato nel frattempo, lo riavvia e
solo allora carica la copia. Mentre è fermo, Drive semplicemente riprova un po' più
tardi.
La copia lascia il server con restic, che la cifra prima che parta. Usa una destinazione presso un fornitore diverso da quello del server: un account SFTP (uno storage box, un computer a casa) o un bucket compatibile S3. Se fai già il backup del tuo relay in questo modo, usa la stessa destinazione con un'altra cartella.
-
Installa gli strumenti e crea il repository. Conserva la password anche nel tuo gestore di password: senza di essa le copie non si possono leggere, e se vive solo sul server, muore con il server. Per SFTP, root ha anche bisogno di una chiave SSH accettata dalla macchina di backup (
sudo ssh-keygen -t ed25519, poi aggiungi lì/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' -
Salva questo come
/usr/local/bin/backup-blossome rendilo eseguibile (sudo chmod 700 /usr/local/bin/backup-blossom). CambiaBLOSSOM_DIRse i tuoi file non sono in/root/blossom. Conserva gli ultimi 14 giorni, 8 settimane e 12 mesi. I blocchi non cambiano mai, quindi ogni notte aggiunge solo ciò che è nuovo.#!/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 -
Eseguilo una volta a mano (
sudo /usr/local/bin/backup-blossom), poi pianificalo consudo crontab -e. La seconda riga rilegge un decimo dei dati archiviati ogni mese, un decimo diverso ogni volta, per dimostrare che le copie si possono ancora aprire. Dai un'occhiata a/var/log/backup-blossom.logogni tanto: una riga conFatalsignifica che la copia di quella notte non è riuscita. Se il backup del relay avviene sulla stessa macchina, questi orari non si sovrappongono ai suoi.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 ripristinare (un nuovo server, o dopo un guasto del disco): configura di nuovo
il server (passi 1 e 2) e ripeti i punti 1 e 2 di questo passo con lo stesso
repository, ma scrivi in /root/.restic-blossom-password la password che hai
conservato invece di crearne una nuova, e salta restic init. Poi copia l'ultimo
backup nel volume del server:
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 prossima volta che controlla le copie, Drive ritrova i blocchi e copia dagli altri server tutto ciò che è arrivato dopo l'ultimo backup. Abbiamo provato l'intera catena il 27 ottobre 2026: backup, server eliminato, ripristino, ogni blocco riletto con il suo hash, e poi eliminato con la chiave di Drive.
Una volta all'anno, esegui questo ripristino su una macchina di riserva e verifica che il server risponda con i tuoi blocchi: è l'unico test che dimostra l'intera catena, password compresa.
Buono a sapersi
- Solo il tuo Drive può caricare. Chiunque conosca l'indirizzo di un blocco può scaricarlo, come su qualsiasi server Blossom, ma è cifrato: senza le chiavi nel tuo Drive è solo rumore.
- Se la tua chiave del volume cambia (Drive te lo dice quando un volume viene
rinnovato), aggiungi quella nuova come un'altra riga sotto
pubkeys, riavvia (docker compose up -d) e lascia lì quella vecchia. - Aggiornamenti. Leggi il changelog,
cambia la versione in
image:ed eseguidocker compose pulledocker compose up -d. - Il tuo indirizzo IP. Il server vede l'indirizzo di ogni app che vi si connette, come qualsiasi server. Sul tuo server, l'unico che li vede sei tu.