用 ntfy 搭建零成本自托管通知系统

目录

📌 一句话导读:服务器挂了你是靠微信刷屏才知道的?ntfy 让你一行命令把任何事件推到手机——开源、自托管、零月租,不把告警内容交给任何第三方。

一、ntfy 是什么

ntfy(读作 “notify”)是一个开源的发布-订阅式推送通知工具。它的模型极简:你往一个 URL 发一条消息(PUT 或 POST),订阅了这个 URL 的人,手机和桌面立刻收到推送。

它有两个用法:直接用官方公共服务 ntfy.sh,或者自己用 Docker 起一个私有服务。对个人和中小团队来说,两者都是零成本——公共服务免费、私有部署也只有一台小机器的电费。

关键差异在于:它不是商业推送平台。市面上的推送服务大多按量计费,而且你的告警内容要经过别人的服务器。ntfy 把这条链路拿回你手里:消息发到你自己的服务(或你信任的公共服务),不经过广告平台,不进大厂的数据湖。

二、为什么你需要它

先说痛点。绝大多数人的「通知系统」是乱的:

  • 服务器告警靠邮件,邮件被折叠进「推广」标签页,半夜出了问题早上才发现;
  • 爬虫跑完、备份结束这种「好事」,根本没有通知,你得主动去查;
  • 想给手机推一条自定义消息,要么接商业推送 SDK(要注册、要密钥、要按条付费),要么放弃。

ntfy 解决的是「把任意事件变成一条即时推送」这件事。它不只省 money,省的是响应延迟——服务挂了你知道得越早,损失越小;脚本跑完了你知道得越快,下一步动作越顺。

信息差在这:很多人不知道「自托管推送」已经简单到一行 curl 的程度。你不需要写前端、不需要配证书、不需要接 SDK,一条命令就够了。

三、最快上手:三分钟跑通

用公共服务(最快)

不需要装任何东西。直接在终端:

1
curl -d "数据库备份完成" ntfy.sh/你的主题名

手机装 ntfy App,订阅话题 你的主题名,这条消息立刻弹到锁屏。主题名就是你的频道标识,谁知道谁就能订阅——所以别用太好猜的名字,或者往下看怎么加鉴权。

自托管(推荐长期使用)

用 Docker 一行起:

1
2
3
4
5
docker run -d \
  --name ntfy \
  -p 8080:80 \
  -v /var/www/ntfy:/var/lib/ntfy \
  binwiederhier/ntfy serve

服务起来后,把 ntfy.sh/主题 换成 你的域名或IP:8080/主题 即可。配个反向代理加 HTTPS,就是生产可用的私有推送服务。

四、进阶用法

ntfy 不是只能推纯文本,几个常用的:

标题和优先级:用请求头设定,紧急消息能走系统高优先级通道,不会被静音。

1
2
3
4
5
curl \
  -H "Title: 生产环境告警" \
  -H "Priority: 5" \
  -d "订单服务响应超时" \
  ntfy.sh/ops-alert

鉴权保护话题:私有部署下加 Basic Auth 或 token,只有持有凭据的客户端能发消息,防止别人往你的频道里灌水。

附件:可以直接推图片、日志文件,手机端能预览。排查问题时把错误截图推过来,比文字描述高效得多。

动作按钮:消息能带「确认」「查看详情」等按钮,点一下回传事件,适合做简单的远程确认流。

五、三个真实能落地的场景

场景一:服务器存活监控。 在 cron 里加一行,每五分钟心跳一次;再配一个看门狗,X 分钟没收到心跳就推高优先级告警。比收费监控便宜,逻辑还完全在你掌控里。

场景二:长任务完成通知。 训练跑完、视频渲染结束、数据同步完毕——在脚本末尾加一行 curl 推「任务完成 + 耗时」。你不用守着终端,该去干嘛去干嘛。

场景三:和家人/小团队的轻量提醒。 私有部署后,给家人建一个话题,出门倒垃圾、到家吃饭这类小事一条推送解决,比拉群清净,比微信状态直观。

七、ntfy 和别的方案差在哪

市面上的通知方案大致三类,ntfy 的位置很清楚:

商业推送(如 Pushover、极光、个推)。 优点是省部署、跨平台稳;缺点是按量或按设备收费,而且告警内容过第三方服务器。如果你推的是「备份完成」这种无害信息,没所谓;但如果推的是内部服务报错、IP、日志片段,把这些都交给商业平台,隐私账得自己算。

其他自托管(如 Gotify、Bark)。 Gotify 功能接近,但生态和文档成熟度不如 ntfy;Bark 只服务苹果设备,没有安卓和桌面。ntfy 的差异化是「全平台 + 极低上手门槛 + 公共服务兜底」——你甚至可以先免部署用 ntfy.sh,跑顺了再搬私有。

自己撸(邮件/微信机器人)。 能跑,但维护成本是隐性的:邮件进垃圾箱、微信接口改版、机器人被封。ntfy 把这条链路做成一行命令,维护面几乎为零。

我的判断:ntfy 不是功能最强的,但是「性价比 + 上手速度」组合最均衡的。对独立开发者和自托管爱好者,它几乎是没有脑子的默认选项。

八、几个容易踩的坑

中文编码。 curl 推中文时,终端编码不对会变成乱码。最稳的做法是 URL 编码或显式指定 UTF-8 环境,别依赖默认 locale。

话题命名别太好猜。 ntfy.sh 的公共话题是公开频道,谁知道名字谁就能订阅。敏感告警要么用难猜的长随机串,要么直接私有部署开鉴权。

私有部署要备份。 你存的话题和历史消息在挂载卷里,机器没了就全没了。定期备份 /var/lib/ntfy 目录,和备份其他服务一样对待。

别拿它当消息队列。 ntfy 是「推送」,不是「可靠投递总线」。重要业务事件该进正规队列,ntfy 只负责「通知你一下」,丢了不影响主流程。

九、适合谁,不适合谁

适合:有自建服务的开发者、跑定时任务的独立工作者、想摆脱商业推送按量计费的人、在意告警隐私的人。

不适合:要百万级并发推送的大厂(那是另一套基础设施);不想碰命令行和服务部署的纯小白(用公共服务可以,但自托管对你仍有门槛)。

🎯 行动清单(今天就能做)

  1. 手机装 ntfy App,订阅一个测试话题,终端跑 curl -d "测试" ntfy.sh/测试话题 看是否秒收。
  2. 把你最常用的一个脚本(备份/爬虫/渲染)末尾加一行 curl 推送「完成」。
  3. 有长期需求就 Docker 起私有服务,反向代理加 HTTPS,给敏感话题开鉴权。
  4. 把服务器监控接到 ntfy,设心跳超时告警,替换掉原来的邮件通知。

参考来源:

  1. ntfy 官方仓库 — 开源代码、文档与所有功能说明
  2. ntfy 官方文档 — 发布/订阅/鉴权/附件完整用法
  3. ntfy Docker Hub — 容器镜像与部署参数
  4. ntfy 官方示例文档 — 心跳监控、脚本集成等实战示例
  5. ntfy on F-Droid — 开源安卓客户端分发(官方维护)

📖 延伸阅读


🔗 读完了?下一步:先装 App 跑通那条测试 curl,再把它接进你最常用的一个脚本——今晚就能少刷三次终端。

原文链接: https://www.17you.com/freeresources/ntfy-push-notifications/ 已复制!
寻找合作和资源

如果你也对文章内容或者分享的资源和机会有兴趣,欢迎联系我。

请点击联系我


相关内容

发现新版本

当前站点有新版本可用。