Gotify
你可以 curl 的自托管推送通知服务器。
Gotify 是一个微小的自托管服务器,让任何脚本、应用或警报系统都能用一次 curl 向你的手机发送推送通知。一个 Go 二进制,SQLite 支持,约 15 MB 镜像,原生 Android 客户端。当你想要完全控制和零按消息成本时替换 Pushover/Pushbullet。
使用 Pier 部署
- 1 打开 Pier 控制台,点击 Add service。
- 2 从模板列表中选择 Gotify。
- 3 选择版本、设置服务名称,Pier 会自动配置容器、存储和端口。
- 4 如需 HTTPS,请绑定域名。Traefik 会自动签发 Let's Encrypt 证书。
什么是 Gotify?
Gotify 是一个小型、快速、自托管的服务器,用于向智能手机发送推送通知。 它公开单个 HTTP 端点 —— 用应用 token POST 标题、消息和优先级,一秒内 你的 Android 手机就收到通知。
整个服务器是一个 Go 二进制加 SQLite 文件。Android 应用维护到服务器的 长寿命 websocket,消息到达时排空它们,并在网络更改时以指数退避重新连接。 循环中没有集中式推送服务,没有 Google Cloud Messaging,没有 Apple Push Notification Service —— 你的手机直接与你的服务器通信。
对于已经运行 homelab 或 VPS 的开发者,Gotify 免费替换 Pushover/Pushbullet, 为每个监控工具提供 curl 能力的通知端点,并为任何家庭自动化或警报栈添加 有用的管道。
Pier 如何部署它
Pier 使用官方 gotify/server 镜像。默认端口:内部 80(在 Traefik 后)。
数据卷挂载在 /app/data —— SQLite 数据库和任何已安装的插件存在那里。
首次启动时你通过 env vars 设置管理员密码(Pier 为你生成)。登录,创建 应用,复制其 token,你可以在一分钟内用 curl 发送你的第一个通知。
在 Pier 中附加自定义域名以使 URL 成为 HTTPS —— Gotify token 在普通 HTTP 标头中传输,TLS 至关重要。
何时不要使用 Gotify
对于 iOS 优先的家庭,ntfy.sh 有精致的 iOS 客户端,Gotify 没有。对于 多平台团队消息,使用聊天平台(Mattermost、Matrix)。对于纯交易性电子邮件 或 SMS,使用专用电子邮件/SMS 网关。Gotify 专注于到 Android 的个人推送 通知(以及通过 websocket 到 web/桌面),并在那里出色。
核心功能
一次 curl 通知
用单次 HTTP POST 发送通知 —— 任何脚本、cron job、监控工具、CI 管道或 shell 一行都可推送到你的手机。
微小占用
单 Go 二进制,约 15 MB 镜像,约 25 MB RAM。在你的其他服务旁边运行成本为零。
原生 Android 应用
Play Store 和 F-Droid 上免费、开源的 Android 客户端。稳定的 websocket 连接,电池友好,可靠的通知。
每应用 token
每个发送者(cron、GitHub、你的 shell、Beszel)获得自己的应用 token。单独撤销而不破坏其他。
优先级和分组
消息有优先级(0-10),映射到客户端上的通知重要性。按应用对消息分组以获得整洁的 UI。
插件系统
可选的 Go 插件可在 Gotify 内运行以从外部源(RSS、email 等)拉取,无需编写单独的推送器。
应用场景
监控警报
Prometheus / Beszel / Uptime Kuma / Healthchecks.io 通过 Gotify webhook 推送到你的手机。无 SMS 账单,无 Twilio 账户,无第三方服务。
Cron job 通知
长时间运行的 cron job(备份、ETL、训练运行)在完成或失败时 curl Gotify。你不再想知道"它工作了吗?"
CI / 部署通知
GitHub Actions、GitLab CI、Drone、Forgejo Actions 通过 curl 将部署状态推送到你的手机。比 email 快,无需 Slack。
个人脚本和家庭自动化
门铃触发、智能家居警报、"洗衣服完成"ping —— 任何带 curl 的东西都可唤醒你的手机。
从其他系统桥接
使用 mqtt-to-gotify、gotify-bridge 或自定义代理将通知从 MQTT、AMQP 或 webhooks 转发到 Gotify。
代码示例
curl "https://gotify.example.com/message?token=$APP_TOKEN" \
-F "title=备份完成" \
-F "message=db dump 4.2 GB" \
-F "priority=5" import requests
requests.post(
"https://gotify.example.com/message",
params={"token": app_token},
data={
"title": "训练运行完成",
"message": "epoch 42, loss 0.018",
"priority": 7,
},
timeout=5,
) receivers:
- name: gotify
webhook_configs:
- url: "https://gotify.example.com/message?token=APP_TOKEN"
send_resolved: true websocat "wss://gotify.example.com/stream?token=$CLIENT_TOKEN" 对比
| vs Pushover | Pushover 是托管的、精致的,每个平台一次性约 5 美元。Gotify 是自托管的、免费的、不那么精致但完全在你的控制下。相同用例。 |
| vs ntfy.sh | ntfy 是另一个出色的自托管通知服务器,带更简单的基于 URL 的订阅模型(你订阅主题名)。Gotify 每应用使用 token —— 稍多设置,稍多安全。两者都很好。 |
| vs Telegram 机器人 | Telegram 免费且可靠,但每个通知器需要机器人 + 聊天 ID,消息格式是对话式的。Gotify 对"我手机的警报"用例更简单,并能在 Telegram 停机或 RKN 风格阻止中幸存。 |
| vs Pushbullet | Pushbullet 被收购并转型;可靠性和定价现在不确定。Gotify 是自托管答案。 |
常见问题
有 iOS 客户端吗?
消息如何存储?
Token 安全?
Android 上的电池影响?
插件系统 —— 插件能做什么?
备份策略?
Pier 部署什么版本?
相关服务
在你的 VPS 上部署
Gotify 是一个微小的自托管服务器,让任何脚本、应用或警报系统都能用一次 curl 向你的手机发送推送通知。一个 Go 二进制,SQLite 支持,约 15 MB 镜像,原生 Android 客户端。当你想要完全控制和零按消息成本时替换 Pushover/Pushbullet。
部署此服务 →