部署到 Fly.io
用現成範本在幾分鐘內將 nostrfy 部署到 Fly.io — 磁碟區、機器、TLS 終止與簡單更新。
倉庫中提供的內容
| 檔案 | 用途 |
|---|---|
Dockerfile | 容器映像 — 從 GitHub 發行資產下載預編譯的發行二進位檔 (x86_64 / aarch64,依建置架構選擇)並驗證其 sha256 校驗和。Fly 上不會發生編譯 |
fly.toml | Fly 應用設定: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 deployFly 建置映像(幾分鐘 — 二進位檔下載很快,映像很小),建立
機器並對 /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 烘焙而來。兩種自訂方式:
- 在倉庫中編輯
deploy/nostrfy.container.toml並重新部署 (最簡單) - 掛載你自己的設定:建置一個映像分支,將你的設定檔
複製到
/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)