部署到 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

四步部署

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 消除與 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> 建立第二台機器;兩者共用磁碟區(Fly 磁碟區支援同一區域的多台機器)
  • 指標:Fly 收集 /metrics 端點(見 fly.toml 中的 [metrics])並在 Fly 儀表板的 Metrics 下顯示

自訂設定

映像讀取 /etc/nostrfy/nostrfy.toml,它由 deploy/nostrfy.container.toml 烘焙而來。兩種自訂方式:

  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。