Herkos

自分のメールボックス用リレー

最終更新: 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 は別の用途(個人の送信箱、メディア、 非公開のメモ)には良い道具ですが、メールボックスとしては、あなたがフォローして いない人からのメールを拒否してしまいます。通常のメールを運ぶブリッジも含めてです。

必要なもの

手順 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 に伝える

  1. Herkos で 設定 → ネットワークとサーバー → 自分のリレー を開き、 リレーを確認 をタップします。wss://relay.example.com を入力します。
  2. Herkos が接続して試します。他の人のメールを要求し、見知らぬ送信者からの テスト用封筒を置きます(その後削除します)。ここではあなただけがメールを 読めます と どの送信者からのメールも受け付けます が表示されるはずです。
  3. 最初の DM リレーにする をタップし、上部の 保存 をタップします。

一覧には公開リレーも 2 番目として残しておいてください。サーバーが停止していても、 メールが待機できる場所が残ります。relay.damus.io は 2 番目として良い選択です。 こちらも誰が読んでいるかを確認するからです。

手順 4:毎晩バックアップする

Herkos は受け取ったメールのコピーを自分で保持しますが、アプリを閉じている間に 届いた封筒は、Herkos を開くまであなたのサーバーにしか存在しません。毎晩のコピーが その隙間を埋め、ディスクが壊れたりプロバイダーがアカウントを閉鎖したりしても、 サーバーを再構築できるようにします。

リレーはすべてを、Docker ボリューム nostr-relay_relay-db の中の一つの LMDB データベースに保存します(名前はクローン先のフォルダー名で始まります。 docker volume ls で確認してください)。リレーが書き込んでいる最中にコピーした LMDB ファイルは開けないことがあるため、スクリプトはローカルのコピーにかかる数秒間 リレーを停止し、再び起動してから、ようやくコピーをアップロードします。停止中、 メールは一覧の 2 番目に残した公開リレーで待機します。

コピーは restic でサーバーの外へ送られます。restic は 送り出す前に暗号化します。サーバーとは別のプロバイダーの場所を使ってください。 SFTP アカウント(ストレージボックス、自宅のコンピューター)か、S3 互換のバケットです。

  1. ツールをインストールし、リポジトリを作成します。パスワードはパスワード マネージャーにも保管してください。それがなければコピーは読めず、サーバーにしか なければ、サーバーと一緒に失われます。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'
    
  2. これを /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
    
  3. 一度手動で実行し(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

年に一度、予備のマシンでこの復元を行い、リレーがあなたのメールを含んだ状態で 起動することを確認してください。パスワードを含めた全体の流れを証明できる 唯一のテストです。

知っておくとよいこと