Gotify 3.1.1 介绍与选型指南
Gotify 3.1.1 联网溯源认知与选型:Go 单二进制自托管推送通知服务的定位、三模型架构、版本演进时间线(2.x→3.x 破坏性变更)与 ntfy/Novu 量化对比,全部标注来源与查询日期 2026-10-21。
Gotify 3.1.1 介绍与选型指南
目标:面向正在评估「自托管推送通知服务端」的技术团队,系统介绍 Gotify 的定位、架构、功能特性、版本演进与同类横向对比,帮助完成「选不选它」的判断。本篇为认知与选型篇,全部信息基于官方公开资料联网溯源整理,关键数据均标注来源与查询日期(2026-10-21),不含本地实测内容;安装、配置与 API 的逐条实测见本专栏《Ubuntu 22.04 安装 Gotify 3.1.1 指南》、《Gotify 3.1.1 配置参数详解》与《Gotify 3.1.1 API 使用详解》。
一、环境信息
本章说明本篇溯源所用的信息源与版本认定依据,后续章节的事实均以此为基准。
- 溯源方式:纯联网溯源(官方文档站 gotify.net、GitHub Releases、shields.io 徽章数据),未包含任何本地实测环节;
- 版本认定日期:2026-10-21;
- Gotify 最新稳定版本:3.1.1(发布于 2026-09-15);
- 版本认定依据(双源交叉):
- 来源一:GitHub
gotify/server仓库 Releases Atom 流(https://github.com/gotify/server/releases.atom),最新 Release 标题为 v3.1.1,updated时间 2026-09-15T18:45:27Z(查询日期 2026-10-21); - 来源二:GitHub
gotify/serverreleases/latest 访问重定向(https://github.com/gotify/server/releases/latest→https://github.com/gotify/server/releases/tag/v3.1.1,查询日期 2026-10-21);
- 来源一:GitHub
- 仓库地址说明:项目原仓库为
gotify/gotify,当前官方仓库为gotify/server(官方文档站 gotify.net 全站链接均指向github.com/gotify/server,查询日期 2026-10-21);Go module 路径自 3.1.0 起为github.com/gotify/server/v3(来源:Release Notes v3.1.0「Update go module path to github.com/gotify/server/v3」); - 社区规模:GitHub 星数 16k(来源:shields.io 徽章接口
https://img.shields.io/github/stars/gotify/server.json返回"message":"16k",查询日期 2026-10-21); - 许可证:MIT License(来源:官方发布包 gotify-linux-amd64.zip 内 LICENSE 文件,"Copyright (c) 2018 jmattheis";另有 GitHub 仓库 LICENSE 声明,查询日期 2026-10-21)。
二、软件概述
本节给出 Gotify 的一句话定位与项目身份信息,回答「它是什么、谁在维护、以什么形式分发」。
Gotify 是一个用 Go 编写的、以单二进制形式分发的自托管推送通知服务端:业务系统、脚本或 AI Agent 通过 REST API 向它推送消息,用户通过内嵌 WebUI 与 Android 客户端实时接收消息(REST 轮询 + WebSocket 流式下发)。它解决的核心痛点是——当你不想把服务器状态、告警、任务结果发到第三方 SaaS 通知服务时,可以在自己的服务器上跑一个纯开源、数据完全自持的通知中枢。
关键身份信息汇总(均标注来源与查询日期):
| 维度 | 事实 | 来源 |
|---|---|---|
| 项目名 | Gotify | 官网 gotify.net |
| 官方仓库 | github.com/gotify/server(原 gotify/gotify) | gotify.net 首页链接,2026-10-21 |
| 实现语言 | Go(go1.26.0 构建) | 发布包 gotify version 构建信息口径;官方仓库 go.mod |
| 许可证 | MIT | 发布包 LICENSE,2026-10-21 |
| 最新稳定版 | 3.1.1(2026-09-15) | Releases Atom 流,2026-10-21 |
| 官方分发形态 | per-platform zip(内含单二进制)+ Docker 多架构镜像 | gotify.net/docs/install,2026-10-21 |
| 支持平台 | linux-amd64 / linux-386 / linux-arm-7 / linux-arm64 / linux-riscv64 / windows-386 / windows-amd64 | gotify.net/docs/install,2026-10-21 |
| 官方客户端 | Android App(gotify/android)+ 服务端内嵌 WebUI;iOS 无官方客户端 | gotify.net 与 GitHub gotify/android,2026-10-21 |
| 数据库 | SQLite(默认,单文件)/ MySQL / PostgreSQL | gotify.net/docs/config,2026-10-21 |
| 部署形态 | 单机服务(非分布式),配置全走环境变量(3.x) | gotify.net/docs/config,2026-10-21 |
💡 说明:Ubuntu/Debian 官方仓库与 PPA 均无 Gotify 的 apt 包,官方安装文档仅提供「per-platform zip 二进制」与「Docker 镜像」两条路径;Alpine 社区仓库收录了 gotify 包(2.9.1-r4,来源:pkgs.alpinelinux.org,查询日期 2026-10-21)。因此在 Ubuntu 服务器上的标准落地方式是「官方 zip 二进制 + systemd 托管」。
三、核心架构
本节从进程形态、数据模型与通信通道三个层面拆解 Gotify 的架构,帮助理解它的能力边界。
3.1 进程形态:单二进制 + 内嵌 WebUI
Gotify 服务端是一个静态编译的 Go 可执行文件(发布包解压后单个 ELF 文件约 40MB),WebUI(React 前端,v2.7.1 起构建链为 Vite,来源:Release Notes v2.7.1「move to vite for building the ui」)以静态资源形式内嵌在二进制中,启动后由同一进程同时提供:
- WebUI 页面:登录、应用/客户端/消息管理,路径
/; - REST API:消息推送与全部管理操作;
- WebSocket 流:
/stream端点,客户端长连接实时接收新消息; - Swagger 文档:
/swagger页面内嵌完整 API 规范。
数据面默认使用 SQLite 单文件数据库,建表、迁移全部自动完成,无需外部数据库即可运行;也可切换到 MySQL / PostgreSQL(3.2 节)。日志在 3.0.0 起切换为 zerolog 结构化输出(来源:Release Notes v3.0.0「Switch logging to zerolog」)。
3.2 数据模型:application / message / client 三模型
Gotify 的权限与消息模型由三个实体构成,这也是它与「topic 制」推送服务最本质的差异:
| 实体 | 含义 | 令牌前缀 | 典型用途 |
|---|---|---|---|
| application(应用) | 消息的发送方身份,如「备份服务器」「监控告警」 | gtfya.(application token) | 每个对接业务系统建一个应用,拿应用令牌推消息 |
| message(消息) | 应用推送的一条通知,含 title / message / priority / extras | — | 消息按应用归属,可分页查询、单条或全部删除 |
| client(客户端) | 消息的接收方身份,如「我的手机」「运维 CLI」 | gtfyc.(client token) | 每个接收设备/程序建一个客户端,拿客户端令牌订阅消息流 |
三个实体之上是 user(用户):一个用户拥有多个应用与多个客户端;管理员用户可管理全部用户。从 3.0.0 起令牌「仅创建时展示一次」(tokens are only shown once),不再明文入库(Release Notes v3.0.0「Don't store tokens in plain text」「API tokens are no longer returned in the GET endpoints」),并在 3.1.1 中进一步要求「创建用户等敏感操作必须使用提权会话」(安全通告 GHSA-phfm-q6fr-wv34)。
3.3 通信通道与认证
- 推送(写):
POST /message,认证使用 application token,支持三种携带形态——Authorization: Bearer <token>请求头、X-Gotify-Key: <token>请求头、?token=<token>查询参数(来源:服务端/swagger内嵌规范 securityDefinitions,2026-10-21 核对); - 订阅(读):
GET /streamWebSocket 长连接,使用 client token 认证,新消息实时帧下发;WebUI 与 Android 客户端即基于该通道; - 管理(读写):application / client / user 全套 CRUD API,认证可使用 client token 或 HTTP Basic 认证(用户名+密码),敏感操作(创建/修改用户、轮换令牌)要求提权会话或 Basic 认证;
- 会话:WebUI 登录(
POST /auth/local/login)签发 HTTP-only 会话 Cookie(3.0.0 起弃用 localStorage 存令牌),登录即创建一个会话客户端,默认提权窗口 1 小时; - 扩展通道:3.x 文档已收录「AI Agents (MCP)」指南——服务端提供 MCP 端点
/mcp(Streamable HTTP 传输),供 Claude Code、VS Code Copilot 等 AI Agent 用send_message工具发通知(来源:gotify.net/docs/mcp,2026-10-21)。注意:该端点当前随 master 分支文档发布,在 3.1.1 稳定版中尚未提供(对 3.1.1 实例请求/mcp返回 404),属于下一版本的能力预告,选型时应以当期 Release Notes 为准。
四、功能特性
本节按「推送能力 → 安全模型 → 运维能力」归纳 Gotify 的功能清单,每项均标注官方来源。
4.1 推送与消息能力
- REST 推送:一条
POST /message即完成推送,消息体支持 title、message(允许 Markdown,禁 HTML)、priority、extras; - 消息优先级:0-10 整数,客户端据此决定打扰程度。Android 官方 App 的映射:0 不通知、1-3 通知栏图标、4-7 图标+声音、8-10 图标+声音+震动;WebUI 对 priority ≥ 4 的消息播放提示音(来源:gotify.net/docs/priority,2026-10-21)。应用可设置 defaultPriority,消息未带 priority 时自动采用;
- 消息 extras:键值对扩展字段,键格式
<顶级命名空间>::[<子命名空间>::]<action>,官方客户端保留client::命名空间,如client::display(Markdown 渲染)、client::notification(点击跳转 URL); - WebSocket 实时流:
/stream端点,ping 周期默认 45 秒(GOTIFY_SERVER_STREAM_PINGPERIODSECONDS),支持按 Origin 白名单限制跨域连接; - 消息管理:按应用维度与全局维度分页查询(limit/since),支持单条与批量删除。
4.2 账户与安全
- 用户体系:多用户隔离,用户各自管理自己的应用与客户端;管理员可增删用户;
- 会话提权(Session Elevation):3.0.0 引入(安全通告 GHSA-3hcj-9m7p-wwm9),创建用户、轮换令牌等敏感操作要求「近期重新认证」的提权会话;3.1.1 将「创建用户」也纳入提权要求(GHSA-phfm-q6fr-wv34);
- 令牌安全:3.0.0 起令牌哈希存储、仅在创建/轮换时展示一次,支持通过
PUT /application/{id}/security主动轮换(需提权); - OIDC 单点登录:3.0.0 引入对 OpenID Connect 身份提供方(Authelia、Dex、Keycloak 等,需支持 PKCE)的登录支持;3.1.0 增加从 OIDC claims 映射管理员身份、
GOTIFY_LOCALAUTH_ENABLED可关闭本地密码认证、GOTIFY_OIDC_AUTO_REDIRECT自动跳转 IdP 等(来源:Release Notes v3.0.0 / v3.1.0); - 公开注册开关:
GOTIFY_REGISTRATION默认 false,可按需开放自注册。
4.3 运维与扩展
- 自动清理:3.0.0 起自动删除长期不活跃的客户端/会话(「Automatically delete inactive clients/sessions」),客户端可设置
expiresAfterInactivitySeconds; - 插件机制:支持以 Go 共享库(.so)形式扩展,服务端按目录扫描加载(
GOTIFY_PLUGINSDIR),WebUI 可启用/禁用/配置插件; - 多数据库:SQLite(默认零依赖)/ MySQL / PostgreSQL,连接串经环境变量切换;
- TLS:内建 HTTPS 监听(证书文件或 Let's Encrypt 自动签发,支持 ACME staging 环境与自定义 directory URL);
- 配置即环境变量:3.0.0 起全面采用环境变量配置(含
_FILE后缀读密钥文件、text-list CSV 语法、json-map JSON 语法),并提供gotify migrate-config子命令把 2.x config.yml 一键转换(来源:Release Notes v3.0.0、gotify.net/docs/config)。
4.4 版本演进时间线
以下时间线取自 GitHub Releases Atom 流(查询日期 2026-10-21),可看出 2026 年的发布节奏约为每季度一个 feature 版本:
| 版本 | 发布日期 | 要点 |
|---|---|---|
| v2.7.3 | 2025-09-21 | Let's Encrypt 证书操作日志与 TLS challenge 修复 |
| v2.8.0 | 2026-01-02 | 应用图片删除、Markdown 内嵌图渲染修复、GORM 升级 |
| v2.9.0 | 2026-02-13 | WebUI「推送消息」对话框、拖拽排序应用 |
| v2.9.1 | 2026-02-28 | MySQL 启动崩溃修复、Go 1.26 |
| v3.0.0 | 2026-07-18 | 大版本:OIDC 登录、会话提权、配置迁移到环境变量(config.yml 弃用)、令牌哈希存储且仅展示一次、新增 CLI(serve/version/migrate-config)、自动清理不活跃客户端 |
| v3.1.0 | 2026-08-27 | GOTIFY_LOCALAUTH_ENABLED、OIDC 管理员映射与按钮命名/自动跳转、插件活跃期崩溃修复 |
| v3.1.1 | 2026-09-15 | 安全修复:创建用户要求提权会话(GHSA-phfm-q6fr-wv34)、Let's Encrypt 请求失败崩溃修复 |
⚠️ 注意:从 2.x 升级到 3.x 是破坏性升级——config.yml 不再被读取,需用
gotify migrate-config转换为环境变量格式;令牌只展示一次的语义也影响既有脚本(若脚本此前依赖 GET 接口回读令牌,需要改造)。
五、快速开始
本节给出官方文档口径的最小可用路径,命令与步骤转述自官方安装文档(来源:gotify.net/docs/install,查询日期 2026-10-21),本篇不做本地实测;完整的 Ubuntu 服务器从零到 systemd 托管的逐命令实测见本专栏《Ubuntu 22.04 安装 Gotify 3.1.1 指南》。
官方安装文档给出的二进制安装路径为「下载对应平台 zip → 解压 → 运行二进制 → 浏览器打开 WebUI」:
- 从
https://github.com/gotify/server/releases/download/v3.1.1/gotify-linux-amd64.zip下载发布包(官方文档 URL 模板gotify-{platform}.zip,替换版本与平台名); - 解压得到单文件可执行程序
gotify-linux-amd64; - 直接运行该程序,服务默认监听 80 端口(3.x 默认值,来源:gotify.net/docs/config 的
GOTIFY_SERVER_PORT=80默认注释); - 浏览器打开
http://<服务器地址>/,首次登录使用初始管理员账号(默认用户名/口令由配置项GOTIFY_DEFAULTUSER_NAME/GOTIFY_DEFAULTUSER_PASS决定,默认均为 admin,仅在首次建库时生效); - 在 WebUI 中创建应用(application)拿到应用令牌,即可从任意业务系统
POST /message推送第一条消息。
💡 说明:3.x 的全部行为(监听端口、数据库、初始账号、TLS、OIDC 等)都通过环境变量配置,可写在 env 文件中由 systemd 的
EnvironmentFile=加载;具体参数逐项说明见本专栏《Gotify 3.1.1 配置参数详解》,REST API 逐条调用与 WebSocket 实测见本专栏《Gotify 3.1.1 API 使用详解》。
六、适用场景与限制
本节给出「什么场景该选/不该选」的边界判断,避免把通知服务错当聊天系统用。
6.1 适用场景
- 运维告警中枢:Zabbix/Prometheus/监控脚本的告警回调统一投递到自托管 Gotify,Android 客户端按 priority 分级提醒;
- CI/CD 与长任务通知:构建结束、备份完成、模型训练收敛等事件推送到值班手机;AI Agent(Claude Code 等)通过 MCP 端点在长任务结束时主动通知(能力随下一稳定版发布);
- 家庭实验室/自托管生态的消息汇聚:家庭服务器上的下载、磁盘、门禁、摄像头事件统一进一个收件箱;
- 多应用隔离的团队通知:每个业务系统一个 application(独立令牌、独立消息流),每个成员一个 client(独立订阅、独立设备),管理员集中审计。
6.2 限制与边界
- 纯「机器到人」通知,不是聊天:消息单向流动(应用 → 用户),没有会话、回执、群组概念;人与人之间的实时沟通应选 XMPP/Matrix 类服务端(同批次的 ejabberd、Synapse 等,参见《ejabberd 26.09 介绍与选型指南》对 IM 服务端的量化对比);
- 单机架构,无内建集群/高可用:官方不提供多节点集群方案,高可用依赖外部手段(反向代理多实例 + 共享数据库的方案官方未给出口径,需自行评估);
- 无内建邮件/短信渠道:Gotify 只做「站内推送」(WebUI/Android/WebSocket),邮件、短信等外部渠道需自行桥接(如经 ntfy/邮件网关转发或自写插件);
- iOS 无官方客户端:官方客户端为 Android App 与 WebUI,iPhone 侧无官方 App;
- 默认配置面向实验:默认监听 80 端口、默认初始账号口令均为 admin,生产部署必须改端口/改口令/上 TLS(或置于反代之后);
- 3.x 配置破坏性变更:从 2.x 升级必须迁移配置并检查依赖「GET 回读令牌」的脚本。
七、同类选型对比
本节把 Gotify 与同类自托管推送/通知组件做量化横向对比。对比对象选型依据:ntfy 是与 Gotify 定位最接近的开源自托管推送服务端(同为 Go 单二进制),Novu 则代表「产品级多渠道通知基础设施」一档,三者合起来覆盖了「轻量通知中枢」从极简到重型的主要选择。
7.1 量化对比表
数据来源与口径:Gotify 版本/星数(GitHub Releases Atom 流、shields.io 徽章,2026-10-21);ntfy 版本取自 binwiederhier/ntfy Releases Atom 流最新条目 v2.32.0、星数 35k(shields.io,2026-10-21);Novu 星数 40k(shields.io,2026-10-21)。语言/部署形态以各自官方文档为准。
| 维度 | Gotify 3.1.1 | ntfy v2.32.0 | Novu |
|---|---|---|---|
| 一句话定位 | 自托管推送通知服务(账户制) | 自托管推送通知服务(topic 制、极简) | 产品级多渠道通知基础设施(in-app/邮件/短信/推送/聊天) |
| GitHub 星数 | 16k | 35k | 40k |
| 许可证 | MIT | Apache-2.0(服务端) | 以其仓库声明为准 |
| 实现语言 | Go,单二进制(约 40MB) | Go,单二进制 | TypeScript/Node.js,多组件编排 |
| 部署重量 | 极轻:单进程 + SQLite 单文件,无外部依赖 | 极轻:单进程 + SQLite | 重:自托管需多个配套服务(消息队列、缓存、数据库等) |
| 消息模型 | 三模型:application/message/client,令牌前缀 gtfya./gtfyc. 区分收发双方 | topic 模型:PUT/POST /<topic> 即推,默认无需账户 | subscriber/workflow 模型:面向终端用户的多渠道触达 |
| 身份与权限 | 多用户 + 角色 + 会话提权 + OIDC 单点登录(3.x) | 匿名推送为默认哲学,可选访问令牌/权限 | 面向产品用户的订阅关系管理 |
| 客户端 | 官方 Android App + 内嵌 WebUI + WebSocket 流 | 官方 Android + iOS App(iOS 经 APNs 中继)、WebSocket/JSON 流、UnifiedPush | Web/移动端 SDK 集成为主,自带收件箱组件 |
| 推送协议 | REST + WebSocket 流 | REST(含纯 PUT 一行推送)+ WebSocket 流 + UnifiedPush | REST + 渠道 Provider 适配器 |
| 存储 | SQLite / MySQL / PostgreSQL | SQLite(消息缓存与访问控制) | MongoDB 等外部存储 |
| TLS/反代 | 内建 HTTPS + Let's Encrypt 自动签发 | 内建 TLS,官方反代指南 | 通常置于反代后 |
| 适合谁 | 要「多应用多设备账户制通知中枢」的个人/小团队 | 要「一行 curl 推手机」的脚本/IoT/极客场景 | 要「产品内通知中台」的研发团队 |
7.2 选型建议
- 如果你要的是「自持数据的多应用通知中枢」:每个业务系统有独立身份、每个设备有独立订阅、有 WebUI 管理面和用户体系——选 Gotify。它是三者中「账户制通知中枢」形态做得最纯粹的一个。
- 如果你要的是「脚本一行命令推到手机」:不想要账户体系、IoT 设备只想
curl -d "msg" ntfy.sh/topic——选 ntfy。它的 topic 匿名模型和 UnifiedPush 生态是独有优势,官方 iOS App 也是三者中唯一覆盖 iOS 的。 - 如果你要的是「产品里的通知中台」:一次事件要同时触达站内收件箱、邮件、短信、多个推送通道,并要工作流/去重/多语言模板——选 Novu,代价是自托管栈明显变重。
- 如果你要的是「人与人的聊天」:Gotify/ntfy/Novu 都不合适,应看 XMPP(ejabberd/Prosody)、Matrix(Synapse)或团队聊天(Rocket.Chat/Zulip)等服务端。
💡 说明:ntfy 与 Gotify 并不互斥。常见组合是把 Gotify 作为「账户制收件箱」,把 ntfy 作为「匿名快速通道」,监控告警按敏感级别分流;两者同为 Go 单二进制,运维成本叠加很低。
八、参考链接
- 官方网站与文档:https://gotify.net/ (安装:https://gotify.net/docs/install ;配置:https://gotify.net/docs/config ;优先级:https://gotify.net/docs/priority ;systemd:https://gotify.net/docs/systemd ;MCP:https://gotify.net/docs/mcp )
- 官方仓库与发布:https://github.com/gotify/server (Releases:https://github.com/gotify/server/releases )
- Android 客户端:https://github.com/gotify/android
- 版本与星数取证:GitHub Releases Atom 流
https://github.com/gotify/server/releases.atom、shields.iohttps://img.shields.io/github/stars/gotify/server.json(查询日期 2026-10-21) - 同类对比取证:ntfy 仓库 https://github.com/binwiederhier/ntfy (Releases Atom 流,最新 v2.32.0,2026-10-21);Novu 仓库 https://github.com/novuhq/novu (shields.io 星数 40k,2026-10-21)
- 本专栏实测篇(逐命令回显):《Ubuntu 22.04 安装 Gotify 3.1.1 指南》、《Gotify 3.1.1 配置参数详解》、《Gotify 3.1.1 API 使用详解》。