Fly.io へのデプロイ

既製テンプレートで数分で nostrfy を Fly.io にデプロイ — ボリューム、マシン、TLS 終端、シンプルな更新。

リポジトリに含まれるもの

ファイル目的
Dockerfileコンテナイメージ — GitHub リリースアセットからビルド済みリリースバイナリ(x86_64 / aarch64、ビルドアーキテクチャで選択)をダウンロードし、sha256 チェックサムを検証します。Fly 上ではコンパイルは行われません
fly.tomlFly アプリ設定:ポート 8080 の HTTP サービス、ヘルスチェック、/data ボリュームマウント、常時起動マシン
deploy/nostrfy.container.tomlイメージ内の /etc/nostrfy/nostrfy.toml に焼き込まれるリレー設定

前提条件

  • Fly.io アカウント
  • flyctl CLI(fly version)
  • ログイン済み:fly auth login

4 ステップでデプロイ

1. アプリを作成(まだデプロイしない)

sh
cd /path/to/nostrfy
fly launch --no-deploy --name <your-app-name> --region <region>
  • <your-app-name> は Fly 上で一意である必要があります(リレー URL の一部になります: wss://<your-app-name>.fly.dev)
  • <region>:例 nrt(東京)、fra、 iad、sjc — ユーザーに最も近いリージョンを選んでください
  • テンプレートの fly.toml の値(アプリ名、リージョン)を上書きすることがあります — 問題ありません

2. 永続ボリュームを作成

LMDB データベースは /data にマウントされた Fly ボリューム上にあります:

sh
fly volumes create data --size 1 --region <region>

開始には 1 GB で十分です(データベースは利用に応じて増加します)。後でリサイズも、最初から大きめに作成もできます。

3. リレーを設定

デプロイ前に deploy/nostrfy.container.toml を編集してください:

toml
[relay]
name = "My Relay"                              # NIP-11 経由でクライアントに表示されます
description = "A friendly relay for everyone"
private_key = "..."                            # NIP-29 グループに必須です
public_url = "wss://<your-app-name>.fly.dev"   # NIP-42/62/98 に必須です
  • private_key:一時的な設定で nostrfy genkey を実行してローカルで生成し、貼り付けるか、任意の Nostr ツールで生成してください
  • public_url はアプリ名と一致している必要があります — ない場合、NIP-42 AUTH、NIP-62 vanish、NIP-86 管理 API は動作しません
  • その他は既定値のままで構いません

4. デプロイ

sh
fly deploy

Fly がイメージをビルドし(数分 — バイナリのダウンロードは高速でイメージは小さい)、マシンを作成して /health へのヘルスチェックを実行します。

検証

sh
# ログ行: "relay listening on ws://0.0.0.0:8080"
fly logs

# 公開アドレス経由で NIP-11 情報ドキュメントを取得します
curl https://<your-app-name>.fly.dev/

# Nostr クライアントを wss://<your-app-name>.fly.dev に向けてください

スケーリングと更新

  • リレーを更新:deploy/nostrfy.container.toml を編集して再度 fly deploy — イメージは常に最新の GitHub リリースバイナリをダウンロードするため、更新は再デプロイだけです
  • バージョンを固定:docker build --build-arg NOSTRFY_VERSION=v0.1.16 ... または Dockerfile 内の ARG を変更
  • スケール:既定ではリレーは単一マシンです。fly machines clone <id> で 2 台目を作成できます。両方がボリュームを共有します(Fly ボリュームは同一リージョン内の複数マシンに対応)
  • メトリクス:Fly は /metrics エンドポイントを収集し(fly.toml の [metrics] を参照)、Fly ダッシュボードのメトリクスに表示します

設定のカスタマイズ

イメージは deploy/nostrfy.container.toml から焼き込まれた /etc/nostrfy/nostrfy.toml を読み取ります。カスタマイズ方法は 2 つあります:

  1. リポジトリ内の deploy/nostrfy.container.toml を編集して再デプロイ(最も簡単)
  2. 独自設定をマウント:設定ファイルを /etc/nostrfy/nostrfy.toml に上書きコピーするフォークイメージをビルド

すべてのオプションは設定リファレンスに記載されています。

注意点

  • 常時起動設計:fly.toml の auto_stop_machines = false — リレーはアイドル時にも停止してはなりません
  • コンテナはリレーをフォアグラウンドモード(nostrfy start --foreground)で実行します。ログは stdout/stderr に出力され、Fly が収集します
  • TLS は Fly が終端します。リレー自体はポート 8080 でプレーン WebSocket を提供します
  • Blossom メディアホスト:Blossom サーバーも提供するには、設定で blossom.host = "media.example.com" を設定し、media.example.com を同じ Fly アプリの追加ホスト名として追加し(fly.toml [[services]] http_options.allowed_http_hostnames または fly hostnames)、Fly ダッシュボードで media. の TLS 証明書を追加します — リレーは内部でホストを分割します(server.api_host と同様)
TLS は Fly が終端します
リレー自体はポート 8080 でプレーン WebSocket を提供します。