Herkos

Uw eigen Blossom-server

Laatst bijgewerkt: 27 oktober 2026

Herkos Drive knipt elk bestand in versleutelde blokken en bewaart die op meerdere Blossom-servers: drie kopieën, op ten minste twee soorten server, en één op een server van uzelf. Openbare servers bewaren blokken gratis, maar ze beloven niets: ze kunnen ze wissen, vollopen of sluiten.

Een eigen Blossom-server bewaart uw kopie zo lang als u beslist en accepteert alleen blokken van uw Drive. Deze pagina legt uit hoe u er in drie stappen een opzet, plus een nachtelijke back-up. Hij past goed bij uw eigen postbusrelay, en het kost ongeveer een kwartier als u al een server hebt.

Welke server te gebruiken

blossom-server van hzrd149, versie 6.4.1 (6 oktober 2026, MIT-licentie). We hebben hem op 27 oktober 2026 gedraaid met de configuratie hieronder en de uploadcode van Drive zelf, en gecontroleerd wat Drive nodig heeft, niet wat de server belooft:

Wat Drive doet Resultaat
Uploadt versleutelde blokken van 8 MiB (application/octet-stream) Geaccepteerd
Vraagt vóór het uploaden (BUD-06) Antwoordt, en weigert elke andere sleutel
Vraagt uw server een blok van een openbare server te kopiëren (BUD-04) Gekopieerd
Leest een blok zonder zich te identificeren Geleverd, byte voor byte
Verwijdert een blok met de sleutel die het heeft geüpload Verwijderd: opnieuw vragen geeft 404
Uploads vanaf elke andere sleutel Geweigerd (401)

Wat u nodig hebt

Stap 1: de server starten

Maak er een map voor, bijvoorbeeld /root/blossom, en sla daarin deze twee bestanden op. Het eerste is 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: {}

Het tweede is config.yml. Zet uw domein in publicDomain en uw volumesleutel op de plek waar YOUR-VOLUME-KEY staat:

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

Wat er staat: alleen uw volumesleutel mag uploaden of om kopieën vragen (requirePubkeyInRule), en een blok wordt bewaard tot Drive het verwijdert. De server eist in elke regel een vervaltermijn; 100 years zonder gelezen te worden is in de praktijk nooit, en Drive leest zijn blokken toch regelmatig. De poort luistert alleen op de machine zelf (127.0.0.1): alles gaat via de proxy. Start hem:

cd /root/blossom
docker compose up -d

Stap 2: HTTPS ervoor zetten

Met Caddy is de hele configuratie (/etc/caddy/Caddyfile):

blossom.example.com {
    reverse_proxy 127.0.0.1:3000
}

Als dezelfde Caddy al uw relay bedient, voeg dit blok dan toe onder dat van het relay. Herlaad Caddy (sudo systemctl reload caddy). Als u nu https://blossom.example.com in een browser opent, hoort er antwoord te komen, met een 404: er is bewust geen startpagina.

Stap 3: Herkos Drive inlichten

  1. Open in Herkos Drive Instellingen → Servers, voeg https://blossom.example.com toe en markeer hem als van jou.
  2. Drive vraagt het hem vóór elke upload. Vanaf dan krijgt elk nieuw bestand daar een kopie, en de bestanden die u al had, krijgen de hunne de volgende keer dat Drive de kopieën controleert.
  3. Houd de andere servers in de lijst. De uwe is een van de drie kopieën, nooit de enige: als hij uitvalt, staan uw bestanden nog op de andere, en Drive laat het u weten na een week stilte.

Stap 4: elke nacht een back-up maken

Als uw server het begeeft, merkt Drive dat en geeft het de betrokken bestanden kopieën op de andere servers in uw lijst. Maar de kopie op uw server is de enige die van niemand anders afhangt, en met een nachtelijke back-up kunt u die opnieuw opbouwen zonder alles nog eens over internet te kopiëren.

De server bewaart alles in het Docker-volume blossom_data (de naam begint met de map waarin de bestanden staan; controleer het met docker volume ls): de blokken, elk in een eigen bestand, en een kleine SQLite-database die bijhoudt wie elk blok heeft geüpload. Blokken veranderen nooit, maar de database mag niet worden gekopieerd terwijl erin wordt geschreven. Daarom kopieert het script alles terwijl de server draait, stopt het hem voor de paar seconden die het kost om te kopiëren wat er intussen is veranderd, start het hem opnieuw en uploadt het pas daarna de kopie. Zolang hij gestopt is, probeert Drive het gewoon iets later opnieuw.

De kopie verlaat de server met restic, dat hem versleutelt voordat hij vertrekt. Gebruik een plek bij een andere provider dan de server: een SFTP-account (een storage box, een computer thuis) of een S3-compatibele bucket. Als u van uw relay al op deze manier een back-up maakt, gebruik dan dezelfde plek met een andere map.

  1. Installeer de tools en maak de repository aan. Bewaar het wachtwoord ook in uw wachtwoordmanager: zonder dat zijn de kopieën niet te lezen, en als het alleen op de server staat, gaat het met de server verloren. Voor SFTP heeft root ook een SSH-sleutel nodig die de back-upmachine accepteert (sudo ssh-keygen -t ed25519, en voeg daar dan /root/.ssh/id_ed25519.pub toe).

    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. Sla dit op als /usr/local/bin/backup-blossom en maak het uitvoerbaar (sudo chmod 700 /usr/local/bin/backup-blossom). Wijzig BLOSSOM_DIR als uw bestanden niet in /root/blossom staan. Het bewaart de laatste 14 dagen, 8 weken en 12 maanden. Blokken veranderen nooit, dus elke nacht komt alleen het nieuwe erbij.

    #!/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. Voer het één keer met de hand uit (sudo /usr/local/bin/backup-blossom) en plan het daarna in met sudo crontab -e. De tweede regel leest elke maand een tiende van de opgeslagen gegevens terug, telkens een ander tiende, om te bewijzen dat de kopieën nog te openen zijn. Kijk af en toe in /var/log/backup-blossom.log: een regel met Fatal betekent dat de kopie van die nacht is mislukt. Als het relay op dezelfde machine wordt geback-upt, overlappen deze tijden niet met die van het relay.

    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
    

Terugzetten (een nieuwe server, of na een schijfdefect): zet de server opnieuw op (stap 1 en 2) en herhaal punt 1 en 2 van deze stap met dezelfde repository, maar schrijf het wachtwoord dat u hebt bewaard in /root/.restic-blossom-password in plaats van een nieuw aan te maken, en sla restic init over. Kopieer daarna de nieuwste back-up naar het volume van de 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

De volgende keer dat het de kopieën controleert, vindt Drive de blokken terug en kopieert het van de andere servers alles wat na de laatste back-up is binnengekomen. We hebben deze hele keten op 27 oktober 2026 getest: back-up, server verwijderd, terugzetten, elk blok teruggelezen met zijn eigen hash, en daarna verwijderd met de sleutel van Drive.

Doe dit terugzetten één keer per jaar op een reservemachine en controleer dat de server antwoordt met uw blokken: het is de enige test die de hele keten bewijst, wachtwoord inbegrepen.

Goed om te weten