ejabberd 26.09 介绍与选型指南
ejabberd 26.09 联网溯源认知与选型:Erlang/OTP 架构、XMPP+MQTT+SIP 三协议能力、官方安装路径与 Prosody/Rocket.Chat/Zulip/Synapse 量化对比,全部标注来源与查询日期。
ejabberd 26.09 介绍与选型指南
目标:面向正在评估开源即时通信服务端的技术团队,系统介绍 ejabberd 的定位、架构、功能特性与同类横向对比,帮助完成「选不选它」的判断;本篇为认知与选型篇,全部信息基于官方公开资料联网溯源整理,关键数据均标注来源与查询日期(2026-10-21),不含本地实测内容。
一、环境信息
本章说明本篇溯源所用的信息源与版本认定依据,后续章节的事实均以此为基准。
- 溯源方式:纯联网溯源(官方文档站、官方官网、GitHub Releases、官方部署文档),未包含任何本地实测环节;
- 版本认定日期:2026-10-21;
- ejabberd 最新稳定版本:26.09(发布于 2026-09-29);
- 版本认定依据(双源交叉):
- 来源一:GitHub
processone/ejabberd仓库 Releases Atom 流(https://github.com/processone/ejabberd/releases.atom),最新 Release 标题为 26.09,updated时间 2026-09-29T09:36:26Z(查询日期 2026-10-21); - 来源二:ProcessOne 官网下载页(
https://www.process-one.net/download/ejabberd/),页面版本说明中列有 ejabberd 26.09、ejabberd 26.07、ejabberd 26.04 三个近期版本(查询日期 2026-10-21);
- 来源一:GitHub
- 版本号规则:ejabberd 自 24.02 起采用日历版本号(
YY.MM,如 25.10、26.09),即「年份.月份」格式,一年多次发布; - ejabberd 版本节奏(来源:GitHub Releases Atom 流,查询日期 2026-10-21):2026 年已发布 26.01、26.02、26.03、26.04、26.07、26.09,2025 年有 25.04、25.07、25.08、25.10 等,发布密度约为每月至每季度一次。
💡 说明:日历版本号便于判断版本新鲜度——26.09 即 2026 年 9 月版。选择生产版本时建议取最近一个
.MM大版本的最新 patch,并关注其 Release Notes 中的安全修复项。
二、软件概述
2.1 基本信息
ejabberd 是一个用 Erlang/OTP 编写的开源、跨平台、可扩展的实时通信平台,最初于 2002 年发布,是业界历史最悠久、久经生产考验的 XMPP 服务器之一。它不仅仅是一个 XMPP 聊天服务器,还内置了 MQTT 消息代理与 SIP 服务,可以同时承载聊天、IoT 消息与语音信令三类实时流量。
| 项目 | 内容 | 来源(查询日期均为 2026-10-21) |
|---|---|---|
| 软件名称 | ejabberd("Erlang JABBER Daemon" 缩写) | 官网 https://www.ejabberd.im/ |
| 开发与维护方 | ProcessOne(法国公司,自 2002 年起持续维护) | 官网 https://www.process-one.net/ejabberd/ |
| 开源许可 | GPL-2.0(社区版双协议可选项见官方仓库 LICENSE) | GitHub processone/ejabberd 仓库 |
| 编写语言 | Erlang/OTP(部分扩展用 Elixir) | GitHub 仓库与官方 CONTAINER 文档 |
| 最新稳定版 | 26.09(2026-09-29 发布) | Releases Atom 流 + 官网下载页双源 |
| 主协议 | XMPP(RFC 6120/6121)+ 广泛的 XEP 扩展,另含 MQTT、SIP | 官方 CONTAINER 文档首页描述 |
| 平台支持 | Linux、macOS、Windows、BSD、Solaris 等跨平台 | 官网与官方文档站 |
| GitHub Stars | 约 6.7k(processone/ejabberd) | shields.io 星数徽章实时读取 |
💡 说明:GPL-2.0 许可对「以服务形态对外提供、不分发软件」的场景通常无传染压力;若你的业务涉及二次分发修改版,需按 GPL-2.0 开源修改部分。商用支持可采购 ProcessOne 的商业订阅(官网提供 ejabberd 商业版与 surederp 等增值方案)。
2.2 发展脉络与生态位置
ejabberd 诞生于 Jabber 协议(XMPP 前身)社区化浪潮早期,长期作为大规模 XMPP 部署的事实标准之一:WhatsApp 早期架构曾参考并贡献过 Erlang 生态经验,各大运营商与政府机构的自托管聊天系统(如法国 Tchap、德国 BundesMessenger 等基于 Matrix 的系统之外,大量企业内部 XMPP 域)也广泛使用 ejabberd 作为服务端。ProcessOne 官网将其定位描述为「robust, scalable and extensible realtime platform built using Erlang/OTP, that includes XMPP Server, MQTT Broker and SIP Service」(健壮、可扩展、基于 Erlang/OTP 的实时平台,含 XMPP 服务器、MQTT 代理与 SIP 服务),这一描述与官方 CONTAINER 文档一致。
在开源即时通信服务端赛道中,ejabberd 的差异化位置是:标准 XMPP 协议服务端里功能最全、集群能力最成熟的实现之一,同时用 Erlang 天然获得高并发长连接承载能力。
三、核心架构
本章拆解 ejabberd 的架构设计,帮助理解它为什么能在单节点上承载海量长连接、以及它的集群模型如何工作。
3.1 Erlang/OTP 运行时
ejabberd 构建在 Erlang/OTP 虚拟机(BEAM)之上。Erlang 的语言与运行时特性与「即时通信服务器」的工作负载高度契合:
- 海量轻量进程:Erlang 进程调度开销极小,每个 XMPP 会话对应一个或多个轻量进程,单节点可承载数十万级并发长连接;
- 消息传递式并发:进程间不共享内存,通过消息队列通信,避免锁竞争,天然适配「大量独立会话」模型;
- 热代码升级:OTP 支持不停机替换代码,配合 ejabberd 的模块热加载,可在线调整功能;
- 监督树容错:supervisor 层级监控,单个会话进程崩溃不影响整体服务。
这些特性是 ejabberd 官方宣传「scalable from a few to millions of users」(从几个用户扩展到数百万用户)的技术底座(来源:官网与官方文档定位描述,查询日期 2026-10-21)。
3.2 模块化设计
ejabberd 的功能几乎全部由模块(mod_*)承载:核心只负责路由与会话管理,花名册、群聊(MUC)、消息存档(MAM)、推送、vCard 等能力都是可插拔模块,在配置文件的 modules 段声明启停。官方还维护 ejabberd-contrib 社区模块仓库,通过 ejabberdctl module_install <模块名> 在线安装(来源:官方 CONTAINER 文档 ejabberd-contrib 节,查询日期 2026-10-21)。
3.3 存储与集群模型
- 默认存储 Mnesia:Erlang 内置分布式数据库,零外部依赖,开箱即用;
- 关系型数据库支持:可通过
odbc/sql后端切换到 MySQL、PostgreSQL、MSSQL 等,大规模部署推荐外部 SQL; - 原生多节点集群:多个 ejabberd 节点基于 Erlang 分布式协议(EPMD/直连端口)互联,共享同一数据库后端,通过
ejabberdctl join_cluster一条命令把新节点加入集群,无需额外协调件(来源:官方文档 clustering 指南与 CONTAINER 文档 Clustering 节,查询日期 2026-10-21)。
💡 技术拓展:即时通信服务端的「多节点」常见三种形态对比——
形态 原理 代表 适用 无状态分片 + 共享存储 所有节点读写同一数据库,任意节点可服务任意用户 ejabberd(Mnesia 复制或 SQL 后端) 中大规模、需要平滑扩容 联邦(Federation) 多个独立服务器按开放协议互发消息 XMPP s2s、Matrix Server-to-Server 跨组织互通 主从/副本 一主写入、从库容灾 传统数据库式部署 小规模高可用 ejabberd 同时支持前两种:节点间集群(同一域内扩容)与 s2s 服务器联邦(跨域互通,端口 5269),这是它在「自建即时通信基础设施」场景的核心优势。
3.4 接口与端口全景
官方 CONTAINER 文档列出的服务端口全景(来源:官方 CONTAINER.md Ports 节,查询日期 2026-10-21):
| 端口 | 用途 |
|---|---|
| 5222 | XMPP 客户端连接(c2s) |
| 5269 | XMPP 服务器联邦(s2s) |
| 5280 | 管理界面 WebAdmin(HTTP) |
| 5443 | TLS 加密 HTTP:管理界面、REST API、CAPTCHA、OAuth、WebSocket、BOSH |
| 1883 | MQTT |
| 5478/UDP | STUN |
| 50000-50099/UDP | TURN |
| 7777 | SOCKS5 文件传输代理 |
| 4369-4399 | EPMD 与 Erlang 节点互联(ejabberdctl、集群用) |
四、功能特性
以下特性清单以官方文档与 Release Notes 为依据(查询日期 2026-10-21),均属当前稳定版 26.09 的能力范围:
- 完整 XMPP 标准栈:RFC 6120/6121/6122 核心协议,XEP 扩展覆盖面广(MUC 群聊、MAM 消息存档、vCard、离线消息、私信 carbons、阻塞名单、HTTP 文件上传、消息投递回执等),兼容 Conversations、Gajim、Pidgin、Monal 等主流 XMPP 客户端;
- MQTT 代理:内置
mod_mqtt,同时服务 IoT 与消息场景; - SIP 服务:内置
mod_sip,可作 SIP 信令注册与代理,配合语音/视频场景; - 多种认证后端:内部数据库、LDAP、外部脚本、PAM、匿名等,企业已有账号体系可直接对接;
- 多种存储后端:Mnesia(默认)、MySQL、PostgreSQL、MSSQL、Redis(部分数据)、Redis 会话等;
- 原生集群:
join_cluster/leave_cluster命令化操作,节点增减在线完成; - WebAdmin 管理台:HTTP 管理界面(5280/5443),查看节点、账号、群聊、会话等;
- 成熟 API 体系:全部管理命令同时暴露为 ejabberdctl CLI、REST API(mod_http_api)与 XML-RPC 三种形态,便于运维自动化;
- ACME 自动证书:内置 Let's Encrypt ACME 支持,自动申请续期 TLS 证书(26.x 持续增强);
- 全集群消息路由:单节点故障时会话自动重连到其他节点(客户端重连),群聊与 MAM 数据经共享后端全局可见;
- 模块热管理:
ejabberdctl module_install/upgrade/uninstall在线装卸模块,含 ejabberd-contrib 社区仓库。
💡 说明:XMPP 的 XEP(XMPP Extension Protocols)是该协议生态的扩展提案机制,一个服务端对 XEP 的覆盖程度直接决定其客户端兼容性。ejabberd 与 Prosody 是 XEP 覆盖最全的两支实现,这也是「选 XMPP 就在这两者里挑」的行业惯例来源。
五、快速开始(最小可用示例)
本章给出官方文档推荐的最快落地路径,供选型评估做最小验证。本篇为溯源篇,以下命令与流程引自官方文档原文形态并标注来源,未在本地实测;本系列的部署实测篇(B2)与配置实测篇(C1)提供逐命令实测回显。
5.1 Linux 二进制安装器(官方推荐最快路径)
来源:ejabberd 官方文档站 Installation → Binary Installers(https://docs.ejabberd.im/admin/install/binary-installer/,查询日期 2026-10-21)。
官方提供 *.run 自包含二进制安装器:内置精简版 Erlang 运行时,无需单独安装 Erlang,不依赖任何额外软件包,安装后自动落位 /opt/ejabberd/ 并注册 systemd 服务单元。官方文档给出的安装流程(以版本号 YY.MM 代指当前发布版,例如对应 26.09):
# 1. 从官方下载页获取安装包(官方文档原文:https://www.process-one.net/download/ejabberd/)
# 文件名形如 ejabberd-YY.MM-1-linux-x64.run
# 2. 赋予执行权限(官方文档命令形态)
chmod +x ejabberd-YY.MM-1-linux-x64.run
# 3. 执行安装:部署配置、Mnesia 数据库与日志到 /opt/ejabberd/,并注册 systemd 服务
sudo ./ejabberd-YY.MM-1-linux-x64.run
官方文档说明要点:该方式「will deploy and configure a full featured ejabberd server and does not require any extra dependencies」(部署并配置全功能 ejabberd 服务器,无需任何额外依赖),且「Those instructions assume installation on localhost for development purposes」(官方将 run 安装器定位为开发用途快速路径)。
5.2 部署后的最小验证
按官方文档 Next Steps(https://docs.ejabberd.im/admin/install/next-steps/,查询日期 2026-10-21),安装完成后注册管理员账号并验证服务状态:
# 服务状态查看
ejabberdctl status
# 注册管理员账号(域默认 localhost;示例用演示口令,生产请换成强口令)
ejabberdctl register admin localhost q1w2e3r4
# 浏览器打开 WebAdmin(5280 端口)用 admin@localhost 登录
# http://<服务器IP>:5280/admin/
💡 说明:URL 中的
<服务器IP>按你自己的服务器地址替换,这是对读者环境的变量说明而非待填占位。
⚠️ 注意:生产部署务必修改默认 XMPP 域名(
hosts配置项),localhost域仅适用于本机验证;TLS 证书需为真实域名配置,或启用 ACME 自动申请。
5.3 其他官方安装形态
官方同时提供(来源:官方文档站 Installation 章节,查询日期 2026-10-21):
- DEB/RPM 软件包:ProcessOne 提供与 run 安装器内容一致的自包含 DEB/RPM 包(同样内置精简 Erlang,不与系统已有 Erlang 冲突);
- 源码编译:GitHub 源码 +
make,适合需要定制编译选项的场景; - 官方 OCI 部署制品与 Compose 编排:ProcessOne 官方维护
ghcr.io/process-one/ejabberdOCI 部署制品(x64/arm64,稳定版与 master 双通道),并在官方部署文档提供 Minimal/Customized/Clustering 三级 Compose 编排示例——本系列 B2 篇即为该官方主线的逐命令实测版,见 《Docker Compose 部署 ejabberd 指南》。
六、适用场景与限制
6.1 适用场景
结合架构特性与官方定位,ejabberd 最适合以下场景:
- 企业/机构自托管 IM 基础设施:数据完全自持、对接 LDAP 域账号、与现有邮件/OA 域并存;
- 中大规模用户量:单节点十万级并发、多节点集群横向扩展,官方定位覆盖到百万用户级;
- 跨组织互通需求:需要与外部 XMPP 域联邦互通(s2s),或作为开放协议接入层;
- 多协议复用:同一平台同时承载 XMPP 聊天 + MQTT IoT 消息 + SIP 信令,减少组件数量;
- 长连接高并发推送:Erlang 长连接模型适合消息推送、在线状态广播类业务。
6.2 限制与注意
- Web 体验非开箱即用:ejabberd 是协议服务端,自身不含现代 Web 客户端界面(仅 WebAdmin 管理台);要给终端用户网页聊天界面需另配客户端(如自托管 converse.js 一类 XMPP Web 客户端)或选用 Rocket.Chat/Zulip 这类自带 UI 的平台;
- Erlang 人才储备:深度定制模块需要 Erlang/Elixir 能力,团队需评估二次开发成本;
- Mnesia 不适合超大规模:官方文档建议大规模生产切换 SQL 后端,Mnesia 更适合中小规模与开发环境;
- 版本节奏快:日历版本一年多版,升级需跟踪 Release Notes(官方升级文档覆盖 Mnesia/SQL 后端的升级路径)。
七、同类选型对比
本章在开源自托管即时通信赛道内做量化横向对比,对比对象为同赛道的 Prosody IM、Rocket.Chat、Zulip、Synapse 四个常见选项。数据来源与查询日期:各组件官方仓库/官方文档,GitHub 星数经 shields.io 实时读取,查询日期均为 2026-10-21;「协议栈/语言/许可/存储/集群」为各官方仓库与官方文档描述的稳定事实。
7.1 量化对比表
| 维度 | ejabberd 26.09 | Prosody IM | Rocket.Chat | Zulip | Synapse |
|---|---|---|---|---|---|
| 协议/开放标准 | XMPP(XEP 覆盖广)+ MQTT + SIP | XMPP(轻量核心 + 社区模块) | 自有 WebSocket 协议(平台型) | 自有 REST + WebSocket(话题式) | Matrix 开放标准 |
| 开发语言 | Erlang/OTP | Lua | Node.js(Meteor) | Python(Django) | Python(Twisted) |
| 自带 Web 聊天界面 | 否(仅 WebAdmin 管理台) | 否(仅管理界面组件) | 是(完整 Web/App 体验) | 是(完整 Web/App 体验) | 否(服务端,配 Element 客户端) |
| 集群能力 | 原生多节点集群(join_cluster,命令化) | 支持集群(s2s 与组件,成熟度弱于 ejabberd) | 依赖 MongoDB 副本集横向扩展 | 支持多机部署(组件拆分) | Workers 横向扩展(多进程拆分) |
| 外部依赖(最小部署) | 无(内置 Mnesia 零依赖) | 无(Lua + 文件存储即可跑) | MongoDB 必需 | PostgreSQL + RabbitMQ + Redis + Memcached | 测试可用 SQLite,生产推荐 PostgreSQL |
| 资源占用定位 | 低(Erlang 高并发长连接模型,官方定位可达百万用户级) | 极低(官方定位轻量,树莓派可跑) | 较高(Node + MongoDB 栈) | 较高(Python 多组件栈) | 中高(Python,大房间联邦压力大) |
| GitHub Stars | 6.7k | 官方主仓为 Mercurial(hg.prosody.im),GitHub 上无官方同步仓库可比星数 | 46k | 26k | 4.7k |
| 许可 | GPL-2.0 | MIT | MIT(核心,企业功能订阅) | Apache 2.0(核心,企业功能订阅) | AGPL-3.0 |
| 商业支持 | ProcessOne 官方订阅 | Prosody Consulting(核心开发者) | Rocket.Chat 官方订阅 | Zulip 官方云/订阅 | Element 官方订阅 |
7.2 关键差异解读与选型建议
- 按「协议开放性与互通」选:要求开放标准、跨组织联邦、客户端自由(不被平台锁定)——XMPP 阵营(ejabberd/Prosody)或 Matrix 阵营(Synapse)。XMPP 生态客户端成熟且历史长;Matrix 更贴近现代「房间+事件」模型且由 Element 主推。
- 按「开箱即用的聊天体验」选:要终端用户直接可用的现代 Web/移动界面——Rocket.Chat 或 Zulip。其中 Zulip 的「话题式会话」模型适合异步协作密集的团队;Rocket.Chat 更贴近 Slack 式实时频道协作,且版图最广(46k stars)。
- 按「资源与运维成本」选:轻量自托管(低配 VPS、边缘设备)——Prosody 极轻,ejabberd 次之但零外部依赖(内置 Mnesia);Rocket.Chat/Zulip/Synapse 都需要外部数据库/消息件,运维面更宽。
- 按「规模与集群」选:单域十万级以上并发、多节点在线扩缩容——ejabberd 的原生集群模型(Erlang 分布式 + 共享存储,一条命令加节点)在这一档优势明显;Synapse 的 workers 扩展更多用于联邦流量分摊。
- 按「二次开发」选:Lua 定制模块上手快选 Prosody;Erlang/OTP 高并发编程模型选 ejabberd;Python 栈团队可维护 Synapse/Zulip。
- 本平台同系列参考:Zulip 的认知与选型实测报告见 《Zulip 12.3 介绍与选型指南》,可作为「平台型聊天」一侧的对照。
💡 说明:XMPP 服务端选型在 ejabberd 与 Prosody 之间的常见经验线是——小规模/极简/嵌入式选 Prosody,中大规模/功能全/集群/商业支持需求选 ejabberd。两者协议兼容,客户端可通用,迁移成本低。
八、参考链接
以下为本文引用的官方信息源(查询日期均为 2026-10-21):
- ejabberd 官网:https://www.ejabberd.im/
- ProcessOne 官网 ejabberd 产品页:https://www.process-one.net/ejabberd/
- ProcessOne 官网下载页(版本认定来源二):https://www.process-one.net/download/ejabberd/
- GitHub 仓库 Releases(版本认定来源一):https://github.com/processone/ejabberd/releases.atom
- ejabberd 官方文档站 Installation:https://docs.ejabberd.im/admin/install/
- 官方文档 Binary Installer 章节:https://docs.ejabberd.im/admin/install/binary-installer/
- 官方文档 Next Steps(管理员账号):https://docs.ejabberd.im/admin/install/next-steps/
- 官方部署文档 CONTAINER.md(端口、环境变量、集群):https://github.com/processone/ejabberd/blob/master/CONTAINER.md
- 官方 Compose 编排示例仓库 docker-ejabberd:https://github.com/processone/docker-ejabberd
- 官方文档集群指南:https://docs.ejabberd.im/admin/guide/clustering/
- 星数取证:shields.io GitHub Stars 徽章(实时读取,查询日期 2026-10-21)