不需要服务器,也能收到推送通知:ntfy 给我带来的效率提升

不需要服务器,也能收到推送通知: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