Prosody IM 13.0.7 介绍与选型指南

Lua 编写的轻量级 XMPP 服务器 Prosody IM 全景认知:架构与模块体系、功能特性、官方安装路径指引,并与 ejabberd 26.09 量化选型对比,全部溯源官方渠道并标注查询日期 2026-10-21。

Prosody IM即时通信Prosody IM2026/10/21

Prosody IM 13.0.7 介绍与选型指南

目标:面向需要在自有服务器上搭建 XMPP 即时通信服务的读者,介绍 Lua 编写的轻量级 XMPP 服务器 Prosody IM 的定位、架构、功能与同类选型对比。本文所有版本、发布节奏、功能与生态信息均溯源自官方站点 prosody.im 及其文档/模块站(查询日期:2026-10-21),不含本地实测结论;部署与命令实测见本专栏后续篇章。

一、环境信息

本文为 A1 认知篇,内容来源与取证方式如下:

  • 官方主站:prosody.im(首页、/download、/download/package_repository、/doc/release),查询日期 2026-10-21;
  • 官方模块站:modules.prosody.im(社区模块目录),查询日期 2026-10-21;
  • 官方博客:blog.prosody.im(版本发布公告),查询日期 2026-10-21;
  • 对比对象:ejabberd(process-one.net 官方站与博客),查询日期 2026-10-21;
  • 当前最新稳定版:Prosody 13.0.7(2026-09-24 发布,来源:prosody.im 首页 Latest News 与 blog.prosody.im/prosody-13.0.7-released/);
  • 旧稳定分支:0.12.x(该分支最新为 0.12.6,2026-05-01 发布,仅维护修复)。

💡 说明:Prosody 版本号自 13.0 起改为「主版本.次版本.修订号」形态,13.0.x 为当前主线;0.12.x 为上一长期分支,官方仍持续发布维护版本。

二、软件概述

Prosody IM(下文简称 Prosody)是一个用 Lua 语言编写的开源 XMPP(Jabber)即时通信服务器,官方对其的定位描述为「简单、可扩展的 XMPP 服务器」,目标是「易于使用,且对资源占用轻」(官方站点与 FreeBSD ports 描述一致:"Simple extensible XMPP server written in Lua… easy to use, and light on resources",查询日期 2026-10-21)。

XMPP(Extensible Messaging and Presence Protocol,前身为 Jabber)是 IETF 标准化的开放即时通信协议。 Prosody 官方对 XMPP 的价值表述为:「XMPP 是商业即时通信服务的开放免费替代——为公司、组织或家人朋友搭建,通信完全由自己掌控;你的 Prosody 还可以与其他 Prosody 或 XMPP 兼容服务互联,形成开放的通信网络」(来源:prosody.im 首页,查询日期 2026-10-21)。

核心身份信息汇总:

项目内容来源
软件名称Prosody IMprosody.im
开发语言Lua(运行时 Lua 5.2/5.3/5.4,13.x 不再兼容 Lua 5.1)prosody.im/doc/depends#lua
许可证MIT/X11(宽松许可)prosody.im("open-source software under the permissive MIT/X11 license")
当前稳定版13.0.7(2026-09-24 发布)prosody.im Latest News
旧稳定分支0.12.x(最新 0.12.6)prosody.im/doc/release
协议XMPP(含 c2s/s2s/HTTP 绑定等)prosody.im/doc
包仓库packages.prosody.im(Debian/Ubuntu 官方专用仓库)prosody.im/download/package_repository
社区模块448 个(modules.prosody.im 目录计数)modules.prosody.im 首页 "List of 448 modules"

💡 技术拓展:XMPP 服务器的「服务器间互联(s2s,server-to-server)」是 XMPP 区别于多数私有 IM 协议的显著特征——不同域名下的 XMPP 服务器可以通过 s2s 互相通信(userA@a-server 与 userB@b-server 直接互发消息),类似邮件系统的 SMTP 联邦模型。除联邦模式外,业界同类自托管 IM 还有以下路线对比:

路线代表产品特点适用场景
XMPP 联邦Prosody、ejabberd开放协议、跨服务器互联、客户端生态广组织内外均需开放互通
Matrix 联邦Synapse、Dendrite房间态复制联邦、内置 E2EE强联邦+端到端加密诉求
私有协议自托管Rocket.Chat、Zulip协议私有、功能集成度高、不联邦团队内部协作平台
轻量推送/通知Gotify、ntfy单向通知为主,非完整聊天设备通知场景

本文主角 Prosody 属于「XMPP 联邦」路线中的轻量级实现;同赛道重量级实现 ejabberd 的介绍与选型见 《ejabberd 26.09 介绍与选型指南》,Matrix 路线见 《Synapse/Element v1.163.0 介绍与选型指南》。

三、核心架构

以下架构信息溯源自官方文档站 prosody.im/doc(查询日期 2026-10-21)。

3.1 进程与运行时模型

Prosody 是单一守护进程的 XMPP 服务器,运行在 Lua 解释器之上(官方包在 Debian/Ubuntu 上依赖 lua5.4/lua5.3/lua5.2 之一,13.x 起明确不再兼容 Lua 5.1)。其网络层基于 libevent 式的事件循环(可选 lua-event 提升并发能力),所有协议处理以「模块」为单位挂载在服务内部。

3.2 模块化体系

Prosody 的一切功能围绕模块展开,官方将模块分为两类:

  • 核心发行模块:随主包发布,位于 plugins 目录,在配置文件 modules_enabled 列表中按需启用。默认配置即启用约 25 个基础模块(disco、roster、saslauth、tls、carbons、smacks、pep、register、admin_adhoc、admin_shell 等,来源:官方默认 prosody.cfg.lua 注释与 /doc 页);
  • 社区模块:托管于 modules.prosody.im,截至 2026-10-21 共 448 个(首页标注 "List of 448 modules"),涵盖 XEP 扩展、系统集成、日志导出等场景,支持通过 prosodyctl plugins install 从官方社区模块仓库安装。

3.3 协议与端口布局

按官方文档,Prosody 的标准端口布局如下:

端口用途说明
5222c2s(客户端到服务器)XMPP 客户端连接,默认要求 STARTTLS 加密
5269s2s(服务器到服务器)跨服务器联邦互联
5280/5281HTTP 服务BOSH(XEP-0124)、WebSocket(XEP-0206)、HTTP 管理接口等,由 mod_http 提供
5347组件端口外部 XMPP 组件(Component)接入

3.4 存储体系

Prosody 的数据存储采用「存储驱动(storage backend)+ 数据类型」双层模型(来源:prosody.im/doc/storage):

  • 内置驱动:internal(默认,纯 Lua 实现的文件存储)、sql(经 LuaDBI 支持 SQLite3/MySQL/PostgreSQL);
  • 数据类型:账号、花名册(roster)、vCard、离线消息、消息归档(MAM)、PubSub 节点等可分别指定驱动;
  • 归档生命周期:archive_expires_after 控制消息归档保留期(13.x 默认配置示例为 1 周)。

3.5 管理面

Prosody 提供三条官方管理通道(来源:prosody.im/doc):

  1. prosodyctl 命令行:服务控制、账号管理、证书生成、健康检查(prosodyctl check)等;
  2. prosodyctl shell:13.x 内置管理外壳(mod_admin_shell),可在不进服务进程的情况下执行管理命令;
  3. ad-hoc 命令:mod_admin_adhoc 允许管理员从支持 ad-hoc 的 XMPP 客户端直接下发管理指令。

四、功能特性

以下特性清单溯源自官方首页与文档站(查询日期 2026-10-21):

  • 协议标准覆盖:完整实现 XMPP 核心服务能力——账号认证(SASL:SCRAM-SHA-1、PLAIN、OAUTHBEARER 机制在默认 features 中通告)、花名册、状态(presence)、单聊、群聊(MUC,XEP-0045)、离线消息、消息归档(MAM)、vCard4 用户资料、多端同步(Carbons,XEP-0280);
  • 连接可靠性:SMACKS 流恢复(XEP-0198)、CSI 移动端流量优化(csi_simple)、移动推送(cloud_notify,配合社区模块可对接 APNs/FCM);
  • 安全能力:c2s/s2s 全程 TLS(13.x 默认 c2s 宣告 STARTTLS <required/>)、s2s_secure_auth 严格服务器间认证、内置账号封锁(blocklist)、邀请注册体系(invites/invites_register/invites_adhoc,默认启用);
  • 联邦互通:与任意 XMPP 服务器(含其他 Prosody、ejabberd 等)s2s 互联,dialback 与直连证书验证双机制;
  • 语音/视频:Jitsi Meet 官方使用 Prosody 作为其会议信令服务器(来源:prosody.im 首页 Featured users 列出 Jitsi Meet 徽标),MUC/Jingle 相关模块可作为音视频信令后端;
  • HTTP 绑定:BOSH 与 WebSocket 双通道(web 客户端接入),HTTP 文件服务与上传(配合社区模块 mod_http_upload 等);
  • 外部组件接入:标准 XMPP Component 协议(5347 端口),可挂接传输网关、机器人、外部 MUC 服务;
  • 发布节奏:官方 Latest News 显示 13.0.x 线 2026 年内已发布 13.0.2(2025-05-29)→ 13.0.3(2026-01-05)→ 13.0.4(2026-01-25)→ 13.0.5(2026-04-29)→ 13.0.6(2026-05-27)→ 13.0.7(2026-09-24),约 1-4 个月一个维护版;旧线 0.12.6 于 2026-05-01 同步维护。

💡 说明:Prosody 亦是 Snikket 项目(面向中小组织的开箱即用 XMPP 套件)的底层服务器(来源:prosody.im 首页 Featured users)。若目标是「装完即用的全家桶」,可直接评估 Snikket;若需要逐项掌控配置,则直接使用 Prosody 本体。

五、快速开始(官方安装路径指引)

本节为官方安装路径的溯源说明,命令来自官方下载页原文(来源:prosody.im/download,查询日期 2026-10-21);逐条命令的实机验证与完整部署流程见本专栏部署篇(Ubuntu 22.04 安装 Prosody IM 13.0.7 指南,含 apt 仓库添加、服务托管与排障全过程实测)。

5.1 Debian/Ubuntu:发行版仓库 + 官方专用仓库

官方下载页对 Debian/Ubuntu 的推荐是两级路径:

# 发行版仓库直装(版本随发行版,可能滞后)
sudo apt install prosody

官方同时明确建议:「为保持最新版本,建议同时添加我们的仓库(packages.prosody.im),发行版版本可能落后于最新版」(官方原文意译)。专用仓库添加方法(官方原文命令,来源:prosody.im/download/package_repository):

sudo wget https://prosody.im/downloads/repos/$(lsb_release -sc)/prosody.sources -O /etc/apt/sources.list.d/prosody.sources
sudo apt update

仓库提供两类包:

包名内容更新策略
prosody始终对齐最新稳定版(含大版本升级)跟随官方发布
prosody-13.0锁定 13.0 分支的 nightly 构建每夜构建,仅收 bug 修复、无破坏性变更

5.2 其他平台

官方下载页给出的安装渠道(来源:prosody.im/download,查询日期 2026-10-21):

平台安装命令/渠道
Fedoradnf install prosody
RHEL/CentOS/Rocky启用 EPEL 与 CRB 仓库后 dnf install prosody
Gentooemerge --ask net-im/prosody
Arch Linux官方仓库 pacman -S prosody(详见 ArchWiki)
openSUSEsoftware.opensuse.org 提供
macOSHomebrew:brew tap prosody/prosody && brew install prosody(官方注明 Homebrew 方式当前无人维护)
FreeBSD/NetBSD/OpenBSDports/pkgsrc 相应包(net-im/prosody、chat/prosody 等)
源码prosody.im/downloads/source/ 提供 tar.gz;主线代码在官方 Mercurial 仓库

5.3 最小可用验证路径

完成安装后,官方文档给出的最小上手路径为:编辑 /etc/prosody/prosody.cfg.lua 将默认 VirtualHost "localhost" 改为实际域名 → prosodyctl register <用户名> <域名> <密码> 创建账号 → 重启服务 → 用任意 XMPP 客户端(如 Gajim、Conversations、Dino)登录验证。上述每一步的实测命令、真实回显与排障过程,见部署篇与配置篇。

六、适用场景与限制

6.1 适用场景

结合官方定位(轻量、易用、Lua 单进程)与知名用户实践(查询日期 2026-10-21):

  1. 中小规模组织自托管 IM:资源占用轻、配置文件单一(prosody.cfg.lua)、上手成本低,适合几十到数千用户规模的组织内部通信;
  2. Jitsi Meet 音视频会议后端:Jitsi Meet 官方架构使用 Prosody 承担 XMPP 信令(会议房间/MUC/Jingle 侏儒控制信令),是 Prosody 最大的「隐形部署群」;
  3. 联邦网络的边缘节点:与 XMPP 联邦互通,适合希望对外提供开放注册/对外互联的组织;
  4. 嵌入式/低配服务器:Lua 运行时内存占用远低于 Erlang BEAM 或 JVM 系服务器,官方定位 "light on resources",适合小内存 VPS、ARM 小板(官方包仓库提供 arm64/armhf 架构);
  5. 二次开发与协议实验:Lua 脚本模块热插拔,写一个自定义模块通常只需几十行 Lua,适合做协议网关、机器人、IoT 消息接入。

6.2 限制与注意

  • 单进程单机:Prosody 官方主线定位单实例运行,横向多节点集群并非其开箱能力(与 ejabberd 内置集群形成对比);跨实例扩展可借助域名分片(不同 VirtualHost 分担)或网关层负载均衡,但官方文档未将「单域多活集群」列为标准能力;
  • Lua 并发上限:事件驱动 + 单进程模型在数万级并发长连接场景下弱于 Erlang VM 的 ejabberd(该对比为架构层推断,量级参考见下文选型对比表及 ejabberd 官方文档);
  • 版本纪律:13.x 起 Lua 5.1 不再兼容(来源:prosody 命令运行时检查输出,官方文档 prosody.im/doc/depends#lua 亦说明),依赖系统 Lua 版本的环境升级前需确认解释器版本。

七、同类选型对比

以下对比数据来源:Prosody 侧为 prosody.im 及 modules.prosody.im(查询日期 2026-10-21);ejabberd 侧为 process-one.net(查询日期 2026-10-21),版本以本平台已实查定版的 《ejabberd 26.09 介绍与选型指南》 为准。平台内同赛道文档另见 《Zulip 介绍与选型指南》(话题式团队协作路线)与 《Synapse/Element v1.163.0 介绍与选型指南》(Matrix 联邦路线)。

7.1 Prosody IM vs ejabberd(同赛道 XMPP 服务器量化对比)

对比维度Prosody IM 13.0.7ejabberd 26.09
实现语言/运行时Lua(解释执行,Lua 5.2-5.4)Erlang/OTP(BEAM 虚拟机)
资源占用定位官方定位 "light on resources",官方与发行版描述均强调轻量面向大规模部署,ProcessOne 宣称经受过超大规模考验("tested at scales most messaging infrastructure…",来源:process-one.net 首页)
社区模块生态官方社区模块站 448 个(modules.prosody.im,2026-10-21 计数),CLI 一键安装内置模块库庞大(官方文档 docs.ejabberd.im/admin/modules 分域列出),Elixir/Erlang 扩展
集群能力主线定位单实例;跨实例靠域名分片/联邦内置原生集群(多节点共享同一域名,官方核心特性)
版本节奏13.0.x 维护版 1-4 个月一发(官方 Latest News:13.0.3→13.0.7 共 5 版跨 9 个月)YY.MM 季度节奏(如 26.04 于 2026-04-20 发布,来源:process-one.net 博客;26.09 定版依据见本平台 ejabberd 专栏)
配置形态单一 Lua 配置文件 prosody.cfg.lua,配置即代码YAML 配置 ejabberd.yml,配置项数量多、颗粒度细
管理通道prosodyctl CLI / prosodyctl shell / ad-hoc 客户端命令ejabberdctl CLI / Web 管理台(内置)/ REST API / SQL 直管
安装渠道(Linux)发行版仓库 + 官方 apt 仓库(Debian/Ubuntu 全套件,amd64/i386/arm64/armhf)官方 deb/rpm 仓库 + run 二进制安装器 + 源码
许可证MIT/X11GPL-2.0(双许可:商业许可可购,来源:process-one.net)
商业支持无官方商业公司(社区+核心团队 Prosodical Thoughts 维护)ProcessOne 公司(1999 年起从事消息系统,2002 年起维护 ejabberd)

💡 关键差异与选型建议:轻量、易读配置、嵌入式与中小规模优先 Prosody——Lua 配置文件本身是可编程的,运维心智负担低,MIT 许可对二次开发与商业闭源集成最友好;超大规模、强集群、需要 Web 控制台与 REST API 的场景优先 ejabberd——其 Erlang 天然适合海量并发长连接与多节点集群,但 GPL 许可与更重的运行时需要纳入评估。两者均为成熟 XMPP 实现,联邦互通无障碍,客户端生态完全共享。

7.2 与非 XMPP 自托管 IM 的定位对照

维度Prosody IMRocket.Chat / Zulip 等私有协议路线
协议开放性IETF 标准 XMPP,客户端可自由替换私有协议,客户端绑定
跨组织互通s2s 联邦开箱即用不可联邦(Rocket.Chat 有联邦实验特性)
功能开箱度核心聊天能力,Web 端/附件/音视频依赖模块组合产品化功能齐全(频道/线程/知识库等)
适用人群需要标准协议、互通性与轻量运维的运维者需要开箱即用团队协作产品的团队

八、参考链接