Votre propre relais boîte aux lettres
Dernière mise à jour : 3 octobre 2026
Le courrier Herkos voyage sous forme d'enveloppes scellées (gift wraps NIP-59) et attend sur les relais de votre liste de relais DM jusqu'à ce que votre application le récupère. La plupart des relais publics remettent ces enveloppes à quiconque les demande. Personne ne peut les ouvrir, mais n'importe qui peut compter qui reçoit du courrier et quand, et le relais peut les supprimer quand bon lui semble.
Un relais à vous qui demande qui lit (NIP-42) ne remet vos enveloppes qu'à vous, et les garde aussi longtemps que vous le décidez. Cette page explique comment en mettre un en place en trois étapes, plus une sauvegarde chaque nuit. Comptez environ un quart d'heure si vous avez déjà un serveur.
Quel relais utiliser
Nous avons fait tourner les deux candidats le 24 septembre 2026 et vérifié ce qu'ils font réellement du courrier, pas ce qu'ils annoncent.
| nogringo/nostr-relay | HAVEN 1.2.2 | |
|---|---|---|
| Qui peut lire vos enveloppes | Vous seul, après identification | /chat : toute personne de votre réseau de confiance, après identification. /inbox : n'importe qui, sans identification |
| Qui peut vous livrer du courrier | Tout expéditeur qui s'identifie | Uniquement votre réseau de confiance |
| Supprimer le courrier reçu | Oui | Non |
| Resynchronisation rapide (NIP-77) | Oui | Non |
| Licence | MIT | MIT |
Utilisez nogringo/nostr-relay comme boîte aux lettres. C'est celui qui fait ce dont le courrier a besoin : n'importe qui peut vous écrire, et vous seul pouvez lire. HAVEN est un bon outil pour d'autres usages (une boîte d'envoi personnelle, des médias, des notes privées), mais comme boîte aux lettres il refuserait le courrier de toute personne que vous ne suivez pas, y compris le bridge qui achemine le courriel ordinaire.
Ce qu'il vous faut
- Une machine toujours allumée et joignable depuis Internet : un petit VPS (environ 4-6 € par mois) ou un ordinateur chez vous.
- Un domaine ou sous-domaine qui pointe vers elle, par exemple
relay.example.com. - Docker et un proxy inverse qui fournit le HTTPS. Les exemples utilisent Caddy, qui obtient le certificat tout seul.
Étape 1 : lancer le relais
git clone https://github.com/nogringo/nostr-relay
cd nostr-relay
cp .env.example .env
Modifiez .env : donnez un nom au relais (RELAY_NAME) et réglez RELAY_URLS sur
son adresse publique, wss://relay.example.com.
Ouvrez ensuite docker-compose.yml et remplacez la ligne du port par
"127.0.0.1:3334:3334". Le relais se fie à l'adresse que le proxy lui transmet
lorsqu'il vérifie qui s'identifie : il ne doit donc être joignable qu'à travers le
proxy. Démarrez-le :
docker compose up -d
Étape 2 : mettre le HTTPS devant
Avec Caddy, toute la configuration (/etc/caddy/Caddyfile) tient en :
relay.example.com {
reverse_proxy 127.0.0.1:3334
}
Rechargez Caddy (sudo systemctl reload caddy). En ouvrant
https://relay.example.com dans un navigateur, vous devriez maintenant obtenir une réponse.
Étape 3 : l'indiquer à Herkos
- Dans Herkos, ouvrez Paramètres → Réseau et serveurs → Ton propre relais et
touchez Vérifier un relais. Saisissez
wss://relay.example.com. - Herkos s'y connecte et le met à l'épreuve : il demande le courrier de quelqu'un d'autre, et il dépose une enveloppe de test venant d'un inconnu (puis la supprime). Vous devriez voir Toi seul peux lire ton courrier ici et Accepte le courrier de n'importe quel expéditeur.
- Touchez En faire ton premier relais DM, puis Enregistrer en haut.
Gardez aussi un relais public dans la liste, en deuxième position : si votre serveur
est hors service, le courrier a toujours un endroit où attendre. relay.damus.io est un
bon second choix, car il demande lui aussi qui lit.
Étape 4 : le sauvegarder chaque nuit
Herkos garde sa propre copie du courrier qu'il a récupéré, mais une enveloppe arrivée pendant que votre application était fermée n'existe que sur votre serveur jusqu'à ce que vous ouvriez Herkos. Une copie nocturne couvre ce trou, et elle vous permet de reconstruire le serveur si le disque lâche ou si l'hébergeur ferme votre compte.
Le relais garde tout dans une base de données LMDB à l'intérieur du volume Docker
nostr-relay_relay-db (le nom commence par le dossier dans lequel vous avez cloné ;
vérifiez-le avec docker volume ls). Un fichier LMDB copié pendant que le relais y
écrit risque de ne pas s'ouvrir : le script arrête donc le relais pendant les quelques
secondes que prend une copie locale, le redémarre, et seulement ensuite téléverse la
copie. Pendant l'arrêt, le courrier attend sur le relais public que vous avez gardé en
deuxième position dans votre liste.
La copie quitte le serveur avec restic, qui la chiffre avant qu'elle ne parte. Utilisez un emplacement chez un autre fournisseur que celui du serveur : un compte SFTP (une storage box, un ordinateur chez vous) ou un bucket compatible S3.
-
Installez les outils et créez le dépôt. Gardez aussi le mot de passe dans votre gestionnaire de mots de passe : sans lui, les copies sont illisibles, et s'il ne vit que sur le serveur, il meurt avec le serveur. Pour SFTP, root a aussi besoin d'une clé SSH acceptée par la machine de sauvegarde (
sudo ssh-keygen -t ed25519, puis ajoutez-y/root/.ssh/id_ed25519.pub).sudo apt install restic rsync sudo sh -c 'openssl rand -base64 32 > /root/.restic-password' sudo sh -c 'cat > /root/.restic-env' <<'END' export RESTIC_REPOSITORY=sftp:backup@backup.example.com:/relay export RESTIC_PASSWORD_FILE=/root/.restic-password END sudo chmod 600 /root/.restic-password /root/.restic-env sudo sh -c '. /root/.restic-env && restic init' -
Enregistrez ceci sous
/usr/local/bin/backup-relayet rendez-le exécutable (sudo chmod 700 /usr/local/bin/backup-relay). ModifiezRELAY_DIRsi vous n'avez pas cloné dans/root/nostr-relay. Il conserve les 14 derniers jours, 8 semaines et 12 mois : un an d'historique, pour une taille proche de celle de la base de données.#!/bin/sh set -eu . /root/.restic-env RELAY_DIR=/root/nostr-relay COPY=/var/backups/relay-db VOLUME=$(docker volume inspect --format '{{ .Mountpoint }}' nostr-relay_relay-db) mkdir -p "$COPY" cd "$RELAY_DIR" docker compose stop relay trap 'docker compose start relay' EXIT rsync -a --delete "$VOLUME/" "$COPY/" docker compose start relay trap - EXIT restic backup "$COPY" --tag relay restic forget --tag relay --keep-daily 14 --keep-weekly 8 --keep-monthly 12 --prune -
Lancez-le une fois à la main (
sudo /usr/local/bin/backup-relay), puis planifiez-le avecsudo crontab -e. La deuxième ligne relit chaque mois un dixième des données stockées, un dixième différent à chaque fois, pour prouver que les copies peuvent toujours être ouvertes. Jetez un œil de temps en temps à/var/log/backup-relay.log: une ligne contenantFatalsignifie que la copie de cette nuit-là a échoué.15 4 * * * /usr/local/bin/backup-relay >> /var/log/backup-relay.log 2>&1 45 5 1 * * . /root/.restic-env && restic check --read-data-subset=10% >> /var/log/backup-relay.log 2>&1
Pour restaurer (un nouveau serveur, ou après une panne de disque) : remettez le
relais en place (étapes 1 à 3) et refaites les points 1 et 2 de cette étape avec le même
dépôt, mais écrivez le mot de passe que vous avez conservé dans /root/.restic-password
au lieu d'en créer un nouveau, et sautez restic init. Copiez ensuite la dernière
sauvegarde dans le volume du relais :
sudo sh -c '. /root/.restic-env && restic restore latest --tag relay --target /'
cd /root/nostr-relay && sudo docker compose stop relay
sudo rsync -a --delete /var/backups/relay-db/ "$(sudo docker volume inspect --format '{{ .Mountpoint }}' nostr-relay_relay-db)/"
sudo docker compose start relay
Une fois par an, faites cette restauration sur une machine de rechange et vérifiez que le relais démarre avec votre courrier dedans : c'est le seul test qui prouve toute la chaîne, mot de passe compris.
Bon à savoir
- C'est un relais généraliste. En plus de votre courrier, il accepte les notes publiques de n'importe qui : d'autres personnes pourraient donc stocker des choses sur votre serveur. Il n'a pas encore de réglage pour les refuser.
- Le courrier venant du courriel ordinaire arrive par un bridge, qui doit s'identifier quand votre relais le demande. Si le courriel ordinaire cesse d'arriver après le changement, le relais public que vous avez gardé dans la liste continuera de le recevoir.
- Sauvegardez les données (étape 4). Les enveloppes vivent dans le volume Docker
relay-db, et le courrier que votre application n'a pas encore récupéré n'existe que là. - Votre adresse IP. Le relais voit l'adresse de chaque application qui s'y connecte, comme tout relais. Sur votre propre serveur, la seule personne qui les voit, c'est vous.