要点まとめ
- iPhoneのntfyアプリをバックグラウンドで即座に起こす(APNs)ために、server.yml に upstream-base-url: "https://ntfy.sh" を設定します。
- auth-default-access: "deny-all" で第三者のアクセスを遮断し、ntfy token add でMac用のBearerトークン(tk_...)を発行します。
- NotiFerryはカスタムHTTPSサーバーURLと、macOSキーチェーンに保存されるBearerトークン/Basic認証に対応しています。
なぜntfyをセルフホストするのか?
公式の https://ntfy.sh は手軽で優秀ですが、以下のようなケースではセルフホスト(Dockerや単一バイナリ)が選ばれます。
- 通知データを外部の共有サーバーに残したくない: ntfyは配信遅延や再接続に備えてメッセージを約12時間キャッシュします。セルフホストならキャッシュ先を自分のVPSや自宅サーバーに限定できます。
- トークン認証(ACL)でトピックを厳密に保護したい: 推測されにくいトピック名だけに頼らず、
deny-allとBearerトークンで認証を強制できます。 - レート制限を自分で管理したい: CIログやビルド通知を大量に流す場合でも、パブリックサーバーのIP制限を気にする必要がありません。
server.ymlの設定とiOS APNs即時配信の仕組み
セルフホストntfyで最もつまずきやすいのが、「ブラウザでは届くのにiPhoneの画面を閉じると通知が来ない」という問題です。iOSではApp Storeで配布されている公式ntfyアプリだけがAppleのAPNsプッシュ権限を持っているため、セルフホストサーバーから https://ntfy.sh へ「新着通知がある」というハッシュシグナルだけを転送する設定(upstream-base-url)が必要です。
# /etc/ntfy/server.yml
base-url: "https://ntfy.example.com"
listen-http: ":2586"
cache-file: "/var/cache/ntfy/cache.db"
cache-duration: "12h"
# アクセス制御(デフォルトで非公開にし、トークンまたはユーザー認証を必須化)
auth-file: "/var/lib/ntfy/user.db"
auth-default-access: "deny-all"
# iPhone (iOS) でバックグラウンド即時プッシュ通知(APNs)を有効にするために必須
upstream-base-url: "https://ntfy.sh"この設定により、iPhoneのntfyアプリはAPNsで即座にウェイクアップし、実際のメッセージ本文はあなたの https://ntfy.example.com から直接取得します。
ACLアクセス制御とBearerトークン(tk_...)の発行
サーバー上でユーザーを作成し、トピックへのアクセス権を付与したうえで、Mac用のBearerトークンを発行します。
# 1. 管理者または配信用ユーザーを作成し、トピックへの読み書き権限を付与
ntfy user add --role=user macbook
ntfy access macbook "mac-alerts-*" rw
# 2. Mac用のアクセストークン(tk_...)を発行
ntfy token add --label="MacBook Pro NotiFerry" macbook発行された tk_... トークンを使って、Macのターミナルから疎通テストを行えます。
curl -s \
-H "Authorization: Bearer tk_your_secret_token" \
-H "Title: ビルド完了" \
-d "すべてのテストが通過しました" \
https://ntfy.example.com/mac-alerts-prodNotiFerryをセルフホストntfyサーバーに接続する
CLIだけでなく、macOS通知センターに届くデスクトップアプリ全体の通知をセルフホストntfyへ流したい場合は、NotiFerryのセットアップ画面または設定画面で以下のように指定します。
- Server URL: あなたのHTTPSサーバーURL(例:
https://ntfy.example.com)を入力します。 - Topic: ACLで許可したトピック名(例:
mac-alerts-prod)を入力します。 - Authentication: Bearer token(
tk_...)または Basic auth(ユーザー名とパスワード)を選択します。シークレットはmacOSキーチェーンに保存され、診断ログには一切出力されません。
MacとiPhoneでの動作イメージ
macOSの通知センターフォルダに読み取り専用アクセスを許可し(フルディスクアクセス不要)、iPhoneの無料アプリ「ntfy」で専用トピックを購読します。テスト通知の受信を確認すると、7日間の無料トライアルが開始されます。

よくある質問
セルフホストしたntfyサーバーでも、iPhoneでリアルタイムにプッシュ通知を受け取れますか?
はい。ただし、AppleのAPNs証明書は公式のntfy iOSアプリに紐づいているため、セルフホストサーバーの server.yml に upstream-base-url: "https://ntfy.sh" を設定する必要があります。これにより、メッセージ本文を自分のサーバーに置いたまま、ntfy.sh経由でiPhoneへウェイクアップ用のAPNsシグナルを送ることができます。
NotiFerryはBearerトークン(tk_...)やBasic認証に対応していますか?
はい。NotiFerryはカスタムHTTPSサーバーURL、Bearerトークン(tk_...)、およびユーザー名+パスワードによるBasic認証に対応しています。入力された認証情報は平文の設定ファイルではなく、macOSキーチェーンに安全に保存されます。
Tailscaleやローカルネットワーク内のHTTPサーバーは使えますか?
NotiFerryは転送経路の保護のため、HTTPSエンドポイント(有効なTLS証明書を持つURL)を前提としています。TailscaleのHTTPS証明書機能(tailscale cert)やCloudflare Tunnel、Caddy / NginxのLet's Encrypt証明書をご利用ください。
セルフホストntfyを使えばエンドツーエンド暗号化(E2EE)になりますか?
いいえ。公開のntfy.shの代わりに自分が管理するサーバーだけが通知本文を受け取るようになりますが、プロトコル自体はHTTPS通信であり、サーバー上のキャッシュには平文で一時保持されます。機密性の高いアプリについては、NotiFerry側で「アプリ名とタイトルのみ」または「汎用通知」モードを併用することを推奨します。