ntfy:用 PUT/POST 一条命令把推送通知发到手机与桌面的开源 pub-sub 服务 📅 发布时间:2026/9/11 18:33:54 👁 浏览次数: ntfy用 PUT/POST 一条命令把推送通知发到手机与桌面的开源 pub-sub 服务【免费下载链接】ntfySend push notifications to your phone or desktop using PUT/POST项目地址: https://gitcode.com/GitHub_Trending/nt/ntfyntfy读作 notify是一个基于 HTTP 的轻量级发布-订阅pub-sub通知服务你可以从任何一台电脑上的脚本用 PUT/POST 直接向手机或桌面发送推送通知无需注册、无需付费同时它完全开源可以轻松自托管属于自己的通知服务。读完本文你将掌握 ntfy 的核心概念、一条消息从发布到接收的完整链路、官方客户端生态以及如何用二进制、Docker 或系统包在几分钟内搭建一个私有推送服务。ntfy 是什么一个以 HTTP 为协议的推送服务项目官方定位见 README.md非常简洁ntfy is a simple HTTP-based pub-sub notification service。它把推送通知这件事简化到了极致——发布方不需要安装任何 SDK不需要申请推送通道的 API Key只需要一个普通的 HTTP 客户端curl、脚本、编程语言自带的 HTTP 库均可向某个 URL 发起PUT或POST请求消息就会被推送到正在订阅该主题topic的所有设备上。几个关键特性构成了它的设计哲学无需注册与付费在公共实例 ntfy.sh 上发一条通知只需要一条命令不需要创建账号、绑定设备。主题即密码因为不需要注册主题名本身就相当于访问该频道的密码因此官方反复强调要选择不容易被猜到的主题名详见 docs/publish.md。开放源码、可自托管服务端以静态链接的 Go 二进制形式分发并打包为 tarball、deb/rpm 包和 Docker 镜像支持 amd64、armv7 与 arm64 等架构。官方客户端覆盖主流平台包括开源的 Android 应用发布于 Google Play 与 F-Droid、开源的 iOS 应用发布于 App Store以及 Web 端 PWA 应用此外还有功能完整的 ntfy CLI。一条通知的旅程从 PUT/POST 到手机通知发布HTTP 请求就是全部APIntfy 的发布接口极简不需要鉴权、不需要额外参数。向ntfy.sh/topic发起一次POSTPUT也可以即可发布消息请求体就是消息内容curl -d Backup successful ntfy.sh/mytopic对应原生 HTTP 请求长这样POST /mytopic HTTP/1.1 Host: ntfy.sh Backup successful 如果你装了 Android 应用这条消息会立刻变成手机通知栏里的一条推送。服务端会为消息生成唯一id和时间戳并返回完整的 JSON 消息体该格式与订阅 API 返回的消息格式一致详见 docs/subscribe/api.md。从源码结构看服务端的请求处理在 server/server.go 中完成parsePublishParams负责解析 HTTP 头与查询参数例如x-priority/priority/prio/p这些别名统一映射到消息优先级随后由handlePublishBody依据请求体类型分流处理文本消息、附件、模板消息等不同发布形态。订阅连上主题实时接收订阅同样基于标准 HTTP客户端通过Server-Sent EventsSSE、WebSocket或长轮询连接主题即可实时收到消息。这意味着浏览器里一个EventSource就能订阅移动端应用与 Web 应用负责把消息渲染成系统通知CLI 的ntfy subscribe命令会把消息实时打印到终端详见 docs/subscribe/cli.md。缓存为离线订阅者兜底默认情况下服务端会把消息在磁盘上缓存 12 小时该时长与后端实现见 docs/config.md 与 message/cache.go订阅者重连时可通过since等参数拉取错过的历史消息发布方也可以用X-Cache: no头关闭单条消息的服务端缓存。发布不止于纯文本丰富的消息语义虽然核心是请求体即消息ntfy 还支持通过 HTTP 头大小写不敏感附加大量通知语义完整参数清单见 docs/publish.md。几个最常用的能力主要 Header含别名说明标题Title/t覆盖默认的主题短 URL标题优先级Priority/prio/p1min5max/urgent控制震动与弹窗行为标签与 emojiTags/ta命中 emoji 短代码则渲染为 emoji 前缀MarkdownMarkdown/mdtrue时消息体按 Markdown 渲染Web/Android点击动作Click点击通知后打开的 URL 或 deep link附件Attach/a、Filename/f发送本地文件或引用外部 URL 作为附件动作按钮Actions最多 3 个按钮view/broadcast/http/copy定时投递At/In/Delay支持时间戳、时长或自然语言时间最小 10 秒、最大 3 天邮件转发Email/e消息同步转发到指定邮箱语音呼叫Call用 TTS 把消息读出来的电话呼叫需验证号码消息模板Template/tpl用 Go 模板把 JSON webhook 转成人话一个把标题、紧急优先级、标签组合起来的安全告警示例curl \ -H Title: Unauthorized access detected \ -H Priority: urgent \ -H Tags: warning,skull \ -d Remote access to phils-laptop detected. Act right away. \ ntfy.sh/phil_alerts服务端对这些头部别名的统一解析逻辑可见于 server/server.go 中的parsePublishParams——它把x-priority、priority、prio、p等全部归一化再调用util.ParsePriority校验并映射到 15 的整数优先级非法值会直接返回 HTTP 400。这些头即参数的设计让发布方无论在 curl、脚本还是任意语言的 HTTP 客户端中都能以一致的方式工作。客户端生态怎么把消息接到手机和桌面ntfy 的服务端与客户端都是开源的Android 应用开源Google Play / F-Droid 均可获取支持即时投递instant delivery、自定义铃声/震动映射优先级、通知动作按钮、附件自动下载、与 Tasker/MacroDroid 等自动化应用的集成详见 docs/subscribe/phone.md。iOS 应用开源App Store 获取支持推送通知与通知动作。Web 应用PWA前端位于 web/基于 React Material UI 构建相关依赖在 README.md 的第三方库清单中有说明支持 Markdown 渲染、订阅管理、账号与令牌管理并可通过ntfy://deep link 唤起应用。ntfy CLI跨平台命令行客户端ntfy subscribe/ntfy publish的完整用法见 docs/subscribe/cli.md。此外ntfy 还兼容UnifiedPush标准可作为 UnifiedPush distributor也能充当Matrix Push Gateway/_matrix/push/v1/notify端点为自建 Matrix 服务器提供推送具体实现位于 server/server_matrix.go。自托管5 分钟搭建自己的 ntfy 服务如果你希望完全掌控数据消息缓存、附件、账号自托管是推荐路径。官方安装文档 docs/install.md 给出了完整方案核心步骤非常统一安装二进制/包 → 按需配置 → 运行服务。通用三步用下述任一方式安装 ntfy可选编辑服务端配置/etc/ntfy/server.yml参考仓库内的 server/server.yml 样例可选为 CLI 创建客户端配置~/.config/ntfy/client.yml非 root或/etc/ntfy/client.ymlrootmacOS 非 root 用户为~/Library/Application Support/ntfy/client.yml参考 client/client.yml。随后运行ntfy serve启动服务端deb/rpm 安装时也可用systemctl start ntfy用ntfy publish发消息、ntfy subscribe订阅主题。Docker 一行启动服务端把 Web UI 与 API 都暴露在 80 端口官方镜像binwiederhier/ntfy支持 amd64、armv6、armv7、arm64docker run -p 80:80 -it binwiederhier/ntfy serve需要持久化消息缓存时挂载/var/cache/ntfy并指定缓存文件docker run \ -v /var/cache/ntfy:/var/cache/ntfy \ -p 80:80 \ -it \ binwiederhier/ntfy \ serve \ --cache-file /var/cache/ntfy/cache.db需要完整配置时把自建的server.yml通过卷映射到/etc/ntfy即可注意官方镜像不自带/etc/ntfy/server.yml需手动创建并挂载。仓库根目录的 docker-compose.yml 还提供了带健康检查、非 root 用户运行等最佳实践的编排示例。Linux 包管理器安装Debian/Ubuntu官方 apt 仓库指纹55BA 774A 6F5E E674 31E4 B6B7 CFDB 962D 4F1E C4AF安装后执行systemctl enable ntfy与systemctl start ntfyFedora/RHEL/CentOS官方 rpm 包Arch LinuxAUR 包ntfysh-bin社区维护NixOSnixpkgs 中的ntfy-shFreeBSDpkg install go-ntfy社区维护macOS / WindowsCLI 与服务器均有官方二进制macOS 官方仅支持 CLI详见文档说明Windows 还支持scoop install ntfy与sc create ntfy注册为系统服务。Kubernetes 部署同样有官方文档支持的 Deployment、StatefulSet持久缓存、Kustomize 与第三方 Helm Chart 方案适合在集群环境中以 ConfigMap 注入server.yml的方式运行。ntfy CLI一柄多合一的瑞士军刀从 cmd/ 目录的源码结构看CLI 由urfave/cli驱动主要子命令包括命令用途ntfy publishpub发布消息支持--title、--priority、--tags、--attach、--email、--at、--sequence-id等全部发布参数ntfy subscribesub订阅主题并实时输出消息支持自签证书、代理等选项ntfy serve启动自托管服务器ntfy user创建/管理用户启用访问控制后使用见 cmd/user.gontfy token创建/管理访问令牌见 cmd/token.gontfy access管理用户对主题的读/写权限见 cmd/access.gontfy tier管理服务等级tier与限额见 cmd/tier.gontfy webpush管理 Web Push 订阅见 cmd/webpush.goCLI 与 HTTP API 完全等价适合在 shell 脚本中替代curl使用客户端配置文件样例见 client/client.yml。安全与访问控制从公开主题到私有主题默认如 ntfy.sh所有主题都是公开可读写的适合个人通知但当你想搭建私有服务或多人共享时可以启用访问控制。启用后支持两种认证方式用户名 密码HTTP Basic AuthAuthorization: Basic base64(username:password)访问令牌Access Tokenntfy token或 Web 端账户页创建以Authorization: Bearer tk_xxx发送也可以在 Basic Auth 中留空用户名、把令牌当密码发送curl -u :tk_xxx ...方便脚本调用。同时可用ntfy access精细控制每个用户对每个主题的读/写/拒绝权限。消息缓存、附件、邮件等也有完整的服务端限流与配额体系docs/config.md发布侧常用的限额包括单条消息最大 4096 字节超长自动转为附件、默认附件上限 15 MB、附件 3 小时后过期等详见 docs/publish.md。技术架构速览Go 服务端 Web 前端从仓库目录结构可以清晰看出项目的技术分层服务端Go 编写入口 main.goHTTP 路由与消息处理在 server/消息缓存支持 SQLite 与 PostgreSQL 双后端message/用户与访问控制同样双后端user/附件存储支持本地文件系统与 S3attachment/。Web 前端web/ 下的 React Material UI 应用构建配置见 web/package.json通过 IndexedDBDexie.js做本地持久化。推送通道Android 即时投递依赖 Firebase Cloud Messagingserver/server_firebase.goWeb 推送使用 Web Pushwebpush/邮件发送在 mail/电话呼叫在 twilio/。模板引擎消息模板基于 Gotext/template其中text/template被小补丁后 vendored 在 template/gotext/加入执行截止时间以防御恶意模板并支持 Sprig 函数子集服务端预置 GitHub、Grafana、Alertmanager 三种 webhook 模板server/templates/。开源许可项目采用Apache License 2.0 与 GPLv2 双许可LICENSE、LICENSE.GPLv2。社区、贡献与进一步阅读ntfy 的发布/订阅/自托管完整手册都在仓库的 docs/ 目录下推荐按需阅读docs/publish.md发布 API 全参数详解、docs/subscribe/api.md订阅 API 与消息格式、docs/subscribe/phone.md手机端安装与即时投递、docs/subscribe/cli.mdCLI 全命令、docs/install.md全平台自托管、docs/config.md服务端配置项。官方还在 ntfy.sh 上开设了announcements主题用于发布新版本公告项目接受 PR 与 issue 形式的贡献并欢迎通过 Weblate 参与多语言翻译。结语ntfy 的核心洞察在于推送通知本质上只需要一个 URL 和一个 HTTP 请求。它用极简的 PUT/POST to a topic 抽象同时服务了脚本告警、webhook 集成、物联网触发和个人提醒等几乎所有发通知的场景而开源自托管又让数据主权回到了使用者手中。如果你厌倦了为每个平台单独对接推送 SDK一条curl -d Hello ntfy.sh/mytopic或许就是最优雅的答案。【免费下载链接】ntfySend push notifications to your phone or desktop using PUT/POST项目地址: https://gitcode.com/GitHub_Trending/nt/ntfy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考