文本是《Docker(共13篇)》專題的第 6 篇。閱讀本文前,建議先閱讀前面的文章:
ntfy(發音為“notify”)是一個基於 HTTP 的簡單發佈 - 訂閱通知服務。 通過 ntfy,您可以從任何電腦通過腳本發送通知到您的手機或桌面。 ntfy 是開源的,您可以自行部署到您的伺服器上使用,並且 ntfy 還支援 Android 和 IOS APP,非常適合運維人員或開發人員搭建消息推送服務。

安裝教學
官方提供了多種部署方式,有興趣的可自行研究:https://docs.ntfy.sh/install/
Docker Compose
創建配置檔
在開始之前,我們需要先創建一個 ntfy 配置檔,以便掛載到容器中使用。
# 創建配置目錄
mkdir -p etc
# 創建配置文件
touch server.yml
在 server.yml
中寫入以下內容:
# 填寫妳自己的域名,末尾不需要
base-url: "https://www.xxx.com"
# 認證數據庫的位置
auth-file: "/var/lib/ntfy/user.db"
# 默認訪問策略,deny-all 代表默認禁止所有未授權用戶
auth-default-access: "deny-all"
以上是基礎的配置選項,如果您需要更多自定義配置,可參考官方配置檔說明:https://github.com/binwiederhier/ntfy/blob/main/server/server.yml
部署 ntfy
接下來創建 docker-compose.yaml
檔案,內容如下:
version: "2.3"
services:
ntfy:
image: binwiederhier/ntfy:v2.10.0
container_name: ntfy
command:
- serve
environment:
- TZ=Asia/Shanghai # optional: set desired timezone
volumes:
- ./cache:/var/cache/ntfy
- ./etc:/etc/ntfy
- ./db:/var/lib/ntfy
ports:
- 4080: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
v2.10.0
是 ntfy 版本號,你可以自行修改4080
是 WEB 訪問埠,您可以自行修改
輸入命令
啟動 docker-compose up -d
ntfy
服務,如果一切順利,訪問 http://IP:4080
就能看到 ntfy WEB 介面。

創建授權使用者
在上述 server.yml
配置檔中,我們禁止了所有未授權使用者,這是生產環境中推薦的做法,因此我們需要為 ntfy 創建使用者後才能發送和訂閱消息,可通過下面的命令完成。
# 創建一個管理員角色,username 請自行設置
docker exec -it ntfy ntfy user add --role=admin username
# 創建一個普通用戶
docker exec -it ntfy ntfy user add --role=user username
# 修改用戶權限,權限可以是 read-write、read-only、write-only 或 deny
docker exec -it ntfy ntfy access 用户名 主题 权限
# 查看訪問控製列表(ACL)docker exec -it ntfy ntfy access
如果是個人使用,一般創建一個管理員角色就行了,如果是團隊使用,需要自行分配 ACL 許可權規則,更多許可權說明,請參考 ntfy 官方文檔:https://docs.ntfy.sh/config/?h=acl#access-control-list-acl
Nginx 反向代理
為了方便訪問和使用,通常我們會配合 Nginx 反向代理一起使用,下方是博主使用的 Nginx 反代配置,請根據自身情況修改。
server {
listen 80;
# 改成你自己的域名
server_name www.xxx.com;
# 设置 301 重定向到 https
rewrite ^(.*) https://www.xxx.com$1 redirect;
}
server {
listen 443 ssl http2;
# 改成你自己的域名
server_name www.xxx.com;
# 設置日誌路徑
access_log /data/logs/www.xxx.com_nginx.log xlog;
# See https://ssl-config.mozilla.org/#server=nginx&version=1.18.0&config=intermediate&openssl=1.1.1k&hsts=false&ocsp=false&guideline=5.6see https://ssl-config.mozilla.org/#server=nginx&version=1.18.0&config=intermediate&openssl=1.1.1k&hsts=false&ocsp=false&guideline=5.6
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# 配置證書路徑
ssl_certificate /xxx/www.xxx.com.crt;
ssl_certificate_key /xxx/www.xxx.com.key;
location / {
# 改成你自己的 ntfy 端口
proxy_pass http://127.0.0.1:4080;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 3m;
proxy_send_timeout 3m;
proxy_read_timeout 3m;
client_max_body_size 0; # Stream request body to backend
}
}
使用教學
網頁版使用
設置語言
ntfy WEB 介面支援多國語言,預設使用的英文,可通過設置修改語言

登錄使用者
依然是在設置中添加使用者,這個步驟是登錄已有使用者,而不是創建使用者,容易造成誤解。

- 服務鏈接地址:填寫您自己的功能變數名稱,末尾不需要,有可以輸入
/
IP + 端口
- 使用者名 / 密碼是上述步驟「創建授權使用者」 時添加的

推送消息
在推送消息之前,我們需要先瞭解 ntfy 主題這個概念,在 ntfy 中,“ 主題 ”(topic)用於定義和區分消息的發送和接收管道。 簡單來說,一個主題就像是一個郵件箱或者消息佇列,發送者將消息發佈到特定的主題上,而接收者則訂閱這個主題以接收相應的消息。 主題相當於是一個消息分類,ntfy 中不需要額外單獨創建 topic
,在推送和訂閱消息的時候直接指定即可。
按下圖所示,填寫“主題”(這裡我們使用的主題是 test
)和消息標題 / 內容,最後點發送。

訂閱主題
在網頁上點擊「訂閱主題」,填寫我們剛剛的 test
這個主題,然後「訂閱」。

這樣我們就可以收到剛剛向「test」主題推送的消息。

使用 curl 命令
生產環境中,我們通常很少使用網頁版去推送消息,一般是調用 ntfy API 介面進行消息推送,比如我們使用 curl
命令來推送消息:
curl \
-u testuser:fakepassword \
-d "Look ma, with auth" \
http://localhost/test
testuser:fakepassword
改成你自己的使用者名 / 密碼http://localhost
改成你自己的功能變數名稱test
改成你自己的主題,比如剛剛的test
更多消息推送管道,請參考官方文檔說明:<a href="https://docs.ntfy.sh/publish/" target="_blank" rel="noreferrer noopener">https://docs.ntfy.sh/publish/</a>
使用APP訂閱ntfy消息
ntfy 提供了 Android 和 IOS APP,蘋果使用者直接在應用商店搜索 ntfy
安裝,Android 用戶可通過 Google Play 搜尋 ntfy
安裝。

APP 上訂閱 ntfy 主題和 WEB 頁面上訂閱主題基本差不多,但是 ntfy 不支援系統級消息推送服務,因此 ntfy APP 需要長期保持後台運行,否則無法收到消息推送。

另外APP上無法支援渲染Markdown消息,網頁版是可以渲染Markdown消息內容的。
更多說明可參考:<a href="https://docs.ntfy.sh/subscribe/phone/" target="_blank" rel="noreferrer noopener">https://docs.ntfy.sh/subscribe/phone/</a>
總結
以上就是通過 Docker Compose 部署 ntfy 的實踐操作,推薦給有需要的運維或開發人員使用,另外 ntfy 的功能還遠不止如此,有興趣的可自行研究 ntfy 官方文檔:https://docs.ntfy.sh/
網站網址
您已閱讀完《Docker(共13篇)》專題的第 6 篇。請繼續閱讀該專題下面的文章:
文章標題:ntfy搭建一個私有消息通知服務
本文鏈接:https://angelal.cc/1610.html
文章版權:除非特別註明,否則均為AngelaL的原創文章,轉載必須以鏈接形式標明本文鏈接
本文最後更新發佈於:2025年03月05日 22:12, 某些文章具有時效性,若有錯誤或已失效,請在下方留言。