Gotify:开源自托管实时消息推送服务部署与使用指南
Gotify 是一个用 Go 编写的极简服务端,专门用来「发送与接收消息」:服务端提供 REST API 推消息,客户端通过 WebSocket 实时收消息,并自带一套 Web 管理界面与 Android App。它完全自托管、不依赖任何第三方推送渠道,非常适合把服务器告警、CI/CD 通知、脚本结果等主动推到自己的手机上,而不用受制于各类公共推送服务。
一、项目官方信息
| 项目 | 信息 |
|---|---|
| GitHub 仓库 | https://github.com/gotify/server |
| 官方网站 / 文档 | https://gotify.net/docs |
| 开源协议 | MIT |
| 主要语言 | Go(约 69.7%) |
| Star 数 | 16k+ |
| 默认端口 | 80(HTTP) |
| 数据目录 | /app/data(容器内,含 SQLite 数据库与证书) |
注意:仓库名是
gotify/server,但产品名、文档与域名都统一叫 Gotify,本文标题与链接均使用 Gotify。
二、官方图片
Gotify 官方 Logo:

Gotify 自带的 Web-UI 截图(消息列表与应用管理):

三、环境要求
- 操作系统:Linux / macOS / Windows 均可;生产推荐 Linux。
- 运行方式二选一:
- Docker:拉取
gotify/server或ghcr.io/gotify/server镜像(多架构,支持 amd64、i386、arm64、armv7、riscv64,树莓派也能跑); - 原生二进制:从 Releases 下载对应平台 zip(linux-amd64 / linux-arm-7 / linux-arm64 / linux-riscv64 / windows 等)。
- 端口:默认监听 80(HTTP),如需改端口可通过环境变量
GOTIFY_SERVER_PORT调整。 - 持久化目录:必须挂载
/app/data,里面是 SQLite 数据库、应用图片以及开启 Let's Encrypt 后生成的证书,务必备份该目录。 - 权限:二进制方式默认监听 80 端口需要 root(sudo);Docker 方式用端口映射规避。
四、完整部署步骤
方式 A:Docker 部署(官方推荐)
官方安装文档给出的最小启动命令:
docker run -p 80:80 -v /var/gotify/data:/app/data gotify/server
逐段说明:
-p 80:80:把容器 80 端口映射到宿主机 80;-v /var/gotify/data:/app/data:把宿主机/var/gotify/data挂载到容器数据目录,数据库与证书落盘;- 也可改用 GitHub 容器镜像:
ghcr.io/gotify/server。
带时区与默认管理员密码的完整后台运行命令:
docker run -d \
--name gotify \
-p 8080:80 \
-e TZ="Asia/Shanghai" \
-e GOTIFY_DEFAULTUSER_PASS="请改成你的管理员密码" \
-v /var/gotify/data:/app/data \
gotify/server
Gotify 3.x 通过环境变量配置。
GOTIFY_DEFAULTUSER_PASS用来设置首次启动时默认管理员账号admin的密码;GOTIFY_SERVER_PORT可改 HTTP 监听端口(默认 80)。
方式 B:docker-compose 部署
官方文档提供的 docker-compose.yaml 示例:
---
services:
gotify:
image: gotify/server
ports:
- 8080:80
environment:
GOTIFY_DEFAULTUSER_PASS: 'admin'
volumes:
- './gotify_data:/app/data'
# 以专属用户运行时先建目录并授权:
# sudo chown -R 1234:1234 ./gotify_data
# user: "1234:1234"
启动:
docker compose up -d
方式 C:原生二进制部署
到 Releases 页下载对应平台的 zip(把 {VERSION} 换成最新版本号、{PLATFORM} 换成你的平台,如 linux-amd64):
wget https://github.com/gotify/server/releases/download/v{VERSION}/gotify-{PLATFORM}.zip
解压、加执行权限并运行:
unzip gotify-{PLATFORM}.zip
chmod +x gotify-{PLATFORM}
sudo ./gotify-{PLATFORM}
默认监听 80 端口,因此需要 sudo;想改端口可在启动前配置环境变量 GOTIFY_SERVER_PORT。
配置项(Gotify 3.x 环境变量)
GOTIFY_SERVER_PORT:HTTP 监听端口,默认80;GOTIFY_SERVER_LISTENADDR:绑定地址,留空监听所有网卡,可设unix:/tmp/gotify.sock走 Unix 套接字;GOTIFY_SERVER_SSL_ENABLED:是否开启 HTTPS(默认false),开启需配置证书或LETSENCRYPT_ENABLED=true;GOTIFY_SERVER_SSL_REDIRECTTOHTTPS:开启 SSL 后是否把 HTTP 重定向到 HTTPS,默认true;GOTIFY_LOGLEVEL:日志级别,取值 trace/debug/info/warn/error/fatal/panic,默认info;GOTIFY_DEFAULTUSER_PASS:默认管理员admin的初始密码。
配置可写在工作目录的 gotify-server.env,或 /etc/gotify/server.env 中加载。
验证服务
部署完成后浏览器访问 http://服务器IP:8080(或你映射的端口),使用 admin 与上面设置的密码登录,进入后即可看到 Web-UI。
五、使用方法
Gotify 采用「应用(Application)」与「客户端(Client)」两类令牌的模型:
- 创建应用:登录后在 Web-UI 里新建一个 Application(例如命名为
server-alert),系统会为它生成一个应用令牌(Application Token)。 - 推送消息:用应用令牌调用 REST API 推消息:
curl -X POST "http://服务器IP:8080/message?token=应用令牌" \
-F "title=服务器告警" \
-F "message=磁盘使用率已超过 90%" \
-F "priority=5"
- 实时接收:在 Web-UI 或 Android App 里创建一个 Client(客户端令牌),客户端通过 WebSocket 长连接实时收到上面的消息;消息的
priority字段决定在手机上的通知优先级。 - CLI:官方提供
gotify/cli命令行工具,可在脚本里直接发消息;Android App 在 Google Play 与 F-Droid 均可下载。
六、常见问题 FAQ
Q1:默认登录账号密码是什么?
首次启动时会创建默认用户 admin,密码由环境变量 GOTIFY_DEFAULTUSER_PASS 指定(不设置则按文档默认值)。登录后请尽快在设置里修改。
Q2:为什么映射 80 端口后外部访问不到?
默认二进制监听 80 需要 root;Docker 里要确认 -p 映射正确(如 -p 8080:80 则用宿主机 8080 访问),并放行防火墙对应端口。
Q3:容器重建后数据/消息都没了?
说明没有挂载 /app/data。该目录保存 SQLite 数据库、应用图片与证书,务必通过 -v 持久化并纳入备份。
Q4:如何启用 HTTPS / 自己的域名?
设置 GOTIFY_SERVER_SSL_ENABLED=true 并提供证书,或开启内置 Let's Encrypt;Gotify 官方文档也提供了 Nginx、Caddy、Traefik 等反向代理的配置示例。
Q5:消息是实时推送的吗?需要轮询吗? 客户端通过 WebSocket 长连接实时接收,不需要轮询;服务端用 REST API 写入消息后立即推给在线客户端。
Q6:支持多用户 / 多应用吗? 支持在 Web-UI 里管理多个用户、多个应用与多个客户端令牌,每个应用独立令牌,可按来源区分通知。
七、跳转链接
- GitHub 仓库:https://github.com/gotify/server
- 官方文档:https://gotify.net/docs
- 安装指南:https://gotify.net/docs/install
- 配置说明:https://gotify.net/docs/config
- 二进制 Releases:https://github.com/gotify/server/releases