使用 Ntfy 架設自己的 push notification server #
搭建好 Uptime Kuma,自然需要一個 push notification 服務方便能馬上能收到通知。 Uptime Kuma 支援一大堆不同的 push notification 服務。我原先想用PushOver。網上用戶評價不錯,不需要訂閱(這個很重要),收費合理,每個平台上5刀一次買斷無限次 push,有 browser extension,即是說我10刀就可全平台(ios,android,Mac)。 但後來又發現 Ntfy 基於盡可能 self host (貧窮)的原則,所以着手搭建 Ntfy server。以下是自己踩坑的經歷, 方便已步入失智的我日後參考。
Ntfy 是什麼? #
Ntfy(發音為 “notify”)是一個簡單的、自助的、易於部署的伺服器及命令列工具。它透過 HTTP/HTTPS 工作,提供了基本的 Web UI、命令列界面和 API,對各種用例都極具靈活性。它支援包括命令列、網頁瀏覽器等在內的多種客戶端。此外,ntfy
還擁有跨平台支援,意味著我可以將其整合到我其它的服,。
使用 Docker Compose 安裝 Ntfy #
提供了多種安裝方法,但現但是我只在我這種小白當然只會Dock和Dockcom post
version: '3'
services:
ntfy:
image: binwiederhier/ntfy
restart: unless-stopped
environment:
NTFY_BASE_URL: your base url e.g https://ntfy.mydomain.com
NTFY_CACHE_FILE: /var/lib/ntfy/cache.db
NTFY_AUTH_FILE: /var/lib/ntfy/auth.db
NTFY_AUTH_DEFAULT_ACCESS: deny-all
NTFY_BEHIND_PROXY: true
NTFY_ATTACHMENT_CACHE_DIR: /var/lib/ntfy/attachments
NTFY_ENABLE_LOGIN: true
NTFY_UPSTREAM_BASE_URL: https://ntfy.sh
NTFY_WEB_PUSH_PUBLIC_KEY: <public_key>
NTFY_WEB_PUSH_PRIVATE_KEY: <private_key>
NTFY_WEB_PUSH_FILE: /var/lib/ntfy/webpush.db
NTFY_WEB_PUSH_EMAIL_ADDRESS: <email>
TZ=Asia/Hong_Kong # 更換為您本地的時區
volumes:
- ./:/var/lib/ntfy
ports:
- 8093:80
command: serve
在終端機窗口中導航至您的專案目錄並運行:
docker compose up -d
這個命令將從 Docker Hub 拉取 ntfy
的 Docker 映像,創建您定義的 volumes,並在新容器中啟動 ntfy
服務命令
檢查一下 ntfy 是否成功創建
docker ps
這是應該看見已經成功,運行,順便記下 ntfy 的 container id, 下一步有需要用到。
在 Docker 容器內運行 Ntfy #
我並不打算公開這個服務,所以在 post裏面有這樣
NTFY_AUTH_DEFAULT_ACCESS: deny-all
意思是預設所有用戶都沒有任何權限。於是我們需要添加用戶並賦予權限。反正只是得我使用,添加一個Admin用戶就可以了。
伺服器運行後,我們要添加新用戶等管理任務。這些任務可以使用 ntfy
命令列界面來完成,因為 ntfy 本身是在 container 內,所以需要使用 docker exec
命令來在容器內運行命令。
例如我需要添加 admin 用戶,:
docker exec -it ntfy_container_name ntfy user add --role=admin admin
意思是加入一個名叫 admin 的用戶並付予admin權限, 然後確認密碼。
將 ntfy_container_name
替換為容器的實際名稱或剛才記下的 container id
確認一下:
docker exec -it ntfy_container_name ntfy user list
與 docker exec
一起使用的 -it
選項的意思是:
-i
或--interactive
保持 STDIN(標準輸入)打開,允許您輸入到容器中。-t
或--tty
分配一個偽 TTY,為您提供支援文字格式、光標移動等的終端機類界面。
將 -it
結合起來,使得如同在本地終端機會話一般,能夠實現真正的互動體驗。
使用 Ntfy 的 Web UI #
一切運作正常後,可以從 http://localhost:8093
來訪問 Web UI。有了這個界面,就可以管理話題、查看消息等。不過你馬上又會看到這個 Error:
Notification not supoorted
Nofification are only supported over HTTPS. This is a limitation of the api
意思是只能用來訪問服務這時, 我們的好朋友 [Nginx Proxy Manager] 又要出動了。
保護 Ntfy #
新增一個 ntfy 的 A record, 指向 mydomain.com,亦即 docker compose 中的 BASE_URL
在 NPN 中 新增 ntfy.mydomain.com 的 host, 指向本機的 port 8093 , 使用之前已經申請的 wild card certificate
大功告成!