手把手教你自建 Gotify 推送服务,消息直达 Android 手机
大家好,我是星哥。
在日常运维、脚本监控或者日常折腾中,我们常常需要一种方式,让服务器上的重要信息能实时推送到我们的手机上。
以前大家用得最多的可能是 Server 酱 或者各类第三方 webhook 服务。虽然方便,但总归受制于人:要么有次数限制,要么担心隐私泄露,要么服务不稳定。
“自己的数据,当然要掌握在自己手里。”
今天,星哥就带大家搭建一个开源、轻量、高效的自建消息推送服务——Gotify。它支持 WebSocket 长连接,消息毫秒级直达 Android 手机,而且完全私有化部署。
废话不多说,咱们直接开干!
第一步:服务端部署(CentOS 示例)
Gotify 是基于 Go 语言编写的,单二进制文件运行,非常轻量。这里我们以 CentOS 服务器为例,当然,如果你熟悉 Docker,也可以用 Docker 一键部署,原理相通。
1. 下载并解压
我们选取目前稳定的 v2.9.1 版本(建议去 GitHub 查看最新版)。在服务器终端执行以下命令:
2. 配置文件调整# 下载安装包
wget https://github.com/gotify/server/releases/download/v2.9.1/gotify-linux-amd64.zip
# 解压
unzip gotify-linux-amd64.zip# 赋予执行权限
chmod +x gotify-linux-amd64
直接运行可能会占用 80 端口,容易冲突。我们需要自定义配置文件。
# 下载官方示例配置
wget -O config.yml https://raw.githubusercontent.com/gotify/server/master/config.example.yml编辑 config.yml 文件,主要修改以下几点:
• 端口设置 :默认改为
9080(避免与 Nginx 或其他服务冲突)。• 数据库 :默认使用 SQLite,适合个人使用,无需额外安装 MySQL/Postgres。
• 默认管理员账号 :初始化时会创建,记得修改默认密码,安全第一!
port: 9080
database:
dialect: sqlite3
connection: data/gotify.db
defaultuser:
name: admin
pass: your_strong_password # ⚠️ 务必修改为强密码3. 启动服务./gotify-linux-amd64此时,服务已在后台运行,监听本地的 9080 端口。
第二步:配置 Nginx 反向代理(推荐 HTTPS)
为了安全和方便访问,强烈建议通过 Nginx 进行反向代理,并配置 HTTPS 证书。
1. Nginx 配置示例
在你的 Nginx 配置文件中(通常在 /etc/nginx/conf.d/ 下),添加如下配置:
upstream gotify {
server 127.0.0.1:9080;
}
server {
listen 443 ssl http2; # 建议使用 HTTPS
server_name push.yourdomain.com; # 替换为你的域名
# SSL 证书配置(略,请自行配置 cert 和 key)
location / {
proxy_pass http://gotify;
proxy_http_version 1.1;# ⚠️ 关键配置:支持 WebSocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
# 保持连接超时时间
proxy_connect_timeout 1m;
proxy_send_timeout 1m;
proxy_read_timeout 1m;
}
}
星哥提示:Upgrade 和 Connection 头信息至关重要,因为 Gotify 依赖 WebSocket 进行实时通信,缺少这两行会导致消息无法实时推送。2. 重启 Nginx
nginx -t && systemctl reload nginx第三步:Android 客户端连接服务端搞定后,我们需要在手机上安装客户端来接收消息。
1. 下载 App : 前往 GitHub Release 页面下载 Android 客户端: Gotify Android Releases https://github.com/gotify/android/releases
2. 登录配置:
• 打开 App,输入你的服务器地址(例如:
https://push.yourdomain.com)。• 输入之前配置的
admin用户名和密码。• 点击登录,如果显示绿色连接状态,说明成功!
为了区分不同来源的消息(比如一个是监控报警,一个是博客评论通知),我们需要在 Gotify 网页端创建“应用”。
1. 获取 Token
1. 浏览器访问你的 Gotify 地址,登录后台。
2. 点击左侧菜单 APPS -> CREATE APPLICATION 。
3. 填写名称(如 "My Server"),点击创建。
4. 复制生成的 Token ,这串字符是你发送消息的钥匙,妥善保管!
我们可以用 curl 命令测试一下是否通畅。假设你的 Token 是 CDfn-FD5Ba5nTyJ:
curl -H "Accept: application/json" \
-H "Content-type: application/json" \
-X POST \
-d '{"title": "星哥测试", "message": "这是一条来自自建服务的推送消息!", "priority": 5}' \
"https://push.yourdomain.com/message?token=CDfn-FD5Ba5nTyJ"查看手机: 如果一切正常,你的 Android 手机应该会立刻弹出一条通知,标题是“星哥测试”,内容是“这是一条来自自建服务的推送消息!”。
星哥点评与注意事项
✅ 优点:
• 完全私有 :数据不经过第三方,隐私安全。
• 实时性强 :基于 WebSocket,比轮询接口省电且即时。
• 轻量级 :资源占用极低,老旧服务器也能跑。
⚠️ 潜在坑点:
• Android 后台保活 :这是所有安卓推送的通病。如果 Gotify App 被系统杀后台,消息可能收不到。建议在手机设置中,将 Gotify 设为“允许后台活动”、“忽略电池优化”,并锁定后台任务。
• iOS 支持 :目前 Gotify 官方没有 iOS 客户端(因为 iOS 对后台推送机制限制严格,通常需要 APNs 支持)。iOS 用户可以考虑配合 Bark 等其他方案,或者仅作为 Web 端查看。
自建服务虽然前期需要一点配置成本,但换来的是长期的稳定和对数据的掌控感。对于喜欢折腾的技术爱好者来说,Gotify 绝对是一个值得加入工具箱的神器。
如果你在部署过程中遇到问题,或者有更好的推送方案欢迎交流!
觉得文章有用? 欢迎点赞、在看、转发,支持星哥继续分享更多硬核技术干货!
热门跟贴