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
- Een machine die altijd aan staat en vanaf internet bereikbaar is: een kleine VPS of een computer thuis. Ze heeft zoveel schijfruimte nodig als uw Drive bevat, en wat ruimte om te groeien.
- Een domein of subdomein dat ernaar verwijst, bijvoorbeeld
blossom.example.com. - Docker en een reverse proxy die HTTPS levert. De voorbeelden gebruiken Caddy, dat het certificaat zelf regelt.
- De volumesleutel van uw Drive. Herkos Drive toont die in Instellingen → Servers → Je eigen server, als 64 letters en cijfers. Het is niet de sleutel van uw profiel: Drive uploadt nooit met uw profielsleutel, dus een server die alleen uw npub accepteert, zou Drive weigeren.
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
- Open in Herkos Drive Instellingen → Servers, voeg
https://blossom.example.comtoe en markeer hem als van jou. - 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.
- 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.
-
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.pubtoe).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' -
Sla dit op als
/usr/local/bin/backup-blossomen maak het uitvoerbaar (sudo chmod 700 /usr/local/bin/backup-blossom). WijzigBLOSSOM_DIRals uw bestanden niet in/root/blossomstaan. 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 -
Voer het één keer met de hand uit (
sudo /usr/local/bin/backup-blossom) en plan het daarna in metsudo 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 metFatalbetekent 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
- Alleen uw Drive kan uploaden. Iedereen die het adres van een blok kent, kan het downloaden, zoals op elke Blossom-server, maar het is versleuteld: zonder de sleutels in uw Drive is het ruis.
- Als uw volumesleutel verandert (Drive laat het u weten wanneer een volume
wordt vernieuwd), voeg de nieuwe dan toe als extra regel onder
pubkeys, herstart (docker compose up -d), en laat de oude staan. - Updates. Lees de changelog,
wijzig de versie in
image:, en voerdocker compose pullendocker compose up -duit. - Uw IP-adres. De server ziet het adres van elke app die ermee verbinding maakt, zoals elke server. Op uw eigen server bent u de enige die ze ziet.