O seu próprio relay de correio
Última atualização: 3 de outubro de 2026
O correio do Herkos viaja em envelopes selados (gift wraps NIP-59) e espera nos relays da sua lista de relays DM até a sua aplicação o recolher. A maioria dos relays públicos entrega esses envelopes a quem os pedir. Ninguém os consegue abrir, mas qualquer pessoa pode contar quem recebe correio e quando, e o relay pode apagá-los quando lhe apetecer.
Um relay próprio que pergunta quem está a ler (NIP-42) entrega os seus envelopes a si e a mais ninguém, e guarda-os durante o tempo que decidir. Esta página explica como montar um em três passos, mais uma cópia de segurança noturna. Demora cerca de quinze minutos se já tiver um servidor.
Que relay usar
Pusemos os dois candidatos a funcionar a 24 de setembro de 2026 e verificámos o que fazem de facto com o correio, não o que anunciam.
| nogringo/nostr-relay | HAVEN 1.2.2 | |
|---|---|---|
| Quem pode ler os seus envelopes | Só você, depois de se identificar | /chat: qualquer pessoa da sua rede de confiança, depois de se identificar. /inbox: qualquer pessoa, sem identificação |
| Quem lhe pode entregar correio | Qualquer remetente que se identifique | Só a sua rede de confiança |
| Apagar correio recebido | Sim | Não |
| Ressincronização rápida (NIP-77) | Sim | Não |
| Licença | MIT | MIT |
Use o nogringo/nostr-relay como a sua caixa de correio. É o que faz aquilo de que o correio precisa: qualquer pessoa lhe pode escrever, e só você pode ler. O HAVEN é uma boa ferramenta para outras coisas (uma caixa de saída pessoal, multimédia, notas privadas), mas como caixa de correio recusaria o correio de qualquer pessoa que não siga, incluindo o bridge que transporta o email comum.
O que precisa
- Uma máquina sempre ligada e acessível a partir da internet: um VPS pequeno (cerca de 4-6 € por mês) ou um computador em casa.
- Um domínio ou subdomínio que aponte para ela, por exemplo
relay.example.com. - Docker e um proxy inverso que forneça HTTPS. Os exemplos usam o Caddy, que obtém o certificado sozinho.
Passo 1: pôr o relay a funcionar
git clone https://github.com/nogringo/nostr-relay
cd nostr-relay
cp .env.example .env
Edite o .env: dê um nome ao relay (RELAY_NAME) e defina RELAY_URLS com o seu
endereço público, wss://relay.example.com.
Depois abra o docker-compose.yml e altere a linha da porta para
"127.0.0.1:3334:3334". O relay confia no endereço que o proxy lhe reencaminha
quando verifica quem se está a identificar, por isso só deve ser acessível através do
proxy. Inicie-o:
docker compose up -d
Passo 2: colocar HTTPS à frente
Com o Caddy, a configuração completa (/etc/caddy/Caddyfile) é:
relay.example.com {
reverse_proxy 127.0.0.1:3334
}
Recarregue o Caddy (sudo systemctl reload caddy). Ao abrir
https://relay.example.com num navegador, deverá agora obter resposta.
Passo 3: informar o Herkos
- No Herkos, abra Definições → Rede e servidores → O teu relay pessoal e toque em
Verificar um relay. Introduza
wss://relay.example.com. - O Herkos liga-se e testa-o: pede o correio de outra pessoa e deixa um envelope de teste de um desconhecido (que depois apaga). Deverá ver Só tu podes ler aqui o teu correio e Aceita correio de qualquer remetente.
- Toque em Torná-lo o teu primeiro relay DM, e em Guardar no topo.
Mantenha também um relay público na lista, em segundo lugar: se o seu servidor estiver em baixo, o correio
continua a ter onde esperar. relay.damus.io é uma boa segunda escolha, porque
também pergunta quem está a ler.
Passo 4: fazer uma cópia de segurança todas as noites
O Herkos guarda a sua própria cópia do correio que recolheu, mas um envelope que chegou enquanto a sua aplicação estava fechada só existe no seu servidor até abrir o Herkos. Uma cópia noturna cobre essa lacuna, e permite-lhe reconstruir o servidor se o disco morrer ou se o fornecedor encerrar a sua conta.
O relay guarda tudo numa base de dados LMDB dentro do volume Docker
nostr-relay_relay-db (o nome começa pela pasta para a qual clonou; confirme-o
com docker volume ls). Um ficheiro LMDB copiado enquanto o relay está a escrever nele
pode não abrir, por isso o script para o relay durante os poucos segundos que uma cópia local
demora, volta a iniciá-lo e só depois envia a cópia. Enquanto está parado,
o correio espera no relay público que manteve em segundo lugar na sua lista.
A cópia sai do servidor com o restic, que a cifra antes de sair. Use um sítio num fornecedor diferente do servidor: uma conta SFTP (uma storage box, um computador em casa) ou um bucket compatível com S3.
-
Instale as ferramentas e crie o repositório. Guarde também a palavra-passe no seu gestor de palavras-passe: sem ela as cópias não podem ser lidas, e se só existir no servidor, morre com o servidor. Para SFTP, o root também precisa de uma chave SSH que a máquina de cópias aceite (
sudo ssh-keygen -t ed25519, e depois adicione lá/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' -
Guarde isto como
/usr/local/bin/backup-relaye torne-o executável (sudo chmod 700 /usr/local/bin/backup-relay). AltereRELAY_DIRse não clonou para/root/nostr-relay. Mantém os últimos 14 dias, 8 semanas e 12 meses: um ano para trás, com um tamanho próximo do da base de dados.#!/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 -
Execute-o uma vez à mão (
sudo /usr/local/bin/backup-relay) e depois agende-o comsudo crontab -e. A segunda linha volta a ler um décimo dos dados guardados todos os meses, um décimo diferente de cada vez, para provar que as cópias ainda podem ser abertas. Veja de vez em quando o/var/log/backup-relay.log: uma linha comFatalsignifica que a cópia dessa noite falhou.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
Para restaurar (um servidor novo, ou depois de uma avaria do disco): monte de novo o relay
(passos 1 a 3) e repita os pontos 1 e 2 deste passo com o mesmo repositório,
mas escreva a palavra-passe que guardou em /root/.restic-password em vez de
criar uma nova, e salte o restic init. Depois copie a cópia mais recente para o
volume do relay:
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
Uma vez por ano, faça este restauro numa máquina de reserva e verifique que o relay arranca com o seu correio lá dentro: é o único teste que prova a cadeia completa, palavra-passe incluída.
Bom saber
- É um relay de uso geral. Além do seu correio, aceita notas públicas de qualquer pessoa, por isso outras pessoas poderiam guardar coisas no seu servidor. Ainda não tem nenhuma definição para as recusar.
- O correio vindo de email comum chega através de um bridge, que tem de se identificar quando o seu relay o pede. Se o email comum deixar de chegar depois da mudança, o relay público que manteve na lista continuará a recebê-lo.
- Faça cópias de segurança dos dados (passo 4). Os envelopes vivem no volume Docker
relay-db, e o correio que a sua aplicação ainda não recolheu só existe lá. - O seu endereço IP. O relay vê o endereço de cada aplicação que se liga a ele, como qualquer relay. No seu próprio servidor, o único que os vê é você.