不需要服务器,也能收到推送通知:ntfy 给我带来的效率提升
不需要服务器,也能收到推送通知:ntfy 给我带来的效率提升
背景
你有没有遇到过这些情况:
服务器半夜挂了,但日志报警邮件躺在垃圾箱里,根本没看到 CI/CD 跑完了,想第一时间知道成功还是失败,要么装 Slack,要么装企业微信 SDK,麻烦死了 家里的服务器下好了电影,想远程通知一下,结果要配一堆推送服务 跑一个脚本要几小时,不想一直盯着,但想知道什么时候跑完了
我自己被这些问题折磨了很久。试过很多方案:邮件太慢、钉钉/企微配置太烦、Server 酱免费版限速、Pushover 要付费……
直到我遇到了 ntfy。
ntfy 是什么
ntfy(读作 "notify")是一个开源的免费推送通知服务,核心功能就一个:通过 HTTP PUT/POST 请求,向你的手机或桌面发送推送通知。
不需要账号、不需要配置服务器、不需要调 SDK。用一条 curl 命令就能搞定:
# 最简单的用法
curl -H "prio:high" -H "tags:warning" -H "Title:服务器告警" \
-d "内存使用率超过 90%" ntfy.sh/topics/你的专属频道
手机装上 ntfy App(iOS/Android 都支持),订阅 你的专属频道,以后往这个地址发什么,手机就收到什么通知。
就这么简单。
能做什么
结合一点脚本和自动化,ntfy 的玩法相当多:
1. 服务器监控报警
写个定时 cron,每 5 分钟检查一次重要指标,有问题直接推:
#!/bin/bash
MEM=$(free | grep Mem | awk '{printf("%.0f", $3/$7 * 100)}')
if [ "$MEM" -gt 90 ]; then
curl -H "tags:warning" -H "Title:服务器内存告警" \
-d "内存使用率 ${MEM}%" ntfy.sh/myserver-alerts
fi
2. CI/CD 完成通知
GitHub Actions、GitLab CI、Jenkins 都可以:
- name: Notify on failure
if: failure()
run: |
curl -H "tags:white_check_mark" -H "Title:GitHub Actions 失败" \
-d "仓库 ${{ github.repository }} 分支 ${{ github.ref }} 构建失败" \
ntfy.sh/myci-notify
跑完不用盯着,成功失败第一时间知道。
3. 长时脚本通知
跑机器学习训练、数据处理这种几个小时的事:
python train.py && \
curl -H "tags:party" -H "Title:训练完成" \
-d "模型训练完成,耗时 3 小时 22 分,准确率 94.2%" \
ntfy.sh/aiscripts
洗完澡回来,结果已经在手机上了。
4. NAS / 家庭服务器下载完成
挂 PT 或者远程下载,下载完了推个通知:
curl -H "tags:tada" -H "Title:下载完成" \
-d "《奥本海默》已下载完成,大小 2.4GB" \
ntfy.sh/nas-downloads
人不在家也能知道什么时候下好了。
为什么值得推荐
几个让我一直用的理由:
1. 开源免费,没有限制
官方提供公共服务器 ntfy.sh,直接用,不用注册账号。也可以自己部署,完全掌控数据。我自己搭了一个在 VPS 上,响应比公共服务器快很多。
2. 零门槛集成 现有脚本加一行 curl 就能接入,不用改架构、不用装 SDK、不用配置回调地址。Cron 里加一行就行,改造成本几乎为零。
3. 支持标签和优先级
-H "tags:warning" 可以带上图标和颜色,-H "prio:high" 可以设定高优先级,iOS 会有声音提醒。实用性很强。
4. 自建简单 一条 Docker 命令就起好了:
docker run -d \
--name ntfy \
-p 80:80 \
-v /data/ntfy:/data \
binwiederhier/ntfy:latest \
serve --listen-http=":80"
5. 支持 WebSocket,延迟很低 轮询那种方案完全不在一个层次。ntfy 支持 WebSocket 连接,延迟毫秒级,推送几乎是实时的。
快速上手(5 分钟搞定)
第一步:装 App
iOS 和 Android 都有,搜 "ntfy" 就能找到。装好后打开,默认会提示你订阅一个随机频道——先跳过。
第二步:发一条测试通知
在终端执行:
curl -H "Title:Hello from ntfy" -d "这是一条测试通知,成功!" ntfy.sh/test-xiaoyue
第三步:App 里订阅同一个频道
打开 App → 点击右上角 "+" → 输入 test-xiaoyue → 订阅。以后发到这个频道的通知就会出现在手机上。
搞定。
进阶:私有部署
如果嫌弃公共服务器延迟高,或者有数据隐私要求,私有部署只需要一条命令:
docker run -d \
--name ntfy \
-p 80:80 \
-v /mnt/docker/ntfy:/data \
-e NTFY\_AUTH\_METHOD=none \
-e NTFY\_BASIC\_AUTH\_USERNAME=admin \
-e NTFY\_BASIC\_AUTH\_PASSWORD=你的密码 \
binwiederhier/ntfy:latest \
serve --listen-http=":80"
然后把 ntfy.sh 换成你自己的域名就好。
适合谁
有服务器的人(VPS、小主机、NAS)——监控报警必备 跑 CI/CD 的开发者——构建通知,不需要装 IM SDK 经常跑长时脚本的人——训练/下载/数据处理,跑完自动推送 喜欢折腾效率工具的极客——一条 curl 就能发通知,完美符合极简主义
如果你是那种"服务器宕机了三天才发现"的人,ntfy 能救你一命。
链接
GitHub:https://github.com/binwiederhier/ntfy[1] 官方文档:https://ntfy.org[2] 公共服务器:https://ntfy.sh[3]
用了两个月下来,ntfy 是那种"装了就不想删"的小工具。不占用系统资源、不需要维护、集成成本几乎为零。如果你也想让重要的事情第一时间通知到你,而不是躺在某个角落被错过,ntfy 值得试试。
引用链接
[1]https://github.com/binwiederhier/ntfy
[2]https://ntfy.org
[3]https://ntfy.sh