ntfy 自托管推送服务器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/ntfy-self-hosted-push-notification-server。
技能介绍
解决什么问题
凌晨三点,backup.sh 静默失败;CI 流水线红掉的时候,值班同事正在睡觉;cron 任务跑完了,没人知道它是成功还是沉默。传统方案要么依赖邮件(没人看),要么接入 iOS/Android 推送(要账号、要审核、要凭证),对脚本和机器来说太重。
ntfy 把这件事压成一次 HTTP 请求:任何能发 PUT 或 POST 的进程——shell 脚本、CI step、定时任务、容器、IoT 网关——都能把一条消息推给订阅了同一主题的人,手机、桌面浏览器、桌面客户端都能收到。
它如何工作
- 发布/订阅模型:主题名由发送方随意指定(如
server-down、nightly-backup),订阅方通过 Web 页面、Android/iOS 客户端或原始 HTTP 长连接订阅同名主题,两者无需事先认识,也无需注册账号。 - 发送一条通知:向
http(s)://<host>/<topic>发一个PUT/POST,请求体就是通知正文,一行命令就能完成,没有 SDK、没有配置文件。 - 行为由 HTTP 头控制:
X-Priority设定紧急程度(视觉样式与声音),X-Tags/X-Icon指定图标和 Emoji 标记,Action增加可点击按钮,Deliver-By实现延迟投递,Click让点击后跳转指定地址。 - 自托管要点:单二进制或容器部署,用 YAML 配置
listen监听地址、base-url对外访问域名(不配会导致客户端订阅地址错误)、磁盘缓存路径,以及可选的认证用户与访问令牌。 - 访问控制:可开启用户名/密码、Bearer token、限制谁能创建主题,适合多团队共享同一实例时按主题隔离。
适用边界
- 不是短信或邮件网关,也不保证送达率——推送依赖客户端在线并保持连接,离线期间的消息在客户端重新连上后才收到(受缓存时间限制)。
- 移动端后台推送仍走系统通道,自托管实例无法替代 APNs/FCM 的系统级投递能力。
- 单机内存/磁盘缓存的容量有限,海量主题或高并发分发需要横向拆分或限制主题数量。
- 默认不带 TLS,暴露在公网请在前面挂反代终止 HTTPS,否则订阅链接可能被中间人改写。
- 适合告警、构建结果、任务完成提醒这类低延迟、短生命周期的消息,不适合做持久化消息队列或聊天系统。
使用场景
- 凌晨 2 点监控触发告警,值班运维需要在不打电话的情况下把通知推到自己手机并标记为高优先级。
- CI 流水线构建失败,开发者希望脚本自动把失败原因推送到团队订阅的主题,而不用守在构建页面。
- cron 任务执行数据库备份,运维需要在任务结束或出错时收到一条桌面和手机都能显示的完成通知。
- 树莓派采集环境数据,设备离线或温度异常时,运维要把事件推到个人订阅的主题,并附 Emoji 图标。
适合人员
- 负责值班与告警响应的运维工程师,需要把脚本和监控触发的异常快速推到自己手机。
- 维护 CI 流水线的开发者,希望在构建失败时自动通知团队,并保留失败信息和优先级。
- 编写 cron 或自动化脚本的工程师,需要在任务完成或报错时收到可见的推送提醒。
- 管理树莓派或 IoT 设备的技术人员,需要把离线与传感器异常事件发送到订阅主题。