Monter un relais n'est pas très compliqué. Il faut être un peu à l'aise avec le terminal et avoir quelques bases de Docker, mais ça devrait être faisable pour la plupart des gens.
Dans ce guide, je vous montre comment monter votre propre relais avec strfry (un relais Nostr moderne et rapide, écrit en C++) et Caddy devant pour vous offrir du HTTPS automatique.
Si strfry vous paraît lourd pour votre usage, jetez un œil à haven (un relais personnel avec inbox et outbox intégrés), khatru (une bibliothèque Go pour construire votre relais en quelques lignes), ou nostr-rs-relay (petit, en Rust, avec SQLite).
pré-requis
- Un nom de domaine. Vous pouvez en acheter chez Njalla, qui accepte les cryptomonnaies et respecte la vie privée. Namecheap accepte aussi Bitcoin. Porkbun est une autre bonne option.
- Un serveur. Vous pouvez louer un petit VPS pour quelques euros par mois chez Netcup, Hetzner ou DigitalOcean. Pour des options axées vie privée, voir kycnot.me.
exigences
- Matériel : rien de spécial. Les événements, ce n'est que du texte, donc le stockage grossit lentement. Un VPS avec 1 Go de RAM suffit largement pour un relais perso ou de petite communauté.
- Système : je recommande une version récente de Debian ou Ubuntu si vous n'avez pas de préférence.
- Logiciels :
git, docker, et docker compose.
Avec ça, vous êtes prêt à commencer.
dns
Avant de toucher à Caddy, assurez-vous d'avoir ajouté un enregistrement A (et/ou AAAA) sur votre domaine pointant vers l'IP de votre serveur. Quelque chose comme relay.example.com fait l'affaire. Caddy s'en servira pour obtenir un certificat TLS auprès de Let's Encrypt.
mise en place
préparation de base
- Connectez-vous au serveur en SSH et créez un dossier pour le relais : mkdir -p ~/nostr-relay && cd ~/nostr-relay
- Créez les dossiers de données et de config : mkdir -p data strfry
Maintenant créez strfry/strfry.conf avec ce contenu. Modifiez les champs name, description, pubkey et contact pour que le relais s'identifie correctement (le pubkey doit être votre clé publique en hex, pas votre npub) :
# strfry.conf, config minimale db = "/app/strfry-db/" relay { bind = "0.0.0.0" port = 7777 info { name = "mon relais nostr" description = "un relais personnel" pubkey = "VOTRE_PUBKEY_HEX" contact = "vous@example.com" } maxWebsocketPayloadSize = 131072 autoPingSeconds = 55 enableTcpKeepalive = true writePolicy { plugin = "" # pointez vers un script pour filtrer à votre guise } compression { enabled = true slidingWindow = true } }
Si vous voulez voir toutes les options, l'exemple complet de config vit dans le dépôt strfry.
Puis créez un docker-compose.yml dans ~/nostr-relay. Les labels caddy.* indiquent à notre proxy inverse de découvrir ce service automatiquement (on configure le proxy à l'étape suivante) :
services:
strfry:
image: dockurr/strfry:latest
container_name: strfry
restart: unless-stopped
volumes:
- ./data:/app/strfry-db
- ./strfry/strfry.conf:/app/strfry.conf:ro
networks:
- caddy
labels:
caddy: relay.example.com
caddy.reverse_proxy: "{{upstreams 7777}}"
networks:
caddy:
external: true
Remplacez relay.example.com par votre domaine. Les clients se connecteront avec wss://relay.example.com.
Lancez :
- Créez le réseau Docker partagé : docker network create caddy
- Démarrez le relais : docker compose up -d
- Vérifiez les logs : docker compose logs -f. Vous devriez voir strfry écouter sur
0.0.0.0:7777.
Le relais tourne dans le réseau Docker, mais n'est pas encore joignable depuis l'extérieur. On met maintenant un proxy devant pour le HTTPS.
proxy (caddy-docker-proxy)
On utilise caddy-docker-proxy, une build de Caddy qui lit les labels des conteneurs en cours et se configure toute seule. Pas de Caddyfile à maintenir. Ajouter d'autres services plus tard, c'est juste poser des labels dessus.
Si vous avez déjà votre proxy inverse à vous (nginx, Caddy classique, Nginx Proxy Manager, etc.), mettez-le simplement sur le même réseau Docker caddy et redirigez vers strfry:7777. Sinon, suivez.
- Créez un nouveau dossier au même niveau que
nostr-relay: mkdir ~/caddy && cd ~/caddy - Créez un docker-compose.yml :
services:
caddy:
image: lucaslorentz/caddy-docker-proxy:ci-alpine
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
environment:
- CADDY_INGRESS_NETWORKS=caddy
- CADDY_DOCKER_CADDYFILE_PATH=/config/Caddyfile
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- caddy_data:/data
- caddy_config:/config
networks:
- caddy
volumes:
caddy_data:
caddy_config:
networks:
caddy:
external: true
Lancez :
- docker compose up -d
- docker compose logs -f caddy, et regardez-le récupérer les labels de strfry et un certificat Let's Encrypt.
Assurez-vous que les ports 80 et 443 sont ouverts sur le pare-feu du serveur. Le port 7777 ne doit pas être exposé publiquement ; tout le trafic doit passer par Caddy.
vérifier que ça marche
- Ouvrez
https://relay.example.comdans un navigateur. Vous devriez voir un petit JSON avec les infos de votre relais (c'est NIP-11). - Depuis n'importe quel client Nostr, ajoutez
wss://relay.example.comà votre liste de relais et publiez une note. - Pour quelques stats : docker exec strfry strfry info
Voilà. Vous avez votre propre relais. Annoncez-le sur Nostr pour que d'autres gens l'utilisent, ou gardez-le pour vous comme archive personnelle.
la suite
- Sauvegardes. L'essentiel est dans
~/nostr-relay/data/. Faites des snapshots. - Filtrage du spam. strfry supporte des scripts de politique d'écriture qu'on peut utiliser pour construire des allowlists ou un filtrage par web of trust. Voir la doc des plugins.
- Synchro avec d'autres relais. strfry supporte negentropy, une manière efficace pour deux relais de savoir quels événements ils ont en commun. Lancez strfry sync wss://autre-relais pour miroiter ou remplir.
- Apparaître dans les listings. Enregistrez votre relais sur nostr.watch pour que les gens le trouvent.