什么是 ntfy

ntfy 是一款轻量级的开源消息推送服务,能够方便用户推送消息到向手机或桌面上。

通过 ntfy,可以实现:

  • 监控服务器,第一时间获知异常状态
  • 自动化工作流时状态更新
  • 脚本运行完成后提示

接下来,我们将 ntfy 服务部署到自己的服务器上,实现一个属于自己的即时消息推送服务。

安装 ntfy

安装 ntfy 的方式有很多,支持通过包管理器、Docker等方式部署,下面以包管理器为例,在 Ubuntu 22.04 服务器上部署。
Ubuntu 镜像源中的 ntfy 可能不是最新版本,因此前往 Github Releases 页面,下载最新版本的 deb 包。

根据操作系统架构选择 deb 包,然后执行下面的命令完成安装。

sudo dpkg -i ntfy_2.15.0_linux_amd64.deb

配置 ntfy

编辑 /etc/ntfy/server.yml,在末尾加入以下内容,端口号根据实际情况修改:

base-url: "http://0.0.0.0:2586"
listen-http: ":2586"

auth:
  default-access: "read-write"

cache-file: "/var/cache/ntfy/cache.db"
attachment-cache-dir: "/var/cache/ntfy/attachments"

然后就是配置反向代理,开启 SSL,绑定域名,不过多赘述。当然也可以直接用 IP 访问,记得在防火墙和安全组里放行端口。

配置进程守护

使用 systemd 让 ntfy 在服务器上保持后台运行。通过包管理器安装的 ntfy,已经自动创建了相关服务文件,只需要激活即可:

# 开机自启
sudo systemctl enable ntfy.service

# 启动 ntfy
sudo systemctl start ntfy.service

使用 ntfy

浏览器访问 ntfy 地址,就能看到界面了。

在 ntfy 中,有两个基本操作,分别是订阅主题发布通知。接下来订阅一个主题 test

向刚才新添加的 test 主题里,发布一则通知。

可以看到,在订阅的主题中出现了刚才发送的通知。

在实际应用中,消息通知是结合脚本或程序进行推送的,我们不会在网页端手动发布通知。接下来,通过 curl 命令来发送一则通知:

curl -H "Title: 通知" -d "Another message from ntfy" https://ntfy.scott-sloan.cn/test

ntfy 还支持发送附件,优先级,emoji表情以及图片消息,详细的用法可参考官方文档,在网页端菜单栏中点击文档,或点击此处查看。

移动客户端

移动客户端配置与桌面端大同小异,订阅主题后就能接收消息通知。
安装包可从官网下载,其中 Android 客户端界面如下:

并且由于系统限制,ntfy默认无法在后台保持运行,所以需要进行相关设置。
设置忽略电池优化(不限制后台)。

允许通知权限,其中 订阅服务 必须开启,否则不会自动重连服务器,造成消息推送迟滞。

在 ntfy 设置中还可开启 WebSocket 协议,节省资源和电量。

总结

对于个人而言,ntfy 完全够用了,并且在易用性和功能性上都做得很好。如此轻量灵活,又能跨平台兼容,关键是可以自行部署,不借助外部服务,ntfy 绝对是最优解。