自托管 Slack 替代方案对比:Mattermost、Rocket.Chat、Matrix
对比 Mattermost、Rocket.Chat、Synapse Matrix 与 Zulip 的内存、数据库、移动推送、SSO、升级和许可证,数据取自各项目官方配置文档。
应运行哪种自托管 Slack 替代方案
值得小团队投入时间的自托管 Slack 替代方案包括 Mattermost、Rocket.Chat、采用 Synapse 的 Matrix,以及 Zulip。在一台服务器上为内部团队部署工具时,运行 Mattermost。面向公共社区时,运行 Zulip。只有在必须与他人拥有的服务器通信时,才运行采用 Synapse 的 Matrix,因为联邦是其他方案无法复制的功能,也是唯一会改变管理员工作方式的功能。
功能列表无法区分这四种方案。它们都支持频道、线程、搜索、文件上传和移动应用。真正的区别在于它们每月要求您维护什么:内存、必须持续运行的数据库、可能不受您控制的移动推送链路,以及决定所需功能是否需要付费的许可证。下面将从这些方面比较它们,分别以10个用户和100个用户为例。
四者实际上分别是什么
Mattermost 是一个使用 PostgreSQL 数据库的 Go 服务器。它只有一个二进制文件、一个数据库和一个配置文件。它的使用方式类似 Slack,包括线程和斜杠命令;在四者中,它也是最不需要操心运维的一个,这是优点。
Rocket.Chat 是运行在 MongoDB 上的 Node.js 应用。它在这里提供的功能最全面,包括语音和视频通话,以及全渠道收件箱,可将来自电子邮件和社交渠道的客户对话汇总到同一界面中。如果您是因为这个收件箱而考虑它,请先将其与专用的 Chatwoot 客户支持平台进行比较,因为用于客户支持的聊天服务器,与用于团队协作的聊天服务器,承担的是不同的工作。
Matrix 是协议,不是产品。Synapse 是参考服务器(Python、PostgreSQL),Element 是大多数人使用的客户端。这里唯一支持服务器与您未管理的其他服务器通信的选项,就是 Matrix。
Zulip 是一个 Python 服务器(Django 加 Tornado),后端使用 PostgreSQL、RabbitMQ、memcached 和 Redis,并由其自带脚本作为一个整体安装。它采用频道内主题的模型,因此周二的对话在周五仍然可以找到。12.0 版本于 2026 年 4 月发布。
10 个用户和 100 个用户分别需要多少 RAM,以及使用哪种数据库
下表中的每个数字都来自项目自己的文档,文档查阅时间为 2026 年 8 月。这些数字不是我的测量结果,也不是编造的。每一行采用相同的依据:项目公布的最小配置;如果项目单独计算数据库资源,则将数据库计入其中。
The data behind this chart
[
{
"label": "Synapse",
"published_ram_gb": 1,
"notes": "Synapse install docs: at least 1 GB free RAM if you want to join large public rooms. PostgreSQL is required for production and is not sized."
},
{
"label": "Mattermost",
"published_ram_gb": 2,
"notes": "Mattermost requirements: 1 to 1,000 users on 1 vCPU and 2 GB RAM, single server, database included."
},
{
"label": "Zulip",
"published_ram_gb": 2,
"notes": "Zulip requirements: under 100 users on 1 CPU, 2 GB RAM and 2 GB swap. 100 users and above needs 2 CPUs and 4 GB."
},
{
"label": "Rocket.Chat",
"published_ram_gb": 8,
"notes": "Rocket.Chat requirements: smallest published tier is 4 GiB for the app plus 4 GiB for MongoDB, rated up to 500 concurrent users."
}
]这些行的口径并不相同,这是第一个需要注意的结论。Synapse 的 1 GB 是 Synapse 进程的最低要求,但附带一个条件:如果要加入大型公共房间,文档要求至少有这么多 可用 RAM。PostgreSQL 不包含在这个数值中。Mattermost 的 2 GB 指整台机器的 RAM,包括数据库;在单个 vCPU 上,该配置适用于 1 到 1,000 个用户。Zulip 文档规定,用户数少于 100 时需要 2 GB 和 1 个 CPU,另加 2 GB swap;用户数达到 100 或更多时,需要 4 GB 和 2 个 CPU。Rocket.Chat 在这里公布的数值最大,为 8 GB,因为其配置要求应用使用 4 GiB、MongoDB 使用 4 GiB;该配置适用于最多 500 个并发用户。
在 10 个用户时,这 4 个项目都可以运行在无需特别考虑的硬件上。达到 100 个用户后,差异就会显现:Mattermost 仍在其 2 GB 配置范围内,Zulip 需要 4 GB 和第 2 个 CPU,而 Rocket.Chat 文档中最小的配置仍为 8 GB,因为 MongoDB 的内存需求取决于机器,而不是用户数量。
数据库选型对未来升级的影响,比对日常性能的影响更大。Mattermost 需要 PostgreSQL 14 或更高版本,并从 v11 开始弃用 MySQL 支持,因此今天部署 MySQL,明天就可能需要迁移。Synapse 支持 SQLite,但其文档明确指出,SQLite 仅适用于测试,因为它在大型房间中的性能较差。Rocket.Chat 8 需要 MongoDB 8.0,这意味着数据库升级和聊天系统升级将是同一个项目,而不是两个项目。
2 GB VPS 实际能满足什么需求
2 GB 方案是大多数服务商提供的入门规格,对下面四种服务中的两种来说足够使用。
- Mattermost 可以运行。 这是唯一一个由厂商明确记录该规格的服务,支持最多 1,000 个用户,并可与 PostgreSQL 部署在同一台服务器上。10 个人使用 2 GB 内存比较宽裕。
- Zulip 可以运行,但需要 swap。 文档建议在内存低于 5 GB 的机器上启用 swap,并警告内存较小的机器在升级期间可能出现内存不足错误,此时
tools/webpack是失败的步骤。这是升级时会遇到的实际故障,不是安装时的故障。 - Synapse 在低负载时可以运行。 空闲时的内存占用较小。问题在于流量峰值,下面关于联邦的章节会解释峰值的来源。
- 2 GB 机器应避免使用 Rocket.Chat,原因在于 MongoDB 的存储引擎。WiredTiger 会将内部缓存设置为
(RAM - 1 GB)的 50% 与 256 MB 中较大的值,因此在 2 GB 机器上,Node.js 启动前它就会预留大约 512 MB。结果并不是服务明确拒绝启动。它可以安装和运行,但随着历史消息增加会逐渐变慢,最终 Linux 内核的内存不足终止程序会停止当时占用内存最多的进程。
在做决定前,先确认实际可用的内存,因为不同服务商计算内存的方式不同于 free:
free -h
swapon --show请记住,聊天服务器不是这台机器上唯一需要内存的组件。TLS(传输层安全)终止、备份和容器运行时都需要内存。无论选择哪种服务器,都应将其放在 您了解的反向代理 Nginx、Caddy 或 Traefik 后面;如果使用容器部署,首先应正确配置 VPS 的 Docker Compose 基础知识。
移动应用需要您自建推送服务器吗
这是部署后最容易发现、也最常决定答案的关键因素。
机制如下。Apple Push Notification service (APNs) 和 Firebase Cloud Messaging (FCM) 只接受持有特定应用签名凭据的一方发送的通知。您的服务器无法向您没有构建的应用推送通知。因此,使用厂商 App Store 构建版本的自托管聊天服务器,必须将通知交给厂商的网关,具体条件也由厂商设定。
- Mattermost。 免费方案是使用
https://push-test.mattermost.com提供的 Test Push Notification Service (TPNS)。文档说明不建议将其用于生产环境,且不提供服务级别协议 (SLA)。它只适用于 App Store 和 Play Store 构建版本。Hosted Push Notification Service (HPNS) 达到生产级别,但需要付费订阅。第三种方案是自行编译推送代理,这要求您使用自己的 APNs 和 FCM 凭据构建自己的应用。 - Rocket.Chat。 推送功能要求先将工作区注册到 Rocket.Chat Cloud,社区工作区每月最多接收 10,000 条推送通知。对于整个工作区而言,这相当于每天约 330 条。配额用尽后,通知会停止送达,直到下个月重置。对用户来说,这会表现为应用出现故障。
- Matrix with Element。 Synapse 会将通知发送到推送网关,官方 Element 应用使用的是 matrix.org 运行的网关,地址为
https://matrix.org/_matrix/push/v1/notify。负载携带事件和房间标识符,而不是消息文本;应用会从您的服务器获取内容,因此网关看到的是元数据,而不是会话内容。您可以运行自己的 Sygnal 网关,但这意味着需要构建并分发自己的应用。在 Android 上,还有一种折中方案:使用 UnifiedPush,并配合您自行托管的 ntfy 服务器。 - Zulip。 免费方案包含面向最多 10 个用户的移动推送服务。超过 10 个用户后需要购买方案;免费 Community 方案适用于许多非商业组织。Zulip 12.0 在 2026 年 4 月增加了推送负载的端到端加密。
当用户数为 10 时,这些方案都能免费提供可用的通知。达到 100 个用户后,情况会发生变化:Zulip 要求购买方案;Mattermost 仍可使用没有 SLA 且不提供支持的测试服务;Rocket.Chat 的月度配额会成为限制;Matrix 则不受影响,因为其网关可免费使用。
哪些产品免费提供单点登录
开放核心商业模式最明显地体现在单点登录(SSO)上。
- Zulip 在自托管服务器中免费提供 SAML(安全断言标记语言)和 LDAP(轻量级目录访问协议)。无需额外购买单独版本。
- Synapse 可在自身配置文件中免费配置 OpenID Connect(OIDC)、SAML 和 CAS。较新的部署越来越多地使用 Matrix Authentication Service。它是一个独立服务,只支持从经典 Synapse 身份验证单向迁移。因此应提前规划迁移,而不要等到发现这一点后再处理。
- Rocket.Chat 社区版支持基本的 LDAP 和 SAML 登录。同步扩展用户属性、映射组和团队,以及后台同步功能,都需要企业许可证。
- Mattermost 免费的 Team Edition 只提供 GitLab OAuth,不提供其他选项。SAML、AD/LDAP 和 OpenID Connect 都是付费功能。
如果计划让多个服务共用一个登录入口,可以在这些服务前面部署自托管的 Authentik 身份提供商,并根据持有的许可证确认这四个产品中哪些确实可以与其集成。
联邦真正的代价
联邦是 Matrix 存在的根本原因。用户可以加入由其他人的服务器托管的房间,并与账户位于该服务器上的用户交流,就像邮件服务器之间交换邮件一样。本页中的其他选项都不支持这一点。如果您需要联邦功能,本页中的其他方案都无法替代它。
这也是 Synapse 属于另一类工作负载的原因。用户加入联邦房间后,您的服务器会保存该房间的状态和事件副本,并缓存其他服务器上的用户发布的媒体文件,包括头像、图片和文件。因此,磁盘使用量取决于您未创建的房间,以及服务器上没有账户的用户。这就是为什么 Synapse 安装的媒体存储量,往往远大于本服务器用户发送的消息总量。这也是文档会针对加入大型公共房间明确提出内存要求的原因。
请在第一天设置保留策略,不要等到磁盘空间耗尽后再设置:
media_retention:
local_media_lifetime: 90d
remote_media_lifetime: 14dSynapse 在 1.61 版本中新增了 media_retention,并为本地媒体和远程媒体设置了不同的保留期限。远程媒体属于缓存,因此用户再次请求已清理的文件时,Synapse 会从文件原属服务器重新请求该文件。本地媒体不属于缓存,因此较短的 local_media_lifetime 会永久删除您自己用户上传的文件。
坦率地说:如果您的用户只与彼此交流,联邦功能不会带来任何收益,却会增加磁盘、带宽和升级路径的负担。请将其关闭,或选择其他服务器。
升级流程
Zulip 最简单。 只需运行一个脚本。除非涉及大型数据库迁移,否则文档说明的停机时间不到 30 秒。安装和升级都由您在服务器上执行:
cd $(mktemp -d)
curl -fLO https://download.zulip.com/server/zulip-server-latest.tar.gz
tar -xf zulip-server-latest.tar.gz以 root 身份运行安装程序。--push-notifications 标志会在安装期间将服务器注册到移动推送服务。安装程序届时会要求您接受服务条款,因此请在开始前阅读条款。
sudo ./zulip-server-*/scripts/setup/install --push-notifications --certbot \
--email=YOUR_EMAIL --hostname=YOUR_HOSTNAME后续升级使用相同的 tarball,再运行一个命令:
curl -fLO https://download.zulip.com/server/zulip-server-latest.tar.gz
sudo /home/zulip/deployments/current/scripts/upgrade-zulip zulip-server-latest.tar.gzMattermost 的流程可预测。 替换二进制文件,重启服务,启动时会执行迁移。自 2025 年 8 月发布的版本起,Extended Support Release (ESR) 轨道每 9 个月发布一次,并提供 12 个月的支持。ESR 到 ESR 的升级路径经过测试。一次跳过多个 ESR 版本虽然受支持,但未经测试,实际意味着需要由您自行测试。
Rocket.Chat 将 3 项升级绑定在一起。 截至 2026 年 8 月,当前版本线是 8.x;8.7.0 于 2026 年 8 月 6 日发布,并要求使用 MongoDB 8.0 和匹配的 Node.js 版本。跳过一个主版本,可能导致数据库版本过新,应用拒绝打开。Rocket.Chat Docker Compose 安装指南会为您固定这些版本,这也是此处选择容器方案的主要理由。
Synapse 需要仔细阅读说明。 每个版本都有升级说明。您必须阅读所经过的每个版本的说明,而不只是最终升级到的版本。升级后,Synapse 会对数据库执行后台更新。在小型服务器上,这些更新可能使机器持续数小时运行缓慢。这属于预期行为,不是故障。
用通俗语言说明许可证条款
Mattermost 将编译后的 Team Edition 构建版本按 MIT 许可证发布,而源代码按 AGPLv3 或商业许可证提供;仓库中部分内容采用 Mattermost Source Available License,要求购买许可证后才能在生产环境中运行。Rocket.Chat 除 ee/ 目录外采用 MIT 许可证;这些目录使用各自的企业许可证。Synapse 在 1.99.0 版本中从 Apache 2.0 切换到 AGPLv3,贡献者还需签署 CLA,使 Element 能够针对该许可证出售例外授权。Zulip 采用 Apache 2.0 许可证,且没有企业目录,因此其 SSO 功能没有特殊限制。
实际理解是:只有当您计划修改服务器,并将其作为服务提供给其他人时,AGPL 才会真正影响您。对于小型团队,更重要的是开放核心模式,即免费构建版本缺少哪些功能。Zulip 缺少的功能最少,Mattermost 最多。
应选择哪一个
内部团队工具。 Mattermost。它记录的资源占用最小,升级过程最省心,界面也很熟悉,无需额外说明。应在 SSO 成为必需项的当天规划付费方案,因为大多数团队最终都会遇到这一天。
社区服务器。 Zulip。Topics 可以让繁忙的公共频道在数月后仍然易于阅读;SAML 和 LDAP 无需付费,升级只需执行一条命令。如果您的社区更接近帖子和回复,而不是实时聊天,请先比较自托管论坛软件,因为论坛更利于搜索索引,也完全不需要推送基础设施。如果您需要语音、视频和全渠道功能,并且能够为它分配其文档要求的 8 GB 内存,则应改选 Rocket.Chat。
必须实现互操作的网络。 使用 Synapse 和 Element 的 Matrix。接受媒体数据增长,在第一天就设置保留策略,为其配置 PostgreSQL,并准备比预期更多的磁盘空间,这样才能真正从与您不控制的服务器通信中获益。如果团队从不进行联邦通信,却仍为其选择 Synapse,就等于白白承担这些成本。
FAQ
对于小型团队,最佳的自托管 Slack 替代方案是什么?
对于大多数内部团队,Mattermost 是合适的选择。其文档说明,在同一台机器上运行 PostgreSQL 时,1 个 vCPU 和 2 GB RAM 可支持 1 到 1,000 个用户,因此适合大多数服务商提供的入门级 VPS 方案。需要注意的是单点登录:免费的 Team Edition 仅支持 GitLab OAuth,而 SAML、AD/LDAP 和 OpenID Connect 都需要付费方案。如果免费 SSO 比类似 Slack 的界面更重要,可以改用 Zulip。
我可以在 2 GB VPS 上运行自托管聊天服务器吗?
Mattermost 可以。Zulip 也可以,但需要添加 swap;Zulip 自己的文档建议在内存低于 5 GB 时这样做。Rocket.Chat 则容易让人失望,因为 MongoDB 的 WiredTiger 引擎会为缓存申请以下两者中较大的值:RAM 减去 1 GB 后的 50%,或 256 MB。因此,在应用启动前,一台 2 GB 的 VPS 大约已有 512 MB 被占用。它可以完成安装,但随着历史消息增加,性能会逐渐下降,最终因内存不足被终止。Rocket.Chat 公布的最小配置是应用使用 4 GiB,MongoDB 使用 4 GiB。
自托管聊天服务器需要自己的移动推送通知服务器吗?
通常不需要,因为 Apple 的 APNs 和 Google 的 FCM 只接受应用签名方发送的通知,所以供应商的应用会使用供应商自己的网关。不同产品的条款有所不同。Mattermost 提供免费的测试服务,但不提供 SLA;它也提供付费托管服务。Rocket.Chat 将社区工作区的推送通知限制为每月 10,000 条,达到上限后会停止投递,直到下个月重置。Zulip 为最多 10 个用户免费提供推送服务,超过此数量则需要付费方案。Matrix homeserver 通过 Element 应用使用的网关发送推送通知,不收取费用。只有在您也发布自己的应用构建版本时,才需要自己的网关。
对于从不与其他服务器通信的团队,我应该自托管 Matrix 和 Synapse 吗?
不应该。Synapse 的用途就是联邦功能,而联邦功能也会增加运行负担。加入其他服务器上的房间后,您的服务器会将这些房间的状态和媒体缓存到本地磁盘,因此存储空间会因与您自己的用户无关的原因增长。请在此之前使用简短的 remote_media_lifetime 设置 media_retention。只与自身通信的团队需要承担运行成本,却无法获得联邦功能的好处;Mattermost 或 Zulip 可以用更少的硬件完成同样的工作。
哪个自托管 Slack 替代方案提供免费的单点登录?
Zulip 和 Synapse。Zulip 在自托管服务器中免费提供 SAML 和 LDAP,Synapse 的配置支持 OpenID Connect、SAML 和 CAS;较新的安装方式正在迁移到独立的 Matrix Authentication Service。Rocket.Chat 的社区版支持基本的 LDAP 和 SAML 登录,但将属性同步、组映射和后台同步设为企业许可证功能。Mattermost 的免费 Team Edition 仅支持 GitLab OAuth。