ntfy 推送通知服务器部署实操:3 条路径选 1 条就够
【免费下载链接】ntfySend push notifications to your phone or desktop using PUT/POST项目地址: https://gitcode.com/GitHub_Trending/nt/ntfy
ntfy 是一个围绕单次 HTTP 请求构建的推送通知服务器:向它发起一次 PUT/POST,订阅了这个主题的手机或桌面端就会立刻收到消息。它把服务器告警、定时任务结果、自动化状态这类散落的系统事件,变成可以实时接收的推送。本文主推最省事的 Docker 部署 ntfy 路径,并简述系统包与源码编译的要点,带你把自托管 ntfy 跑起来。
它替你解决什么
ntfy 的核心模型很简单:主题+消息。任何能发 HTTP 请求的程序都可以往里发消息,任何订阅了主题的设备都会收到。
场景一:服务器告警直达手机。监控探针、cron 任务、备份脚本执行完,一条 curl 发到 ntfy 主题,手机上立刻弹出通知,不需要再登录服务器查日志。
场景二:跨设备接力提醒。办公电脑上跑批处理、CI 流水线失败,推送到家里手机或另一台笔记本,同一消息多端可达。
场景三:家庭自动化与状态同步。下载器完成、NAS 磁盘告警、Home Assistant 自动化触发,都能作为事件源接进 ntfy,统一在一处查看。
先选型,再动手:ntfy 部署路径对比
官方提供四种交付形态,见 docs/install.md。选路径前先对号入座,比看完四种再决定要快:
| 路径 | 适合谁 | 代价 | 上手难度 |
|---|---|---|---|
| Docker 容器 | 新手、树莓派/NAS、测试环境 | 需装 Docker;镜像内无 server.yml,配置要自己挂卷 | ⭐ |
| 系统包(deb/rpm) | 长期运行的生产服务器 | 需 root;升级受仓库发布节奏约束 | ⭐⭐ |
| 预编译二进制 | 无包管理器、想最小化依赖的主机 | 要自己写 systemd 单元(仓库 server/ 内自带模板) | ⭐⭐ |
| 源码编译 | 要改代码、追新特性 | 需 Go 环境,构建时间略长 | ⭐⭐⭐⭐ |
结论先行:除非你要改代码,否则选 Docker。它隔离性好、升级只换镜像 tag,缓存目录挂出来即可持久化。
推荐路径实操:Docker 一键启动 ntfy 服务器
步骤 1:跑通最小容器,目的:先确认环境没问题
先不带持久化启动,快速验证 Docker 能拉镜像、端口能通。宿主机端口用 8080,普通用户也能操作,不必申请 80:
docker run -d --name ntfy \ -p 8080:80 \ binwiederhier/ntfy serve步骤 2:挂卷持久化,目的:重启不丢消息缓存和配置
容器内没有自带配置文件,所以要把宿主机目录映射进去。缓存落盘后,消息支持since=查询,客户端重连可补齐离线期间的推送:
docker run -d --name ntfy \ -p 8080:80 \ -v /etc/ntfy:/etc/ntfy -v /var/cache/ntfy:/var/cache/ntfy \ binwiederhier/ntfy serve(运行前先mkdir -p /etc/ntfy /var/cache/ntfy。更完整的声明式写法可参考仓库根目录的 docker-compose.yml。)
步骤 3:最小化配置,目的:只开必需项
在宿主机/etc/ntfy/server.yml中只保留两行即可。官方完整模板见 server/server.yml,逐项注释很全,其余项先不动:
cache-file: /var/cache/ntfy/cache.db attachment-cache-dir: /var/cache/ntfy/attachments改完docker restart ntfy让配置生效。base-url建议之后再补上——附件下载链接和邮件功能都依赖它,详见 docs/config.md。
其余路径速览
- 系统包(Debian/Ubuntu、RHEL 系):添加官方 APT/YUM 源后
apt install ntfy,自带 systemd 服务、用户和/etc/ntfy、/var/cache/ntfy目录,装完即开机自启。适合"装完不想再管"的生产机,仓库 server/ntfy.service 就是包内使用的单元文件。 - 预编译二进制:从 Releases 下载对应架构 tarball,解压后把
ntfy放进 PATH,直接ntfy serve --listen-http :8080。最轻量,但要自己处理开机自启与权限,包内附带的 service 文件可直接复用。 - 源码编译:
git clone https://gitcode.com/GitHub_Trending/nt/ntfy后执行make build(需 Go 环境),产出含 Web 前端的完整二进制。只推荐给要读源码、打补丁的开发者。
部署后验证:ntfy 健康检查与测试消息
成功长什么样,分两步确认:
curl -s http://localhost:8080/v1/health返回 JSON 且"healthy": true,说明服务本体正常。再发一条端到端测试消息:
curl -d "部署完成" http://localhost:8080/mytopic终端会回显id: ...与time: ...,代表消息已被服务端接受。此时打开手机端 ntfy 应用(或浏览器)订阅mytopic,同一主题下即可看到这条消息:
两端都收到,才算链路闭环。若只有一端收到,检查该端订阅的主题名是否与发送路径完全一致。
高频问题速查
| 现象 | 处置 |
|---|---|
启动报bind: address already in use | 宿主机端口被占,改映射为-p 8081:80并同步更新客户端配置 |
| 重启后历史消息查不到 | 没配cache-file,或容器目录权限导致写不进去,按步骤 2/3 补挂卷并检查属主 |
| 手机收不到,局域网内可以 | 服务器防火墙/云安全组未放行映射端口;无公网域名时手机无法回连自建服务器 |
| 公网部署收不到推送 | 移动端推送依赖 HTTPS,用 Nginx 反代 443 并配置证书,再在 server.yml 打开listen-https |
| 反代之后限流误伤所有用户 | 设置behind-proxy: true,否则所有访客被当作同一 IP 计数 |
| 开启用户体系后 API 全部 403 | 确认auth-file与auth-access权限条目,用ntfy access查看当前 ACL |
接入与进阶
跑通基础链路后,按需求挑一个方向深入:
- 监控告警接入:Grafana、Uptime Kuma、Netdata 等都能通过 webhook 发往 ntfy,仓库内 examples/grafana-dashboard/ 提供了现成仪表盘,配合
X-Template请求头可用 server/templates/ 下的模板美化告警文案。 - 访问控制:用
ntfy user建用户、ntfy access按主题模式授权,配合require-login可把 Web 应用变成内部门户;完整规则见 docs/config.md。 - 通道扩展:
X-Email头加 SMTP 配置可把同一消息转发邮件;生成 VAPID 密钥后开启 Web Push,浏览器关页也能收到后台通知。更多生态项目清单见 docs/integrations.md。
先把 Docker 版跑起来,再用一条 cron 消息检验告警闭环;确认稳定后,再按需叠加访问控制与邮件通道,避免一次改太多配置。
【免费下载链接】ntfySend push notifications to your phone or desktop using PUT/POST项目地址: https://gitcode.com/GitHub_Trending/nt/ntfy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考