ntfy 推送通知完整指南:一条 curl 让服务器告警直达手机 ntfy 推送通知完整指南一条 curl 让服务器告警直达手机【免费下载链接】ntfySend push notifications to your phone or desktop using PUT/POST项目地址: https://gitcode.com/GitHub_Trending/nt/ntfy凌晨三点生产环境宕机监控大屏还在安静地转圈而你口袋里的手机毫无动静——这大概是每个运维最窒息的瞬间。构建结果发在终端里没人看、备份失败只有日志默默记一笔这类信息孤岛每天都在发生。ntfy 是一个轻量级的 HTTP 推送通知服务向一个 URL 发一次请求消息就会实时推送到你的手机、桌面和网页不需要注册账号、不需要装 SDK、不引入任何额外中间件。官方公共实例开箱即用自己的服务器三行 Docker 命令就能自建一个。30 秒上手一条 curl 发出第一条推送通知ntfy 的使用模型极简主题名就是 URL 的最后一节。把任意文本 POST 或 PUT 到/主题名就完成了发布# 发布一条消息到主题 night-ops curl -d nginx 重载完成服务正常 ntfy.sh/night-ops发布端到此结束。接收端只需要订阅同一个主题——在手机上安装 ntfy App、打开网页版、或者命令行里跑一条订阅命令三种方式任选# 命令行订阅按 CtrlC 退出 ntfy sub night-ops # 浏览器直接打开 # https://ntfy.sh/#/subscribe?topicsnight-ops发一条、订一条两端对上主题名即通。整个过程不需要任何鉴权、账号或配置原理拆解Topic 通道、订阅关系与即时投递看起来像发个消息就行背后其实是一个非常克信的模型理解它才能用好Topic 是纯通道不是用户。它没有密码、没有所有者概念本质上只是服务端内存里的一条广播频道。任何知道名字的人都能往里写、往外读。发布与订阅完全解耦。发布端发 HTTP 请求就断开不知道也不关心谁在收订阅端建立一条长连接SSE/WebSocket之后这个主题的所有消息都会顺着这条连接即时推过来无需轮询。消息短暂留存。ntfy 默认会把最近的消息缓存在本地SQLite新订阅者连上时能看到最近的历史消息但超过缓存上限或缓存重启即清空——所以它是实时通知而非消息数据库。一句话总结Topic 是频道名发布是投币进邮筒订阅是守在收报机前。这也直接决定了它的两条使用铁律别把秘密写进公开主题的正文后面会讲访问控制以及需要留档时自己落盘不要指望服务端帮你存很久。消息定制Title、Tags、Priority 与 Markdown 怎么选默认推送只有正文一行实际使用中你会发现一眼扫过去分不清紧急程度。ntfy 用几个 HTTP 头来定制消息样式全部可选按需叠加请求头作用示例值Title通知标题默认显示为主题名数据库告警Tags消息末尾的 emoji 标记逗号分隔warning,skullPriority1-5 级优先级影响提示音与排序now最高X-Markdown开启 Markdown 渲染网页端生效yesAttach把请求体当作附件截图、日志上传screenshot.png组合起来就是curl -H Title: 磁盘告警 \ -H Tags: warning,rotating_light \ -H Priority: high \ -d data 分区已用 87%预计 3 天写满 \ ntfy.sh/night-ops选型建议按团队经验沉淀Tags 只选 1-2 个语义最强的。warning、skull、white_check_mark、bell这类高频图标足够覆盖 90% 场景堆一串 emoji 反而稀释重点。Priority 别滥用。now第 5 级会强制唤醒手机并持续响铃只留给需要立刻有人动手的事件日常提醒停留在high甚至default否则三个月后你会对一切免疫。能用结构化就别堆段落。Title 放是什么正文放关键数值 该找谁需要富文本列表、代码块、加粗再开X-Markdown: yes。完整头列表可以参考仓库内的 docs/publish.md。自建 ntfy 实例Docker 三行起步 Token 访问控制公共实例 ntfy.sh 适合个人和试用生产环境更建议自建主题名掌握在自己手里、消息不出内网、还能挂 S3 存附件。仓库自带 Dockerfile镜像就是现成的binwiederhier/ntfydocker run -d --name ntfy --restart unless-stopped \ -p 80:80 -v ntfy-cache:/var/cache/ntfy \ binwiederhier/ntfy serve启动后访问http://服务器IP即可看到 Web 界面订阅、发消息都在里面。生产部署建议直接改绑 2087 端口ntfy 的惯例端口并前置 Nginx/Caddy 做 TLS。访问控制是关键一步。ntfy 支持 Bearer Token 鉴权可以预置在配置文件里只有持有 Token 的客户端才能访问受保护的主题# server.yml auth-tokens: - name: backup-bot description: 备份脚本专用 value: tk_JhbsnoMrgy2FcfHeofv97Pi5uXaZZ发布时带上认证头即可curl -H Authorization: Bearer tk_JhbsnoMrgy2FcfHeofv97Pi5uXaZZ \ -d 备份完成耗时 14 分钟 \ http://ntfy.intranet:2087/db-backup配置要点清单受保护主题的请求没有 Token 直接 401脚本里把 Token 放进环境变量别写死在代码仓库里给不同系统发不同 Token备份一个、监控一个出问题可以按 Token 维度吊销更细粒度的策略比如某些主题只允许特定 Token 发布看 docs/config.md 的 access control 章节消息缓存目录记得挂卷否则容器一重建历史消息全丢工程化组合监控告警、CI/CD 与多端订阅真正让 ntfy 进入日常流程的是这三个落地场景。监控告警把巡检脚本接出来裸脚本最实用——任何 cron 巡检发现问题就推一条比写整套告警平台轻得多# 每天 09:00 检查磁盘 usage$(df / | awk NR2 {print $5} | tr -d %) if [ $usage -gt 90 ]; then curl -s -H Priority: now -H Tags: warning \ -d 根分区已用 ${usage}%需要清理 \ http://ntfy.intranet:2087/ops-disk fi如果团队已经在用 Grafana 这类平台仓库里的 examples/grafana-dashboard/ntfy-grafana.json 提供了现成的大盘可以直接导入后接上 ntfy 作为通知渠道CI/CD 通知构建结果不再石沉大海在 Jenkins 的 post-build、GitHub Actions 的 job 末尾、GitLab CI 的脚本段里加一条发布即可。技巧是用Tags表达成败让手机上的通知扫一眼就知道结果成功curl -H Tags: white_check_mark -d 构建 #${BUILD_NUMBER} 通过耗时 4 分 12 秒 ...失败curl -H Tags: x -H Priority: high -d 构建 #${BUILD_NUMBER} 失败日志见流水线 ...配合Attach头还能把失败日志的片段直接作为附件推过来省得点进流水线翻找。多端订阅同一主题各取所需一个主题可以同时被手机 App、网页版和 CLI 订阅互不干扰。推荐的分层习惯手机 App订 2-3 个必须立刻知道的主题告警、构建失败关掉无关的网页版放在工位浏览器里订全量主题当信息流用CLI 订阅挂在跳板机上ntfy sub配合 shell 做二次处理比如失败时自动重启服务避坑排错上生产前核对这 6 件事以问答 清单的形式把踩坑率最高的几项收个尾Q主题名随便起可以吗不行。主题名有硬性规则1-64 个字符字母开头只能含字母、数字和._-且不能有连续短横线。建议团队统一格式比如环境-系统-事件prod-db-backup一眼能定位来源。Q发到 ntfy.sh 突然被 429 了公共实例有限流每分钟请求数、单主题订阅者数都有上限。低频告警一般碰不到高频消息每秒级别的日志流应该自建实例或先把消息聚合再发。自建实例的限流阈值可在 docs/config.md 的 rate limiting 一节调整。Q推送失败了怎么办网络抖动很常见关键路径加指数退避重试示意如下import requests, time def ntfy_notify(topic, msg, retries3): for i in range(retries): try: if requests.post(fhttp://ntfy.intranet:2087/{topic}, datamsg.encode(), timeout5).ok: return True time.sleep(2 ** i) # 1s → 2s → 4s 退避 except requests.exceptions.RequestException: pass return FalseQ消息里能放敏感信息吗公开主题上的正文是明文广播不要放密码、密钥、内网拓扑细节。敏感场景走自建 Token正文只写发生了什么事 去哪看。上生产前核对清单主题名符合命名规范且与团队现有系统无重名自建实例已挂缓存卷、配置了重启策略受保护主题均已启用 Token且 Token 未提交进代码仓库发布脚本带超时和重试失败本身也有兜底至少记日志限流阈值按消息峰值评估过留有余量手机上只订了必须立刻响应的主题避免告警疲劳下一步可以做什么按投入从低到高挑一个开始把第一条真实消息跑通选一个你现有脚本里最该被看见的输出磁盘、证书到期、定时任务结果接一条 curl试一下附件推送用Attach把巡检截图或日志片段直接推到手机上对比纯文本的信息密度给自建实例加上 Token 与 HTTPS把生产主题从公共实例迁过来接入现成模板server/templates/ 下有 Grafana、GitHub、Alertmanager 的 Webhook 配置对照 docs/integrations.md 直接抄深挖服务端配置S3 附件存储、邮件/SMS 双通道、速率限制全部集中在 docs/config.md按需求取用【免费下载链接】ntfySend push notifications to your phone or desktop using PUT/POST项目地址: https://gitcode.com/GitHub_Trending/nt/ntfy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考