自建推送通知服务:Docker 部署 ntfy 替代 Pushover

1432 字
7 分钟
自建推送通知服务:Docker 部署 ntfy 替代 Pushover

痛点:服务挂了,你在睡觉#

凌晨 3 点,你的服务器磁盘满了,Gitea 挂了,Navidrome 打不开,Caddy 证书续签失败。

第二天早上你才发现。

这不是段子——这是每个自部署玩家都经历过的场景。服务器上的服务不会因为你睡着了就不出问题。

传统的解决方案

  • ❌ 邮件通知 → 容易被丢进垃圾箱,配置 SMTP 麻烦
  • ❌ 短信告警 → 要花钱买服务
  • ❌ Pushover → 好用,但要每月订阅费,闭源,数据走第三方

ntfy 的方案很简单:一个 HTTP 请求,手机就响了。


什么是 ntfy?#

ntfy 界面截图
ntfy 界面截图

ntfy(读作 “notify”)是一个开源的推送通知服务,Go 语言编写,MIT 协议。核心设计:

发布/订阅模式。向一个 topic 发消息,所有订阅了该 topic 的设备都会收到通知。

截至 2026 年 6 月,ntfy 拥有 31k GitHub Stars,活跃维护,每月都有更新。

ntfy vs 其他推送方案#

特性ntfyPushoverGotifyBark
开源✅ MIT❌ 闭源✅ MIT✅ MIT
自部署
Docker 镜像大小10MBN/A~20MB~15MB
编程语言Go-GoGo
手机 App✅ Android/iOS✅ Android❌ 仅 iOS
Web 端支持✅ 自带
桌面推送✅ Web/原生
邮件通知✅ 可配置
消息优先级✅ 1~5 级
附件支持✅ 图片/文件
身份验证✅ 用户名密码/Token✅ API Key✅ Token
付费免费$5/月免费免费
生态集成Uptime Kuma / Grafana / Prometheus / Shell 脚本有限中等仅 iOS

为什么 ntfy 值得部署#

  1. 极轻量 — 10MB Docker 镜像,跑在 256MB 内存的机器上毫无压力
  2. 协议简单 — 核心就是个 HTTP POST 请求,任何语言/脚本都能发
  3. 双端 App — Android 和 iOS 都有官方 App,Web 端也行
  4. 消息持久化 — 默认保留 7 天消息,离线设备上线后能收到
  5. 附件支持 — 可以发图片、文件(比如监控截图)
  6. 生态好 — Uptime Kuma、Grafana Alerting、Prometheus Alertmanager 都原生支持

Docker 部署 ntfy#

环境要求#

  • Docker Engine ≥ 20.10
  • 任意 Linux 服务器,256MB 内存足够
  • 一个域名(推荐,用于 HTTPS)

快速部署#

创建 docker-compose.yml

version: '3.8'
services:
ntfy:
image: binwiederhier/ntfy:latest
container_name: ntfy
ports:
- "8080:80"
volumes:
- ./ntfy_data:/etc/ntfy
- ./ntfy_cache:/var/cache/ntfy
restart: unless-stopped

启动:

Terminal window
mkdir -p ntfy_data ntfy_cache
docker compose up -d

打开 http://你的IP:8080 就能看到 ntfy 的 Web 界面。

配置 HTTPS(推荐)#

用 Caddy 一键反代:

ntfy.yourdomain.com {
reverse_proxy 127.0.0.1:8080
}

用 Nginx Proxy Manager:

  1. 添加 Proxy Host
  2. Domain Names: ntfy.yourdomain.com
  3. Forward to 127.0.0.1:8080
  4. 开启 SSL → Let’s Encrypt

高级配置#

创建 ntfy_data/server.yml

# 基础配置
base-url: "https://ntfy.yourdomain.com"
# 身份验证(可选,建议开启)
auth-file: "/etc/ntfy/auth.db"
auth-default-access: "deny-all"
# 消息保留时间(默认 3 天)
cache-duration: "72h"
# 附件大小限制(默认 15MB)
attachment-size: "25M"
# 开启邮件通知(可选)
smtp-sender-addr: "smtp.gmail.com:587"
smtp-sender-user: "your@gmail.com"
smtp-sender-pass: "app-password"
smtp-sender-from: "ntfy@yourdomain.com"

设置管理员账号:

Terminal window
docker exec ntfy ntfy user add --role=admin admin

使用教程#

1. 安装手机 App#

  • Android: Google Play / F-Droid 搜索 “ntfy”
  • iOS: App Store 搜索 “ntfy”

打开 App → 设置 → 添加服务器 → 输入 https://ntfy.yourdomain.com → 订阅 topic

2. 从命令行发通知#

Terminal window
# 最简单的方式
curl -d "服务器磁盘空间不足!" https://ntfy.yourdomain.com/alert
# 带标题和优先级
curl -H "Title: 磁盘告警" \
-H "Priority: urgent" \
-H "Tags: warning,disk" \
-d "根分区使用率 95%,请立即处理" \
https://ntfy.yourdomain.com/alert
# 发送图片(监控截图)
curl -H "Title: 服务器状态" \
-F "file=@screenshot.png" \
https://ntfy.yourdomain.com/server-status

3. 从脚本发通知#

Shell 脚本

#!/bin/bash
send_alert() {
curl -H "Title: $1" \
-H "Priority: high" \
-d "$2" \
https://ntfy.yourdomain.com/alert
}
# 检查磁盘
disk_usage=$(df / | awk 'NR==2 {print $5}' | tr -d '%')
if [ "$disk_usage" -gt 90 ]; then
send_alert "磁盘告警" "根分区使用率 ${disk_usage}%"
fi

Python 脚本

import requests
def send_notification(topic, title, message, priority=3):
requests.post(
f"https://ntfy.yourdomain.com/{topic}",
headers={
"Title": title,
"Priority": str(priority),
"Tags": "computer"
},
data=message.encode()
)
send_notification("alert", "服务重启", "Caddy 容器已自动重启", priority=4)

4. 集成监控工具#

Uptime Kuma 集成:

  1. 进入 Uptime Kuma → 设置 → 通知
  2. 选择 “ntfy”
  3. 填入服务器 URL 和 topic
  4. 测试 → 手机立刻收到!

Grafana Alerting 集成:

# 在 Grafana 中配置 Contact Point
type: webhook
url: https://ntfy.yourdomain.com/grafana-alert
http method: POST

Prometheus Alertmanager 集成:

receivers:
- name: 'ntfy'
webhook_configs:
- url: 'https://ntfy.yourdomain.com/prometheus-alert'

常见问题 FAQ#

Q1: ntfy 的消息会丢失吗?#

消息默认在服务端保留 3 天(可配置)。如果你的手机离线,上线后会收到所有未读消息。超过保留期的消息会被自动清理。

Q2: 可以自定义通知铃声吗?#

可以。ntfy App 支持为不同 topic 设置不同的铃声、震动模式、LED 颜色。比如把 “critical” topic 设为高优先级震动,把 “info” topic 设为静音通知。

Q3: 安全性如何?#

ntfy 支持可选的身份验证(用户名密码或 Token)。建议:

  • 开启 auth-default-access: "deny-all" 限制匿名访问
  • 用 Caddy/NPM 配置 HTTPS
  • 每个服务使用独立的 topic 名称

Q4: 免费的 ntfy.sh 和自部署有什么区别?#

ntfy 官方提供了免费的 ntfy.sh 公共服务器,无需部署就能用。但注意:

  • 公共服务器上的消息对所有知道 topic 名的人可见
  • 没有身份验证保护
  • 受限于官方配额

自部署是自己的地盘,更安全、更可控。

Q5: 跟 Gotify 比怎么选?#

特性ntfyGotify
iOS App✅ 官方❌ 社区版
消息保留✅ 可配置
附件支持
优先级✅ 1~5 级
镜像大小10MB~20MB
GitHub Stars31k12k

如果你只用 Android,两个都行。如果你有 iOS 设备,ntfy 是唯一选择


总结#

ntfy 是自部署推送通知的首选方案。10MB 的镜像、一条 curl 命令就能发通知、App 双端支持、生态集成完善——从 Uptime Kuma 到 Prometheus,从 Shell 脚本到 Python 应用,ntfy 都能接入。

一句话总结:你的服务可以没有花哨的仪表盘,但不能没有 ntfy。因为服务挂了没人通知,等于没挂——只是你还没发现而已。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
自建推送通知服务:Docker 部署 ntfy 替代 Pushover
https://www.kshare.top/posts/2026-ntfy-自建推送通知服务docker-部署替代-pushover/
作者
Kshare
发布于
2026-06-28
许可协议
CC BY-NC-SA 4.0
相关文章 智能推荐
1
自建笔记服务:Docker 部署 Memos 打造轻量级备忘录
deployment 还在用付费的 Flomo 和 Notion?Memos 是开源自部署的极简笔记工具,Go 语言编写仅 20MB 镜像,支持 Markdown、标签、API、Webhook,一条 docker 命令就能搭建自己的笔记服务,数据 100% 掌握在自己手里。
2
Dozzle 实时日志查看器:Docker 部署一站式容器日志监控
deployment 还在 docker logs -f 一个窗口一个窗口地看日志?Dozzle 是轻量级实时 Docker 日志查看器,Go 编写仅 7MB 镜像,Web 界面同时监控所有容器日志,支持搜索过滤、多主机、暗色主题,一条命令部署。
3
2026 frp 自建内网穿透:Docker 部署替代 ngrok 实现外网访问内网服务
部署教程 你家里跑着 Jellyfin 影视库、Navidrome 音乐服务和一台 NAS,但在外面想访问它们的时候,被现实狠狠打了一拳——运营商没给公网 IP,你处在 CGNAT(运营商级 NAT)后面。
4
2026 1Panel 面板教程:宝塔开源替代,Docker 一键部署服务器管理面板
部署教程 1Panel 是飞致云出品的开源 Linux 服务器管理面板,无广告、不强制登录、支持 Docker 应用商店。本文覆盖与宝塔的对比、一键脚本与 Docker 安装、应用商店实战、网站反代与 HTTPS、备份与安全设置,附常见问题与避坑指南。
5
2026 Meilisearch 自建全文搜索引擎:Docker 部署打造个人搜索服务
部署教程 你的网站需要一个站内搜索功能?Elasticsearch 功能强大但资源占用感人——光 JVM 堆内存就要吃掉 1GB 起步。用 Algolia 吧,免费版只有 10000 条记录,超了就得每月 $50 起。
随机文章 随机推荐
Profile Image of the Author
Kshare
Hello, I'm Kshare.
重要公告
非常抱歉!本站此前接入的 Adsterra 广告联盟存在严重问题:其脚本会在访问者不知情的情况下强制跳转到第三方劫持页面(如 verify11.click 等恶意域名),严重影响了大家的访问体验与安全。我们已第一时间彻底移除了 Adsterra 的全部广告代码,并向因此受到困扰的访客致以最诚挚的歉意。目前站内仅保留安全的自营推广链接(无脚本、无弹窗、无跳转),其余广告投放保持关闭,感谢大家的理解与支持!
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
215
分类
9
标签
269
总字数
545,433
运行时长
0
最后活动
0 天前

文章目录