Notifo 介绍与选型指南

Notifo 多渠道通知服务器介绍与选型:架构与六大核心概念、多渠道订阅/偏好/摘要回执等实测特性,以及与 Gotify、ntfy 的量化对比,基于 1.3.0 实测取证。

NotifoNotifo通知自托管2026/10/30

Notifo 介绍与选型指南

目标:讲清 Notifo 是什么、为谁设计、核心能力与边界,并与 Gotify、ntfy 等同类自托管通知组件做量化对比,帮助读者在 5 分钟内完成「是否选它」的判断。本文为认知篇,信息来自官方仓库与官方文档的联网溯源,结合本地 Notifo 1.3.0 的容器化实测取证(查询/实验日期 2026-10-30),未混入无法复现的主观结论。

一、环境信息

项目内容
软件名称Notifo
一句话定位开源自托管的多渠道通知服务器(Multi channel notification service)
官方仓库https://github.com/notifo-io/notifo(2026-10-30 实查)
当前最新稳定版1.3.0(GitHub Releases 发布于 2022-11-30,截至 2026-10-30 仍为最新正式版)
开源许可MIT License(仓库 LICENSE 文件)
社区热度GitHub Stars 883(2026-10-30 实查)
官方文档https://notifo.io 与 docs.notifo.io(self-hosting / configuration / architecture)
技术栈后端 C# / ASP.NET Core 7(容器内运行时 DOTNET_VERSION=7.0.0,实测 docker inspect 确认),存储 MongoDB
官方镜像squidex/notifo:1.3.0(Docker Hub,镜像内健康检查 curl -f http://localhost:5000/healthz,实测确认)
在线演示官方文档提供 demo 站入口(https://demo.notifo.io)

💡 说明:Notifo 与 Squidex(同作者的内容管理系统)同源,镜像命名空间为 squidex/notifo,代码仓库在 notifo-io 组织下,选型与部署时以官方 Docker Hub 镜像为准。

二、软件概述

Notifo 是一个自托管(self-hosted)的多渠道通知服务器:你的业务后端把「事件」发布给 Notifo,Notifo 按照每个用户的订阅关系与个人偏好,把这条通知分发到合适的一个或多个渠道——Email、Web Push(浏览器推送)、Mobile Push(FCM/APNs)、SMS、Webhook、站内消息(Messaging)等。仓库 README 对它的定位是「Multi channel notification service for collaboration tools, e-commerce, news service and more」。

它的核心概念只有六个,理解了这六个词就理解了 Notifo:

概念含义实测要点(1.3.0)
App(应用)通知的隔离单元,一个业务系统一个 App,自带若干 API Key创建 App 后返回 4 把按角色(Admin/WebManager)预设的 API Key
User(用户)收通知的人,带邮箱、手机号、语言、时区,每人生成一把用户级 API Key通过 API 批量 upsert,实测创建后立即可用
Topic(主题)层级化发布主题,如 books/novels、releases/v130实测单级(solo)与多级主题均可订阅与发布
Subscription(订阅)用户对某个主题前缀的订阅关系,可按渠道覆写发送设置订阅接口返回 204 空体,落库后按前缀匹配
Channel(渠道)通知的出口:email / web / mobilepush / sms / webhook / messaging实测一条通知在 channels 字段里逐渠道给出 Handled/Skipped 状态
Integration(集成)每个渠道的发送配置(如 SMTP 服务器、Twilio 凭据),按 App 启用实测 SMTP 集成配置后状态即时变为 Verified

与「把消息发到群机器人」的 Webhook 通知类工具不同,Notifo 管理的是面向最终用户的通知体系:谁订了什么、用什么渠道收、要不要延迟/合并成摘要、看没看过、送没送达,都有完整的模型与回执。如果你的场景是「给我自己发运维告警」,Notifo 偏重;如果是「给我的产品用户发通知」,Notifo 正中靶心。

三、核心架构

Notifo 1.3.0 的架构在同类组件中属于「单体但分层清晰」的一类,以下为官方架构文档与本地实测(容器内 MongoDB 集合清单、健康检查输出)交叉归纳:

层技术说明
Web 服务ASP.NET Core 7(Kestrel)容器内监听 5000 端口(ASPNETCORE_URLS=http://+:5000),宿主映射自定义(本系列实验用 8151)
管理界面内置 SPA Dashboard与 API 同端口,登录后可视化配置 App/用户/订阅/模板/集成/日志
存储MongoDB(必选)官方唯一支持的存储后端;默认库名 Notifications(appsettings 定义,实测库表 Apps/Users/Subscriptions/Notifications/Topics 均在该库)
队列与调度内置 Scheduler(默认)appsettings messaging:type 支持 Scheduler / RabbitMQ / Kafka / Google PubSub;内置模式下 Mongo 中可见 Queue_events、Scheduler_email 等集合,实测发布到分发约 1~4 秒
实时通道SignalRWeb 端实时通知由 SignalR 承载(web:signalR:enabled 默认开启),多实例部署需配 sticky session 或降级为轮询
渠道集成插件式 IntegrationEmail(SMTP/Mailjet/Amazon SES)、SMS(Twilio/MessageBird)、Mobile Push(FCM/APNs)、Webhook 等按 App 启用
健康检查/healthz、/ping/healthz 返回含 GC 堆内存的 JSON(超过 diagnostics:gc:threshold 默认 8192MB 判定不健康,实测输出原文保留该描述)
API 规范OpenAPI运行实例直接暴露 /api/openapi.json 与 /swagger/v1/swagger.json(实测可拉取),接口即文档

💡 技术拓展:Notifo 把「事件 → 通知」的 fanout 做在服务内部:POST /api/apps/{appId}/events 接收发布请求后先落 Queue_events 队列,由调度器计算订阅者并写入 Notifications 集合,再按渠道入 Scheduler_email、Scheduler_webpush 等调度集合逐渠道投递。实测日志接口会把「Event has no subscriber.」这类投递结果记到 App 级系统日志里,排障时先看这里。

四、功能特性

以下特性清单逐项经过官方文档核对或本地 1.3.0 实测验证(标注「实测」的条目均有 API 回显留存):

  1. 多渠道分发:Email、Web Push、Mobile Push(FCM/APNs)、SMS、Webhook、Messaging(应用内消息),一条通知可同时走多渠道并分别记录状态(实测:同一通知 email 与 web 双渠道均为 Handled)。
  2. 层级主题 + 前缀订阅:主题按 / 分层,用户按前缀订阅(实测订阅 releases/v130 后收到该主题通知;单级 solo 亦可)。
  3. 每用户渠道偏好:用户级与订阅级均可按渠道设置 send(Send/NotSending)、condition、delay、专属模板(实测 user settings 与 subscription topicSettings 字段结构一致)。
  4. 模板系统:Email(HTML/文本双格式)、Messaging、SMS 模板,按 code 组织、按语言存放(LocalizedText),支持渲染预览接口(实测 /email-templates/render 与 preview 端点存在于 OpenAPI)。
  5. 邮件摘要(Email Digest):一段时间内多条通知合并为一封摘要邮件(实测 Mailhog 收到主题为「Your notifications from demo」的合并邮件,正文逐条列出通知标题与内容)。
  6. 发送调度与控制:Publish 请求支持 scheduling(延迟/每日定时)、silent(静默)、test(走测试集成)、timeToLiveInSeconds(实测 PublishDto 字段表来自运行实例 OpenAPI)。
  7. 送达回执与已读跟踪:每条通知返回 trackDeliveredUrl / trackSeenUrl(实测原文返回),通知列表实时呈现每渠道 Handled/Skipped 状态与首达/首读时间。
  8. 多语言与时区:用户带 preferredLanguage / preferredTimezone,通知文本按语言键(如 en)选取(实测 /api/me 返回服务端支持的 400+ 时区与语言清单)。
  9. 白名单主题:用户可开启 requiresWhitelistedTopics,仅允许订阅管理员预设的 AllowedTopics(实测字段存在于用户对象)。
  10. 完整 API 与 SDK:全部能力 API 化(apps/users/subscriptions/topics/notifications/integrations/templates/logs/media/system-users/me),官方提供 JS SDK 并内嵌「通知中心」组件;API Key 与 OAuth client_credentials 双认证体系(实测均可用)。

五、快速开始

最小可用部署只需要三个容器:Notifo 主服务 + MongoDB + 一个本地 SMTP 模拟器(Mailhog,用于验证邮件渠道)。核心步骤:

# 1. 准备 docker-compose.yml(完整文件见部署篇),拉起服务
docker compose up -d

# 2. 等待健康检查通过(start_period 60 秒)
curl http://localhost:8151/healthz

# 3. 浏览器打开 http://<服务器IP>:8151
#    用初始管理员 admin@notifo.io / Q1w2e3r4! 登录(由环境变量 IDENTITY__USERS__0__* 定义)

登录后在 Dashboard 创建第一个 App,配置 SMTP 集成指向 Mailhog(主机名 notifo-mailhog、端口 1025),即可通过 API 发布第一条通知并看到邮件落袋。完整的命令级全流程(含 API 创建 App/用户/订阅/发布/收信验证)见《Notifo v1.3.0 Docker Compose 部署指南》与《Notifo v1.3.0 API 使用详解》。

六、适用场景与限制

适合用 Notifo 的场景:

  • 电商、协作工具、内容平台的站内/邮件/推送统一通知中心:用户订阅关系、偏好开关、免打扰、摘要合并都是原生能力;
  • 需要用户自选通知渠道的产品:每用户每渠道的 send/condition/delay 模型开箱即用;
  • 需要多语言通知的国际化产品:LocalizedText 按语言键存储与渲染;
  • 需要通知回执闭环的系统:送达/已读跟踪 URL 与渠道级状态开箱即得。

选型前要想清楚的限制:

  • 必须 MongoDB:不支持 SQLite/Postgres 等轻量存储,小内存 VPS 上要额外承担 MongoDB 的资源开销(实测 Notifo 单容器常驻内存约 450MB);
  • 版本节奏慢:1.3.0(2022-11-30)截至 2026-10-30 仍是最新正式版,安全更新与新渠道集成基本停滞,选型时应评估自行维护的能力;
  • 邮件渠道需自备发信服务:内置 SMTP/Mailjet/Amazon SES 三种集成,不含 Gmail/腾讯企业邮等开箱配置(SMTP 通用配置即可覆盖);
  • 无原生 IM 渠道:Telegram/Slack/钉钉等需经 Webhook 桥接;
  • 横向扩展门槛:多实例需 Redis clustering + sticky session(或关闭 SignalR 降级轮询)+ 外部消息队列(Kafka/RabbitMQ)。

七、同类选型对比

自托管通知类组件按「给谁发、发到哪、谁说了算」三个维度可以分成两代:第一代是「给我自己发」的消息推送(Gotify、ntfy),第二代是「给我的用户发」的通知中心(Notifo、Novu)。2026-10-30 实查三方官方文档与仓库,量化对比如下:

维度Notifo 1.3.0Gotify v2.xntfy v2.x
定位面向最终用户的多渠道通知中心面向个人/小团队的消息推送HTTP pub/sub 消息推送
开发语言C# / ASP.NET Core 7GoGo
必备存储MongoDB(唯一支持)SQLite(默认)/ MySQL / Postgres文件/内存/SQLite/MySQL/Postgres/TiDB
投递渠道Email、Web Push、Mobile Push(FCM/APNs)、SMS、Webhook、Messaging应用内 WebSocket + Android/iOS 客户端HTTP/WebSocket/SSE + Android/iOS/桌面客户端
邮件能力原生 Email 渠道 + 摘要合并(digest)+ HTML/文本模板无无
用户体系多用户、订阅关系、每用户每渠道偏好、白名单主题单一账号 + client token,无按用户偏好模型匿名 topic + ACL 访问控制,无用户偏好体系
模板系统三类模板(Email/Messaging/SMS)按语言组织,支持预览无无(正文即消息,格式自定义)
回执跟踪送达/已读 URL、渠道级 Handled/Skipped 状态客户端标记已读(应用内)无回执
实时通道SignalRWebSocketWebSocket / SSE / 流式 HTTP
资源占用较高(实测单容器约 450MB + MongoDB)极低(数十 MB)低
认证API Key(应用/用户两级)+ OAuth client_credentialsTokenToken / ACL / TLS
典型用途给产品的最终用户发通知给自己或团队发运维/监控消息给脚本、CI、IoT 设备发消息

选型结论:

  • 要给产品的最终用户建通知体系(订阅、偏好、邮件、推送、回执),或者需要邮件摘要这类「通知管理」能力 → Notifo,代价是必须接受 MongoDB 与较高的资源占用,且需评估项目维护节奏;
  • 只想给自己/小团队发服务器与监控告警,追求一键部署与极低开销 → Gotify;
  • 消息发送方五花八门(脚本/CI/IoT),希望「一个 HTTP PUT 就能把消息送到手机」 → ntfy;
  • 如果服务愿意托管在云端、需要更现代的多渠道编排(工作流、A/B 测试),可以再评估 Novu(SaaS 优先、可自托管,但自托管形态重,依赖组件多),本文不展开。

💡 以上三款均可用 Docker Compose 单机部署,建议按「通知的接收方是谁」做第一刀切分:接收方是「用户的人」选 Notifo,是「自己的手机」选 Gotify/ntfy。

八、参考链接