原本我的 NetAlertX 跟 Uptime Kuma 使用的通知方式都是透過 gmail,用 SMTP 的方式,自己寄信給自己。但後來發現,收件箱因為這樣而充滿了一堆通知,十分雜亂也不方便管理。

所以此篇我們要來架設 ntfy,並將 NetAlertX 跟 Uptime Kuma 的通知方式設定成 ntfy,最終透過 ntfy 的 ios app,從 iPhone 接收通知。

安裝 ntfy

此處我們採用 docker compose 的安裝方式,yaml 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
services:
ntfy:
image: binwiederhier/ntfy
container_name: ntfy
command:
- serve
environment:
TZ: Asia/Taipei # optional: set desired timezone
NTFY_BEHIND_PROXY: true
NTFY_BASE_URL: https://your.ntfy.domain
NTFY_UPSTREAM_BASE_URL: https://ntfy.sh
user: 1000:1000 # optional: replace with your own user/group or uid/gid
volumes:
- /var/cache/ntfy:/var/cache/ntfy
- /etc/ntfy:/etc/ntfy
ports:
- 80:80
healthcheck: # optional: remember to adapt the host:port to your environment
test: ["CMD-SHELL", "wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo '\"healthy\"\\s*:\\s*true' || exit 1"]
interval: 60s
timeout: 10s
retries: 3
start_period: 40s
restart: unless-stopped

其中注意:

  • NTFY_BEHIND_PROXY: true :我們後續會透過 proxy manager 來反向代理,所以這個需要特別設 true
  • NTFY_BASE_URL: https://your.ntfy.domain:這裡就是我們 ios app 從外網接收通知用的 domain(我們出門在外也要收得到通知對吧)
  • NTFY_UPSTREAM_BASE_URL: https://ntfy.sh:因為 iOS 在「推播通知」的設計原則上,app 通常不允許常駐在後面等通知,除非使用 APNs (Apple Push Notification Service) 來進行系統層級的喚醒。但我們自架的 server 並沒有 apple 認證,所以如果不透過 ntfy.sh 進行 APN 的推送,我們會延遲很久很久才收到通知。所以此處務必加上這個。但當然,因為這樣,我們的服務其實還是依賴了其他 server。

設定反向代理

我們透過 Nginx Proxy Manager 來進行反向代理:

image-20250629192242550

  • 其中 Domain Names 就是後續 iso app 要使用的網域
  • Scheme 要用 http,因為內網裡面就是走 http
  • 為了實時刷新,Websockets 也要打開

NetAlertX 設定

image-20250629192714164

注意因為 NetAlertX 跟 ntfy 一樣都在內網環境中,所以在 NTFY host URL 的部分要填入的是走 http 的 ntfy 內網位置。

Uptime Kuma 設定

image-20250629192909688

此處同理。

iPhone 設定

iPhone 部分就簡單了,app store 下載安裝 ntfy 後:

  • Default server 填入我們一開始設定在 NTFY_BASE_URL 的外網網域
  • 訂閱你的 topic

收工!