自分のメールボックス用リレー
最終更新: 2026年10月3日
Herkos のメールは封をした封筒(NIP-59 の gift wrap)として運ばれ、アプリが受け取る まで、あなたの DM リレー一覧にあるリレーで待機します。ほとんどの公開リレーは、 求める人なら誰にでもその封筒を渡します。誰も開けることはできませんが、誰が いつメールを受け取ったかは誰でも数えられ、リレーはいつでも好きなときに削除できます。
誰が読んでいるかを確認する(NIP-42)自分のリレーは、あなたの封筒を あなただけに渡し、あなたが決めた期間だけ保管します。このページでは、その立て方を 3 つの手順と、毎晩のバックアップで説明します。すでにサーバーがあれば、 およそ 15 分で終わります。
どのリレーを使うか
2026年9月24日に両方の候補を実際に動かし、宣伝内容ではなく、メールに対して 実際に何をするかを確認しました。
| nogringo/nostr-relay | HAVEN 1.2.2 | |
|---|---|---|
| あなたの封筒を読めるのは誰か | 識別した後の、あなただけ | /chat:識別した後の、あなたの信頼の輪(web of trust)にいる誰でも。/inbox:識別なしで誰でも |
| あなたにメールを届けられるのは誰か | 識別した送信者なら誰でも | あなたの信頼の輪だけ |
| 受け取ったメールの削除 | 可能 | 不可 |
| 高速な再同期(NIP-77) | 対応 | 非対応 |
| ライセンス | MIT | MIT |
メールボックスには nogringo/nostr-relay を使ってください。 メールに必要なことをしてくれるのはこちらです。誰でもあなたに書けて、 読めるのはあなただけです。HAVEN は別の用途(個人の送信箱、メディア、 非公開のメモ)には良い道具ですが、メールボックスとしては、あなたがフォローして いない人からのメールを拒否してしまいます。通常のメールを運ぶブリッジも含めてです。
必要なもの
- 常時稼働し、インターネットから到達できるマシン:小さな VPS (月額およそ 4〜6 ユーロ)か、自宅のコンピューター。
- それを指すドメインまたはサブドメイン。例:
relay.example.com。 - Docker と、HTTPS を提供する リバースプロキシ。例では Caddy を使います。Caddy は 証明書を自動で取得します。
手順 1:リレーを動かす
git clone https://github.com/nogringo/nostr-relay
cd nostr-relay
cp .env.example .env
.env を編集します。リレーに名前を付け(RELAY_NAME)、RELAY_URLS に公開
アドレス wss://relay.example.com を設定します。
次に docker-compose.yml を開き、ポートの行を "127.0.0.1:3334:3334" に
変更します。リレーは、誰が識別しているかを確認するときにプロキシから転送される
アドレスを信頼するため、プロキシ経由でしか到達できないようにする必要があります。
起動します。
docker compose up -d
手順 2:前段に HTTPS を置く
Caddy の場合、設定全体(/etc/caddy/Caddyfile)は次のとおりです。
relay.example.com {
reverse_proxy 127.0.0.1:3334
}
Caddy を再読み込みします(sudo systemctl reload caddy)。ブラウザーで
https://relay.example.com を開くと、応答があるはずです。
手順 3:Herkos に伝える
- Herkos で 設定 → ネットワークとサーバー → 自分のリレー を開き、
リレーを確認 をタップします。
wss://relay.example.comを入力します。 - Herkos が接続して試します。他の人のメールを要求し、見知らぬ送信者からの テスト用封筒を置きます(その後削除します)。ここではあなただけがメールを 読めます と どの送信者からのメールも受け付けます が表示されるはずです。
- 最初の DM リレーにする をタップし、上部の 保存 をタップします。
一覧には公開リレーも 2 番目として残しておいてください。サーバーが停止していても、
メールが待機できる場所が残ります。relay.damus.io は 2 番目として良い選択です。
こちらも誰が読んでいるかを確認するからです。
手順 4:毎晩バックアップする
Herkos は受け取ったメールのコピーを自分で保持しますが、アプリを閉じている間に 届いた封筒は、Herkos を開くまであなたのサーバーにしか存在しません。毎晩のコピーが その隙間を埋め、ディスクが壊れたりプロバイダーがアカウントを閉鎖したりしても、 サーバーを再構築できるようにします。
リレーはすべてを、Docker ボリューム nostr-relay_relay-db の中の一つの LMDB
データベースに保存します(名前はクローン先のフォルダー名で始まります。
docker volume ls で確認してください)。リレーが書き込んでいる最中にコピーした
LMDB ファイルは開けないことがあるため、スクリプトはローカルのコピーにかかる数秒間
リレーを停止し、再び起動してから、ようやくコピーをアップロードします。停止中、
メールは一覧の 2 番目に残した公開リレーで待機します。
コピーは restic でサーバーの外へ送られます。restic は 送り出す前に暗号化します。サーバーとは別のプロバイダーの場所を使ってください。 SFTP アカウント(ストレージボックス、自宅のコンピューター)か、S3 互換のバケットです。
-
ツールをインストールし、リポジトリを作成します。パスワードはパスワード マネージャーにも保管してください。それがなければコピーは読めず、サーバーにしか なければ、サーバーと一緒に失われます。SFTP の場合、root にはバックアップ先の マシンが受け付ける SSH 鍵も必要です(
sudo ssh-keygen -t ed25519を実行し、/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' -
これを
/usr/local/bin/backup-relayとして保存し、実行可能にします (sudo chmod 700 /usr/local/bin/backup-relay)。/root/nostr-relayに クローンしなかった場合はRELAY_DIRを変更してください。直近の 14 日分、8 週分、 12 か月分を保持します。データベースに近いサイズで、1 年前まで遡れます。#!/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 -
一度手動で実行し(
sudo /usr/local/bin/backup-relay)、その後sudo crontab -eで予約します。2 行目は毎月、保存データの 10 分の 1 を、毎回 異なる 10 分の 1 ずつ読み戻し、コピーがまだ開けることを確かめます。ときどき/var/log/backup-relay.logを見てください。Fatalを含む行は、その夜の コピーが失敗したことを意味します。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
復元するには(新しいサーバー、またはディスク障害の後):リレーを再び設定し
(手順 1〜3)、同じリポジトリでこの手順の 1 と 2 を繰り返します。ただし新しい
パスワードを作る代わりに、保管しておいたパスワードを /root/.restic-password に
書き込み、restic init は飛ばします。その後、最新のバックアップをリレーの
ボリュームにコピーします。
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
年に一度、予備のマシンでこの復元を行い、リレーがあなたのメールを含んだ状態で 起動することを確認してください。パスワードを含めた全体の流れを証明できる 唯一のテストです。
知っておくとよいこと
- これは汎用のリレーです。 あなたのメールのほかに、誰からの公開ノートも 受け付けるため、他の人があなたのサーバーに物を保存できてしまいます。今のところ、 それを拒否する設定はありません。
- 通常のメールからのメールはブリッジを通じて届きます。ブリッジは、あなたの リレーが求めたときに識別しなければなりません。切り替えた後に通常のメールが 届かなくなった場合でも、一覧に残した公開リレーが引き続き受け取ります。
- データをバックアップしてください(手順 4)。封筒は Docker ボリューム
relay-dbの中にあり、アプリがまだ受け取っていないメールはそこにしか存在しません。 - あなたの IP アドレス。 リレーは、どのリレーでもそうであるように、接続して くるすべてのアプリのアドレスを見ます。自分のサーバーなら、それを見るのはあなただけです。