SAMA 0.37 介绍与选型指南
SAMA(Simple but Advanced Messaging Alternative)0.37.2 自托管聊天服务器的第一站认知文档:产品定位、uWebSockets.js+MongoDB+Redis+MinIO 架构解析、功能特性、适用场景与限制、与 Rocket.Chat/SimpleX Chat 等同类方案的量化选型对比,全链路 12 项功能于 2026-10-30 Docker 实测通过。
SAMA 0.37 介绍与选型指南
目标:本文是 SAMA 的第一站认知文档,面向正在评估「自托管即时通讯服务端」的后端工程师与架构选型人员,讲清 SAMA 是什么、协议与架构如何、能做什么、值不值得选。本文全部实测结论来自 2026-10-30 在 Docker Compose 上对 SAMA 0.37.2 的真实部署与 12 项功能链路验证(注册、登录、频道创建、消息收发、S3 文件上传下载等),部署过程见 《SAMA 0.37 Docker Compose 部署指南》。
1. SAMA 是什么
SAMA(Simple but Advanced Messaging Alternative) 是一个开源(GPL-3.0)的下一代自托管聊天服务器与客户端套件,由 Igor Khomenko 发起、SAMA-Communications 组织维护,官方仓库:
- 服务端:
github.com/SAMA-Communications/sama-server(本文实测版本 0.37.2,Release #219) - Web 客户端:
github.com/SAMA-Communications/sama-client(Vue 3 + Vite monorepo,含@sama-communications/sdk、ui-kit、client三个 workspace) - 移动端:
github.com/SAMA-Communications/sama-client-flutter
它的动机写在 README 第一段:提供一个不同于且可替代 XMPP 的现代消息协议与聊天服务器——XMPP 是当下唯一广泛流行的自托管消息"标准",但协议包袱沉重。SAMA 用基于 WebSocket 的 JSON 包协议替代 XMPP 的 XML stanza,用 uWebSockets.js(C++ 编写的极高性能 Node.js WebSocket 库)承载长连接。
一句话定位:SAMA 不是开箱即用的"团队协作工作台",而是一套协议清晰、组件解耦的 IM 引擎 + 参考客户端,适合作为自建聊天产品的底层进行集成与二次开发。
2. 架构解析(实测 7 容器拓扑)
SAMA 官方主推的部署形态就是 Docker Compose 多容器 stack,本文实测 stack 由 7 个容器组成:
| 容器角色 | 实测镜像/基础 | 职责 |
|---|---|---|
| sama-server | 基于 node:22 本地构建(0.37.2) | 消息服务核心,uWebSockets.js 监听 WS/HTTP/TCP,内部以 PM2 跑 2 个节点(9001/9002)组成集群 |
| sama-client | 基于 node:22 构建期克隆 sama-client | 一次性构建容器:npm run build 产出静态文件写入共享卷 sama-client-dist 后退出 |
| nginx | nginx:1.31.8 | 双端口入口:静态 SPA(实测映射 8161)+ WS/HTTP 反向代理与两节点负载均衡(实测映射 8162) |
| s3 | MinIO | 对象存储,存放聊天附件(实测桶名 samabucket) |
| s3-service | MinIO 镜像 + mc | 一次性初始化容器:建桶、设策略、创建 S3 服务账号后退出 |
| mongo | mongo:6.0.11 | 业务主库(用户/会话/消息/组织等),数据库名 samadb |
| redis | redis(官方镜像) | 集群节点协调、Bull 任务队列、操作日志过期等 |
核心工作原理:
- 连接层:单个 server 容器内可用环境变量定义多个 Node 节点(
RUN_NODE_1_CMD/RUN_NODE_2_CMD,实测各监听 9001/9002),nginxupstream做轮询负载均衡,跨节点消息投递依赖 Redis 中登记的集群节点信息(NODE_CLUSTER_DATA_EXPIRES_IN)。 - 协议层:
app/networking下同时实现 JSON over WebSocket、HTTP(登录/管理端点)与 TCP 三种传输;JSON 处理器位于APIs/JSON,按路由名分发到对应 Controller。 - 多租户:所有业务数据(用户、会话、文件)都挂在
organization_id下,首次部署需执行数据库迁移生成default组织(见 B2 部署指南实测坑一)。 - 端到端加密:内置 Signal 风格的设备密钥体系(
request_keys、device_register、加密消息 TTL 等配置),加密消息解密失败可上报(message_decryption_failed)。 - AI 扩展:依赖内置
@ai-sdk/google与 quickjs 沙箱,支持给会话挂载服务端 Bot(conversation handlers),可接 Gemini 做机器人回复。
3. 功能特性清单(实测验证项已标注 ✅)
- 用户体系:注册(WS
user_create✅)、登录(HTTP/login返回 JWT access_token + refresh cookie ✅)、登出、OTP 找回密码、多设备管理(device_register/device_list/device_delete✅ 结构确认)、用户搜索、资料编辑 - 会话类型:单聊
u、群聊g、频道c(实测创建频道 ✅,订阅/退订 ✅),频道支持管理员角色;会话上限人数可配(实测 50) - 消息能力:发送(✅ 实测回显
ask.mid/server_mid)、编辑、删除、表情回应、回复引用、已读回执、message_list拉取(✅)、typing 输入中状态、消息 summary、tone 语气改写(AI) - 文件传输:
create_files申请预签名上传 URL(✅ 实测 S3 PUT 200)、get_file_urls获取预签名下载 URL(✅ 实测 7 天有效期),支持 MinIO/S3/DigitalOcean Spaces 三种驱动 - 联系人与隐私:通讯录增删改查、双向拉黑、在线状态与最后活动时间订阅
- 推送:Web Push(VAPID)+ 原生推送守护进程
sama-push-daemon(FCM/APNs,官方 compose 可选组件) - 管理面:HTTP 管理端点(
/admin/organization、/admin/message系列、/admin/server-stats、/admin/activity/online),用HTTP_ADMIN_API_KEY鉴权 ✅ 结构确认 - 运维观测:
/health健康检查 ✅ 实测、/health-stats、操作日志op_log_list
4. 与同类自托管聊天方案对比
| 维度 | SAMA 0.37 | Rocket.Chat 8.9 | SimpleX Chat 7.0 | Matrix/Synapse |
|---|---|---|---|---|
| 定位 | IM 引擎 + 参考客户端,面向二次开发 | 开箱即用团队协作工作台 | 隐私优先匿名聊天 | 去中心化联邦 IM |
| 协议 | 自研 WS JSON 包(文档完整) | REST + WebSocket + 集成扩展 | 自研二进制(无账号设计) | Matrix 联邦开放协议 |
| 技术栈 | Node 22 + uWS + MongoDB + Redis + MinIO | Meteor/Node + MongoDB 8.0 + NATS | Haskell 中继(smp-server) | Synapse(Python)/Dendrite(Go) + PostgreSQL |
| 多租户 | 组织(organization)原生支持 | 工作区/企业版分级 | 不支持 | 不支持(按 homeserver 划分) |
| E2E 加密 | 内置 Signal 风格设备密钥体系 | 端到端加密房间(企业特性为主) | 全链路匿名、元数据最小化 | 房间级加密 |
| 资源占用 | 轻(uWS,单机 2C4G 可跑全栈) | 重(Meteor 全家桶,官方建议 2C4G 起) | 轻 | 中 |
| 二次开发友好度 | 高:路由即包名,Controller/Operation 分层清晰,含测试套件 | 中:API 面广但代码体量大 | 低:协议专有 | 中:协议复杂但生态成熟 |
| 移动端 | Flutter 官方客户端 | 官方 React Native | 官方多端 | 多实现(Element 等) |
选型结论:
- 想要最小依赖、协议透明、以 API 集成为主的自托管聊天(如给现有产品内嵌 IM、做行业专属通讯端),SAMA 是同类中最轻的起点之一;同类工作台型方案见站内 Rocket.Chat 8.9 介绍与选型指南。
- 若核心诉求是元数据隐私与匿名,SimpleX 的设计更彻底,见 SimpleX Chat 7.0.4 介绍与选型指南。
- 若需要开箱即用的频道/工单/集成市场,Rocket.Chat/Mattermost 更合适。
5. 适用场景与限制
适合:自建 IM 底层引擎;需要多组织隔离的 B2B 消息平台;对消息协议想要完全掌控的团队;低资源 VPS 上的私人聊天服务。
限制(实测/源码确认):
- 版本尚在 0.x(0.37.2),官方文档站 docs.samacloud.io 为主要资料源,API 细节以仓库
APIs/JSON代码为准。 - 无内置管理后台 UI,管理动作走 HTTP 管理端点 + API Key。
- Web 客户端与 server 版本解耦发布(client 构建期从 GitHub 拉 main 分支),生产建议锁定分支或自行维护前端构建。
- 推送守护进程(FCM/APNs)需单独配置
sama-push-daemon与厂商凭据,Web Push 需要 HTTPS。 - GPL-3.0 对闭源商用分发有传染性约束。
6. 下一步
- 动手部署:《SAMA 0.37 Docker Compose 部署指南》(7 容器 stack 实测)
- 参数调优:《SAMA 0.37 配置参数详解》(
.env.docker全量参数) - 集成对接:《SAMA 0.37 API 详解》(WS 包协议 + HTTP 管理端点实测回显)