Social Home huishoud-OS · gefedereerd · open

Zelf een relay draaien

Zet in ongeveer 15 minuten een Global Federation Server (GFS) op een VPS. Docker Compose + Cloudflare, meer niet.

Een relay is wat huishoudens die nooit gekoppeld zijn, elkaar laat vinden – een openbare ouderspace, bijvoorbeeld, of een buurtprikbord dat iedereen kan volgen. Iedereen kan er een draaien, en deze pagina leidt je er in ongeveer 15 minuten doorheen.

De GFS (Global Federation Server – de wereldwijde federatieserver) – de relay die huishoudens helpt elkaar te vinden – heeft drie taken. Hij is een gids, zodat huishoudens de wereldwijde spaces kunnen vinden waarvan de eigenaar hem heeft gekozen. Hij draagt verzegelde posts naar huishoudens die niet met elkaar gekoppeld zijn – volgers van een wereldwijde space, leden die via een GFS-link zijn toegetreden, privéspaces waarvan de eigenaar de GFS heeft ingeschakeld, en gekoppelde huishoudens die de GFS-terugvaloptie hebben aangezet – zodat een space blijft stromen terwijl de host slaapt. En hij bemiddelt openbare highlight-links – zie Highlights → openbaar delen voor de kant van de auteur. Bij elke taak verwerkt hij alleen enveloppen: hij leest nooit een bericht, slaat nooit een highlight-frame op. Je eigen relay hosten betekent dat je community bepaalt wie mag meedoen, en dat er geen enkele partij in het centrum zit.

Wat je nodig hebt

  • Een VPS met een publiek IP – elke aanbieder is goed.
  • Een domeinnaam. Een subdomein is prima – gfs.example.com.
  • Een Cloudflare-account op het gratis abonnement, gebruikt als TLS-terminator en DDoS-schild.
  • Docker geïnstalleerd op de VPS.

Ongeveer 15 minuten van begin tot eind.

1. Wijs je domein naar de server

Voeg in Cloudflare DNS een A-record toe:

TypeNaamIPv4-adresProxystatus
AgfsYOUR.SERVER.IP🟠 Proxied

De status “Proxied” (oranje wolk) betekent dat Cloudflare HTTPS voor je afhandelt – geen certificaten om te installeren, geen verlengingen om bij te houden. Je server hoeft intern alleen HTTP te spreken.

Zet dan in Cloudflare → SSL/TLS → Overview de versleutelingsmodus op Flexible – de relay zelf luistert achter de proxy op gewoon HTTP. Wil je TLS liever zelf op de server afhandelen (bijvoorbeeld met Caddy voor de container), gebruik dan Full (strict).

2. Maak de projectmap aan

SSH naar je VPS:

mkdir -p ~/gfs/data
cd ~/gfs

3. docker-compose.yml

services:
  gfs:
    image: ghcr.io/social-home-io/gfs:latest
    container_name: gfs
    restart: unless-stopped
    command: ["socialhome-global-server", "--config", "/var/lib/sh-gfs/global_server.toml"]
    volumes:
      - ./data:/var/lib/sh-gfs
    ports:
      - "80:8765"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8765/healthz"]
      interval: 30s
      timeout: 5s
      retries: 3

4. Initialiseer de configuratie

docker run --rm -v "$PWD/data:/var/lib/sh-gfs" \
  ghcr.io/social-home-io/gfs:latest \
  socialhome-global-server --init --config /var/lib/sh-gfs/global_server.toml

docker run --rm -it -v "$PWD/data:/var/lib/sh-gfs" \
  ghcr.io/social-home-io/gfs:latest \
  socialhome-global-server --set-password --config /var/lib/sh-gfs/global_server.toml

--init schrijft een verse configuratie; --set-password stelt het wachtwoord in voor het beheerportaal, dat je op https://gfs.example.com/admin vindt zodra de relay draait.

Open data/global_server.toml en stel je domein in:

[server]
base_url = "https://gfs.example.com"
Onder de motorkap

Elke optie in global_server.toml kan ook als omgevingsvariabele met het voorvoegsel GFS_ worden ingesteld – handig als je het compose-bestand liever op zichzelf laat staan:

VariabeleConfiguratiesleutelStandaard
GFS_HOST[server] host0.0.0.0
GFS_PORT[server] port8765
GFS_BASE_URL[server] base_url—
GFS_DATA_DIRdatamap/var/lib/sh-gfs
GFS_OPEN_SIGNUPopen_signupfalse

Bij dezelfde sleutel wint een omgevingsvariabele van het bestand.

Standaardinstellingen

Uit de doos is een verse relay voorzichtig op de juiste plekken. Huishoudens die ermee koppelen worden automatisch geaccepteerd (auto_accept_clients), zodat mensen kunnen verbinden zonder dat jij ergens op hoeft te klikken. Spaces die op je relay worden gepubliceerd, wachten daarentegen op jouw goedkeuring in het beheerportaal (auto_accept_spaces = false) – je gids toont alleen wat je zelf hebt bekeken. Open registratie staat uit, dus niemand kan een account op de relay zelf aanmaken tenzij je dat inschakelt.

5. Open de firewall

Op de VPS:

sudo ufw allow 80/tcp        # Cloudflare-proxy → GFS

Poort 8765 hoeft niet open – die is intern voor het Docker-netwerk.

6. Start de relay

docker compose up -d

Controleer vanaf je laptop dat hij antwoordt:

curl https://gfs.example.com/healthz
# → {"status":"ok","version":"…"}

7. Verbind vanuit Social Home

In Social Home → Instellingen → Verbindingen → Global Federation Servers → GFS toevoegen:

  • URL: https://gfs.example.com
  • Klik op Koppelen

Klaar. Deelt je relay koppeltokens uit (bijvoorbeeld vanuit het beheerportaal), dan is elk token eenmalig te gebruiken en 10 minuten geldig.

Wat je relay zal zien

Een relay draaien geeft je geen inkijk in iemands space. Posts komen verzegeld en opgevuld binnen; je leert bij welke space een envelop hoort en wanneer hij is aangekomen, maar niet welk huishouden hem heeft gepubliceerd. In de strikte modus kun je zelfs niet zien welke huishoudens mogen schrijven. Voor het volledige beeld, inclusief wat de relay nog wél kan waarnemen (timing, groottes, IP-adressen), lees je het beveiligingsmodel.

Bijwerken

cd ~/gfs
docker compose pull
docker compose up -d

De container is stateless, afgezien van ./data; een back-up is gewoon tar -czf data.tgz ./data.

De relay van het project

Wil je er geen zelf draaien, dan host het project één openbare relay op gfs.social-home.io – één QR-scan en je bent gekoppeld. Maar je space richten op een relay die jíj vertrouwt, is nou juist de hele reden om keuze te hebben, dus zelf een relay draaien wordt aangemoedigd voor elke community van meer dan een handvol huishoudens.