Herkos

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

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

  1. In Herkos Drive, apri Impostazioni → Server, aggiungi https://blossom.example.com e segnalo come tuo.
  2. 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.
  3. 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.

  1. 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'
    
  2. Salva questo come /usr/local/bin/backup-blossom e rendilo eseguibile (sudo chmod 700 /usr/local/bin/backup-blossom). Cambia BLOSSOM_DIR se 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
    
  3. Eseguilo una volta a mano (sudo /usr/local/bin/backup-blossom), poi pianificalo con sudo 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.log ogni tanto: una riga con Fatal significa 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