熱評
加載中...
當前位置:首頁技術館建站教學網站建設ntfy搭建一個私有消息通知服務

ntfy搭建一個私有消息通知服務

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

ntfy搭建一個私有消息通知服務

安裝教學

官方提供了多種部署方式,有興趣的可自行研究:https://docs.ntfy.sh/install/

Docker Compose

創建配置檔

在開始之前,我們需要先創建一個 ntfy 配置檔,以便掛載到容器中使用。

Docker
# 創建配置目錄
mkdir -p etc
# 創建配置文件
touch server.yml

server.yml 中寫入以下內容:

Docker
# 填寫妳自己的域名,末尾不需要
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 檔案,內容如下:

Docker
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 介面。

ntfy搭建一個私有消息通知服務

創建授權使用者

在上述 server.yml 配置檔中,我們禁止了所有未授權使用者,這是生產環境中推薦的做法,因此我們需要為 ntfy 創建使用者後才能發送和訂閱消息,可通過下面的命令完成。

Docker
# 創建一個管理員角色,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 反代配置,請根據自身情況修改。

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 介面支援多國語言,預設使用的英文,可通過設置修改語言

ntfy搭建一個私有消息通知服務

登錄使用者

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

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

推送消息

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

按下圖所示,填寫“主題”(這裡我們使用的主題是 test)和消息標題 / 內容,最後點發送。

ntfy搭建一個私有消息通知服務

訂閱主題

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

ntfy搭建一個私有消息通知服務

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

ntfy搭建一個私有消息通知服務

使用 curl 命令

生產環境中,我們通常很少使用網頁版去推送消息,一般是調用 ntfy API 介面進行消息推送,比如我們使用 curl 命令來推送消息:

BASIC
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 安裝。

ntfy搭建一個私有消息通知服務

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

ntfy搭建一個私有消息通知服務

另外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/

網站網址

AngelaL博客

       本文是原創文章,採用CC BY-NC-SA 4.0協議,完整轉載請註明來自AngelaL博客

給TA打賞
共{{data.count}}人
人已打賞
電腦系統

IDM 永久啟動工具(啟動後可正常更新)

2025-3-5 1:28:54

網站建設

Files Photo Gallery 單檔PHP目錄程式

2025-3-6 2:02:12

0 條回复 A文章作者 M管理员
    
    暫無討論,說說你的看法吧
個人中心
購物車
優惠劵
今日簽到
有新私信 私信列表
搜索