剪藏#剪藏#星哥玩云

手把手教你自建 Gotify 推送服务,消息直达 Android 手机

2026 年 6 月 3 日1 分钟
分享Twitter / XTelegram微博

手把手教你自建 Gotify 推送服务,消息直达 Android 手机

大家好,我是星哥。

在日常运维、脚本监控或者日常折腾中,我们常常需要一种方式,让服务器上的重要信息能实时推送到我们的手机上。

以前大家用得最多的可能是 Server 酱 或者各类第三方 webhook 服务。虽然方便,但总归受制于人:要么有次数限制,要么担心隐私泄露,要么服务不稳定。

Notion image

“自己的数据,当然要掌握在自己手里。”

今天,星哥就带大家搭建一个开源、轻量、高效的自建消息推送服务——Gotify。它支持 WebSocket 长连接,消息毫秒级直达 Android 手机,而且完全私有化部署。

Notion image

废话不多说,咱们直接开干!

第一步:服务端部署(CentOS 示例)

Gotify 是基于 Go 语言编写的,单二进制文件运行,非常轻量。这里我们以 CentOS 服务器为例,当然,如果你熟悉 Docker,也可以用 Docker 一键部署,原理相通。

1. 下载并解压

我们选取目前稳定的 v2.9.1 版本(建议去 GitHub 查看最新版)。在服务器终端执行以下命令:

JAVASCRIPT
# 下载安装包
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

2. 配置文件调整

直接运行可能会占用 80 端口,容易冲突。我们需要自定义配置文件。

JAVASCRIPT
# 下载官方示例配置
wget -O config.yml https://raw.githubusercontent.com/gotify/server/master/config.example.yml

编辑 config.yml 文件,主要修改以下几点:

  • 端口设置:默认改为 9080(避免与 Nginx 或其他服务冲突)。

  • 数据库:默认使用 SQLite,适合个人使用,无需额外安装 MySQL/Postgres。

  • 默认管理员账号:初始化时会创建,记得修改默认密码,安全第一!

JAVASCRIPT
port: 9080
database:
  dialect: sqlite3
  connection: data/gotify.db
defaultuser:
  name: admin
  pass: your_strong_password  # ⚠️ 务必修改为强密码

3. 启动服务

JAVASCRIPT
./gotify-linux-amd64

此时,服务已在后台运行,监听本地的 9080 端口。

第二步:配置 Nginx 反向代理(推荐 HTTPS)

为了安全和方便访问,强烈建议通过 Nginx 进行反向代理,并配置 HTTPS 证书。

1. Nginx 配置示例

在你的 Nginx 配置文件中(通常在 /etc/nginx/conf.d/ 下),添加如下配置:

JAVASCRIPT
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;
  }
}

星哥提示UpgradeConnection 头信息至关重要,因为 Gotify 依赖 WebSocket 进行实时通信,缺少这两行会导致消息无法实时推送。

2. 重启 Nginx

JAVASCRIPT
nginx -t && systemctl reload nginx

第三步:Android 客户端连接

服务端搞定后,我们需要在手机上安装客户端来接收消息。

    1. 下载 App: 前往 GitHub Release 页面下载 Android 客户端: 👉 Gotify Android Releases https://github.com/gotify/android/releases
    1. 登录配置:
  1. • 打开 App,输入你的服务器地址(例如:https://push.yourdomain.com)。• 输入之前配置的 admin 用户名和密码。• 点击登录,如果显示绿色连接状态,说明成功!

第四步:创建应用并测试推送

为了区分不同来源的消息(比如一个是监控报警,一个是博客评论通知),我们需要在 Gotify 网页端创建“应用”。

1. 获取 Token

    1. 浏览器访问你的 Gotify 地址,登录后台。
    1. 点击左侧菜单 APPS -> CREATE APPLICATION
    1. 填写名称(如 "My Server"),点击创建。
    1. 复制生成的 Token,这串字符是你发送消息的钥匙,妥善保管!

2. 模拟发送消息

我们可以用 curl 命令测试一下是否通畅。假设你的 Token 是 CDfn-FD5Ba5nTyJ

JAVASCRIPT
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 绝对是一个值得加入工具箱的神器。

如果你在部署过程中遇到问题,或者有更好的推送方案欢迎交流!

觉得文章有用? 👇 欢迎点赞、在看、转发,支持星哥继续分享更多硬核技术干货!

原文地址: https://mp.weixin.qq.com/s?__biz=MzU0NDc0MTAyMg==&mid=2247491452&idx=1&sn=58d5b54b326b61c9c20e42306d3e16e3&chksm=faf70714a8b5ab6457b2e11720437e722f836c967184a9dc79adc7f4351c38fd3618ff95a76b&mpshare=1&scene=1&srcid=0603hmzvpIANzYuyWbuugUJi&sharer_shareinfo=1e9b5e8e34b7822c51cfe6c6b266e02f&sharer_shareinfo_first=1e9b5e8e34b7822c51cfe6c6b266e02f#rd

相关文章