Herkos

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

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

  1. A Herkos Drive, obre Configuració → Servidors, afegeix https://blossom.example.com i marca'l com a teu.
  2. 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.
  3. 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.

  1. 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'
    
  2. Desa això com a /usr/local/bin/backup-blossom i fes-lo executable (sudo chmod 700 /usr/local/bin/backup-blossom). Canvia BLOSSOM_DIR si 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
    
  3. Executa'l una vegada a mà (sudo /usr/local/bin/backup-blossom) i després programa'l amb sudo 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 amb Fatal vol 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