Seu próprio relay de caixa postal
Última atualização: 3 de outubro de 2026
Os e-mails do Herkos viajam como envelopes lacrados (gift wraps NIP-59) e esperam nos relays da sua lista de relays de DM até que seu aplicativo os busque. A maioria dos relays públicos entrega esses envelopes a qualquer um que peça. Ninguém consegue abri-los, mas qualquer um pode contar quem recebe e-mail e quando, e o relay pode apagá-los quando quiser.
Um relay próprio que pergunta quem está lendo (NIP-42) entrega seus envelopes a você e a mais ninguém, e os guarda pelo tempo que você decidir. Esta página explica como configurar um em três passos, mais um backup noturno. Leva uns quinze minutos se você já tiver um servidor.
Qual relay usar
Rodamos os dois candidatos em 24 de setembro de 2026 e verificamos o que eles realmente fazem com o e-mail, não o que anunciam.
| nogringo/nostr-relay | HAVEN 1.2.2 | |
|---|---|---|
| Quem pode ler seus envelopes | Só você, depois de se identificar | /chat: qualquer um na sua rede de confiança, depois de se identificar. /inbox: qualquer um, sem identificação |
| Quem pode te entregar e-mail | Qualquer remetente que se identifique | Só sua rede de confiança |
| Apagar e-mails que você recebeu | Sim | Não |
| Ressincronização rápida (NIP-77) | Sim | Não |
| Licença | MIT | MIT |
Use o nogringo/nostr-relay como sua caixa postal. É ele que faz o que o e-mail precisa: qualquer um pode te escrever, e só você pode ler. O HAVEN é uma boa ferramenta para outras coisas (uma caixa de saída pessoal, mídia, notas privadas), mas como caixa postal ele recusaria e-mails de qualquer pessoa que você não segue, inclusive do bridge que traz o e-mail comum.
Do que você precisa
- Uma máquina sempre ligada e acessível pela internet: uma VPS pequena (uns 4-6 € por mês) ou um computador em casa.
- Um domínio ou subdomínio apontando para ela, por exemplo
relay.example.com. - Docker e um proxy reverso que ofereça HTTPS. Os exemplos usam o Caddy, que obtém o certificado sozinho.
Passo 1: rode o relay
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
endereço público dele, wss://relay.example.com.
Depois abra o docker-compose.yml e mude a linha da porta para
"127.0.0.1:3334:3334". O relay confia no endereço que o proxy repassa a ele
quando verifica quem está se identificando, então ele só deve ser acessível
através do proxy. Inicie-o:
docker compose up -d
Passo 2: coloque HTTPS na frente
Com o Caddy, a configuração inteira (/etc/caddy/Caddyfile) é:
relay.example.com {
reverse_proxy 127.0.0.1:3334
}
Recarregue o Caddy (sudo systemctl reload caddy). Abrir
https://relay.example.com num navegador agora deve dar resposta.
Passo 3: avise o Herkos
- No Herkos, abra Configurações → Rede e servidores → Seu relay pessoal e
toque em Verificar um relay. Digite
wss://relay.example.com. - O Herkos se conecta e o testa: pede os e-mails de outra pessoa e deixa um envelope de teste de um desconhecido (e depois o apaga). Você deve ver Só você pode ler seus e-mails aqui e Aceita e-mails de qualquer remetente.
- Toque em Torná-lo seu primeiro relay DM e em Salvar, no topo.
Mantenha também um relay público na lista, em segundo lugar: se seu servidor
cair, o e-mail ainda tem onde esperar. relay.damus.io é uma boa segunda opção,
porque também pergunta quem está lendo.
Passo 4: faça backup toda noite
O Herkos guarda sua própria cópia dos e-mails que já buscou, mas um envelope que chegou enquanto seu aplicativo estava fechado só existe no seu servidor até você abrir o Herkos. Uma cópia noturna cobre essa lacuna, e permite reconstruir o servidor se o disco morrer ou se o provedor encerrar sua conta.
O relay guarda tudo num único banco de dados LMDB dentro do volume Docker
nostr-relay_relay-db (o nome começa com a pasta em que você clonou; confira
com docker volume ls). Um arquivo LMDB copiado enquanto o relay escreve nele
pode não abrir, então o script para o relay pelos poucos segundos que uma cópia
local leva, inicia-o de novo e só então envia a cópia. Enquanto ele está
parado, o e-mail espera no relay público que você deixou em segundo lugar na
lista.
A cópia sai do servidor com o restic, que a criptografa antes que ela saia. Use um lugar num provedor diferente do servidor: uma conta SFTP (um storage box, um computador em casa) ou um bucket compatível com S3.
-
Instale as ferramentas e crie o repositório. Guarde a senha também no seu gerenciador de senhas: sem ela as cópias não podem ser lidas, e se ela só existir no servidor, morre com o servidor. Para SFTP, o root também precisa de uma chave SSH que a máquina de backup aceite (
sudo ssh-keygen -t ed25519e depois adicione/root/.ssh/id_ed25519.publá).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' -
Salve isto como
/usr/local/bin/backup-relaye torne-o executável (sudo chmod 700 /usr/local/bin/backup-relay). MudeRELAY_DIRse você não clonou em/root/nostr-relay. Ele mantém os últimos 14 dias, 8 semanas e 12 meses: um ano para trás, num tamanho próximo ao do banco 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 -
Rode-o uma vez à mão (
sudo /usr/local/bin/backup-relay) e depois agende-o comsudo crontab -e. A segunda linha relê um décimo dos dados guardados a cada mês, um décimo diferente a cada vez, para provar que as cópias ainda podem ser abertas. Olhe o/var/log/backup-relay.logde vez em quando: uma linha comFatalsignifica que a cópia daquela 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 falha de disco):
configure o relay de novo (passos 1 a 3) e repita os pontos 1 e 2 deste passo
com o mesmo repositório, mas escreva a senha que você guardou em
/root/.restic-password em vez de criar uma nova, e pule o restic init.
Depois copie o backup 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 essa restauração numa máquina reserva e confira se o relay inicia com seus e-mails dentro: é o único teste que prova a cadeia inteira, senha incluída.
Bom saber
- É um relay de uso geral. Além dos seus e-mails, ele aceita notas públicas de qualquer um, então outras pessoas poderiam guardar coisas no seu servidor. Ele ainda não tem uma configuração para recusá-las.
- O e-mail comum chega por meio de um bridge, que precisa se identificar quando seu relay pede. Se o e-mail comum parar de chegar depois da mudança, o relay público que você manteve na lista continuará a recebê-lo.
- Faça backup dos dados (passo 4). Os envelopes ficam no volume Docker
relay-db, e os e-mails que seu aplicativo ainda não buscou só existem ali. - Seu endereço IP. O relay vê o endereço de todo aplicativo que se conecta a ele, como qualquer relay. No seu próprio servidor, o único que os vê é você.