Movim 0.35.4 介绍与选型指南
Movim 0.35.4 联邦制聊天与博客平台(XMPP Web 前端)的定位、三层架构(PHP daemon + WebSocket + PostgreSQL)、功能特性、最小可用安装示例,与 Rocket.Chat/Mattermost/Zulip/Synapse 的量化选型对比;版本与社区数据 2026-11-02 联网实查,登录链路实测验证。
Movim 0.35.4 介绍与选型指南
目标:讲清 Movim——"Federated blogging and chat platform / web frontend for XMPP"(联邦制博客与聊天平台、XMPP 的 Web 前端)——的定位、核心架构、功能特性与同类产品选型对比,帮助读者判断什么场景该自建 Movim、什么场景该选别的。本文版本结论、社区数据均于 2026-11-02 联网实查(GitHub API 与 Release 记录),部署与登录链路在 Debian 13 (trixie) + PHP 8.4.15 + PostgreSQL 15 + Prosody 13.0.1 环境实测通过;安装、配置与命令的逐条实测见本专栏后续三篇。
一、环境信息
本文是「联网溯源 + 本地实测」结合的认知篇,信息来源与实测环境如下,正文中不再重复标注:
- 官方站点:https://movim.pub/ (定位描述与文档入口,查询日期 2026-11-02)
- GitHub 仓库:https://github.com/movim/movim (Release 记录、License、星数,经代理查询 api.github.com,查询日期 2026-11-02)
- 实测版本:Movim v0.35.4,GitHub 最新 Release "Thiele 0.35.4",发布于 2026-10-24;源码包根目录
VERSION文件实测内容为v0.35.4 - 应用运行时:PHP 8.4.15(官方要求 PHP 8.2+),必需扩展 dom / imagick / intl / mbstring / openssl / pdo / simplexml / xml(源码
UtilsHelper.php::requiredExtensions()实测核对) - 数据库:PostgreSQL 15(官方强烈推荐;MariaDB 10.2+ 亦可,MySQL 不支持)
- XMPP 服务器:Prosody 13.0.1(
prosodyctl --version实测回显) - 竞品数据(选型对比用,均为 api.github.com 查询日期 2026-11-02):Rocket.Chat 46358 星、Mattermost 39501 星、Zulip 26155 星、element-hq/synapse 4754 星
⚠️ 注意:网上大量旧资料把 Movim 描述为「xmpp-broker + MariaDB + RabbitMQ」架构。本次实查证伪:GitHub 上
movim/xmpp-broker、movim/bridge仓库均已不存在(API 返回 object not found),那是 ≤0.20 时代的旧架构;现行 v0.35.4 架构为「PHP 守护进程 + PostgreSQL/MariaDB」,没有任何消息队列依赖(见本文第三章)。
二、软件概述
Movim 是一个开源的联邦制博客与聊天平台,官方仓库自我描述为 "Federated blogging and chat platform",README 进一步明确它是 "web frontend for XMPP"——XMPP 即时通讯协议的网页前端。这一定位决定了 Movim 的两个关键性质:
- 它不是 IM 协议,而是协议之上的 Web 应用:消息、在线状态、群组、订阅内容的「真身」都存在 XMPP 服务器上(如 Prosody、ejabberd、Openfire),Movim 只是把它变成浏览器里可用的聊天 + 博客 + 相册 + 音视频界面;
- 天然联邦:账号是
user@domain形式的 JID(XMPP 地址),不同 Movim 实例、不同 XMPP 服务器、乃至任何 XMPP 客户端(Conversations、Gajim、Swift 等)之间可以直接互发消息,不受单实例边界限制。
项目以 AGPL-3.0 许可开源(GitHub 仓库 License 实测),截至 2026-11-02 获得 2069 星、最近推送 2026-11-01,发布节奏为「约月度小版本 + 密集补丁」:v0.34.1(2026-06-28)→ v0.35(2026-09-09)→ v0.35.1(09-21)→ v0.35.2/0.35.3(10-23)→ v0.35.4(10-24)。Release 以人名命名,v0.35.4 名为 "Thiele"。
💡 技术拓展:「联邦制即时通讯」不止 XMPP 一条路线,自建场景常见协议/平台对比——
方案 协议/生态 特点 适用场景 XMPP(Jabber) RFC 6120 等开放标准,1999 年至今 联邦去中心化、客户端选择极多、协议成熟但扩展靠 XEP 拼装 已有/计划自建 XMPP 服务器,重视跨客户端互通 Matrix 开放协议 + homeserver(Synapse/Dendrite) 端到端加密默认化、房间模型现代,生态较新 重视 E2EE 与桥接(Slack/IRC 桥) 单体平台(Rocket.Chat/Mattermost/Zulip) 私有协议为主 开箱即用、团队协作功能强,但跨实例联邦弱或不联邦 单一组织内部协作 IRC RFC 1459,1988 年 极简纯文本、无历史消息/文件传输标准 极客社区公开频道 Movim 走的是第一行:它本身不发明协议,而是把 XMPP 生态「网页化」。选 Movim 的前提是接受「XMPP 服务器是必选项」这一架构分工。
三、核心架构
v0.35.4 的架构可以从源码与实测部署两个维度拆成三层(源码路径基于 release 包 movim-0.35.4,实测取证见本专栏 《Movim 0.35.4 Docker Compose 部署指南》):
3.1 Web 层:PHP-FPM + nginx
Movim 基于 Composer + Symfony Console + Smarty 模板构建,Web 入口由 nginx(或 apache2/caddy/h2o,官方 etc/ 目录附带四种虚拟主机模板)挂在 PHP-FPM 上。官方打包运行时默认监听 8443(HTTPS,SSL_MODE=full 时自签证书),登录页实测回显:
curl -sk -o /dev/null -w '%{http_code}' https://127.0.0.1:8443/
# 302(跳转 /news;-L 跟随后 <title>Login</title>,nginx 日志 "GET /login HTTP/2.0" 200 15670)
3.2 守护进程层:daemon.php(Ratchet WebSocket)+ 多 worker
这是 Movim 的心脏。php daemon.php start 启动一个常驻进程,基于 Ratchet 提供 WebSocket 服务(打包运行时内部端口 8083),浏览器页面通过 WebSocket 与守护进程通信,守护进程再以普通 XMPP 客户端身份连接你的 XMPP 服务器。实测启动横幅:
Movim daemon launched
Base URL: https://127.0.0.1:8443/
😋 Avatar Handler Worker launched
🌍 Resolver Worker launched
🔔 Pusher Worker launched
Connect to tcp://movim.local:5222, peer_name: movim.local
XMPP socket launched
主 daemon 派生三个长驻 worker(avatarhandler.php 头像抓取、resolver.php DNS 解析、pusher.php 推送通知),外加可选的 Galener 音视频 worker。连接 XMPP 的寻址逻辑在 src/Movim/Daemon/Linker.php:先查 DNS SRV 记录(_xmpp-client._tcp = STARTTLS / _xmpp-cs-dir = DirectTLS),无 SRV 则回退 tcp://<域名>:5222;TLS 校验默认 allow_self_signed=false、peer_name=JID 域名——自签证书的 XMPP 服务器必须把 CA 注入 Movim 的信任链,否则连不上(排障实录见 《Movim 0.35.4 Docker Compose 部署指南》第十一章)。
3.3 数据层:PostgreSQL(或 MariaDB 10.2+),无消息队列
全部业务数据落在单一数据库:users 表主键即 JID、configuration 表恒为一行(id=1)、迁移由 phinx 管理(迁移表 phinxlog,当前最新迁移 20261014193958 CreateVersionsTable)。官方 podman-compose 与 README 均以 PostgreSQL 为默认搭配,部分特性仅 PostgreSQL 可用;MariaDB 需 10.2+ 且强制 utf8mb4 + utf8mb4_bin 排序;MySQL 明确不支持(INSTALL.md 原文)。旧架构里的 RabbitMQ/xmpp-broker 组件在现行版本已彻底移除,WebSocket 与 XMPP 之间的桥接完全由 daemon.php 进程内完成。
💡 技术拓展:Movim 支持的数据库与常见 Web 平台可选库对比——
数据库 Movim 支持度 特点/取舍 PostgreSQL ✅ 官方强烈推荐(默认) 功能全集;部分特性仅 PG 可用 MariaDB 10.2+ ✅ 支持 必须 utf8mb4 + utf8mb4_bin,建库参数错则迁移失败 MySQL ❌ 不支持 INSTALL.md 明示排除 SQLite ❌ 不支持 无嵌入式选项 本文实验与后续三篇文档均基于 PostgreSQL 15 实测。
四、功能特性
以下特性清单来自官方 README/文档与本次实测交叉核对(查询日期 2026-11-02),按使用频率排序:
- 一对一聊天与群组聊天(MUC):消息、已读回执、碳拷贝(XEP-0280 多端同步)、消息归档(MAM)依赖 XMPP 服务器模块配合;
- 联邦博客与订阅:基于 Pubsub/ATOM 的「新闻流」(登录后的
/news页),可订阅任意 XMPP 节点的发布内容; - 照片分享与相册:头像/图片经 avatar handler worker 在 XMPP 网络内分发;
- 音视频通话:通过可选组件 Galener(Go 编写的 WebRTC SFU/网关)实现,
daemon.php galener命令管理其生命周期; - 推送通知:pusher worker 对接移动推送网关,配合移动端 XMPP 客户端使用;
- 主题与国际化:Smarty 模板 + 语言包编译(
compileLanguages实测输出po files compiled),内置 8 张贴纸包(compileStickers实测239 stickers compiled)、3939 个 emoji(emojisToJson实测); - 管理面板:Web 管理后台(实例参数、用户、日志级别等),CLI 侧由
daemon.php config直接改库(实测回显见 《Movim 0.35.4 常用 CLI 命令与工具详解》); - 注册控制:
disableregistration/chatonly/restrictsuggestions等 15 个可经 CLI 修改的实例配置键(详见 《Movim 0.35.4 配置参数详解》第四章参数总览)。
五、快速开始(最小可用示例)
本章按官方 INSTALL.md 的源码安装范式给出「最小可用」流程,让读者在阅读部署篇之前建立直觉;逐条带排障的完整部署见 《Movim 0.35.4 Docker Compose 部署指南》,参数逐项解释见 《Movim 0.35.4 配置参数详解》。
1. 安装依赖(Debian/Ubuntu,INSTALL.md 原文命令):
apt install composer php-fpm php-mbstring php-imagick php-gd php-pgsql php-xml php-zip
2. 放置代码并安装(官方安装路径范式 /var/www/movim,运行用户 www-data):
tar -xzf movim-0.35.4.tar.gz -C /var/www/ && mv /var/www/movim-0.35.4 /var/www/movim
cd /var/www/movim && composer install --no-dev
chown -R www-data: cache/ log/ public/cache/
3. 配置数据库连接:在项目根 .env 写入 DB_DRIVER=pgsql、DB_HOST、DB_DATABASE、DB_USERNAME、DB_PASSWORD 与 DAEMON_URL(公网访问 URL,不配 daemon 直接拒绝启动,实测报错 Please configure DAEMON_URL in .env)。
4. 迁移建表并启动守护进程:
composer movim:migrate # phinx 迁移;daemon start 会先检查迁移状态,缺则提示此命令
php daemon.php start
5. 设置管理员并验证(以下回显均为实测):
php daemon.php setAdmin movim@movim.local
# User movim@movim.local is now admin
php daemon.php config --xmppdomain=movim.local --info="Movim 演示实例(quzuo.net 实测)"
# The configuration key info has been updated from Demo instance by CLI to Movim 演示实例(quzuo.net 实测)
# The configuration key xmppdomain has been updated from movim.local to movim.local
php daemon.php sessionsTree
# ⚙️ Movim Daemon 🔧 1 👤 1
# ╰─ 🔧 moUbKF2sctYINewz (1)
# ╰─ 👤 🟠 75598950ab73ae0d7d5cc6a4f80cc88e movim@movim.local (0)
sessionsTree 图例(help sessionsTree 实测):🔴 Launched / 🟠 XMPP Socket connected / 🟢 XMPP Session started——出现 🟠 即代表守护进程已成功连上 XMPP 服务器。Web 侧验证:curl -sk -o /dev/null -w '%{http_code}' https://<地址>/ 返回 302,跟随后得到 <title>Login</title> 登录页即通。
💡 说明:Movim 登录链路是「浏览器 → WebSocket(需
MOVIM_SESSION_IDCookie)→ daemon → XMPP 服务器」三段式,daemon 只有在收到前端register帧后才会发起 XMPP 连接;无浏览器环境下可用 curl + Python websocket 脚本复现(本次实测即如此,完整取证过程见 《Movim 0.35.4 Docker Compose 部署指南》 4.8)。
六、适用场景与限制
6.1 适用场景
- 个人/家庭/小团队的自建社交中心:一个实例同时提供聊天、群组、博客流、相册,账号即 JID,家人可以各自用不同客户端接入同一个域;
- 已有 XMPP 服务器的组织想补一个 Web 界面:Prosody/ejabberd 已就位时,部署 Movim 只是加一个 PHP 应用 + 一个 daemon 进程;
- 重视联邦与数据主权:不想被单一 SaaS 边界锁定,需要跨服务器互通。
6.2 限制与前置条件
- 必须自备 XMPP 服务器:Movim 不内置 XMPP 服务,5222 端口的服务器(含 TLS 证书信任)是硬前置;
- 无官方移动端:手机侧体验依赖第三方 XMPP 客户端,Movim 本体是 Web 应用;
- 数据库强约束:MySQL 不支持、MariaDB 有字符集硬要求、部分特性仅 PostgreSQL(见第三章 3.3);
- 单实例扩展模式有限:daemon 是单点常驻进程(内部派生多 worker),水平扩展不如无状态 PHP-FPM 直观;
maxsessions可限会话数; - 社区规模中等:2069 星、月度发版,问题排查更多依赖源码阅读与官方 MUC 频道(对比第七章)。
七、同类选型对比
同为「自建沟通平台」常被放在一起评估的项目(数据均为 2026-11-02 api.github.com 实测):
| 项目 | Stars | License | 协议/联邦 | 定位 | 技术栈 | 发布节奏 |
|---|---|---|---|---|---|---|
| Movim 0.35.4 | 2,069 | AGPL-3.0 | XMPP(完全联邦) | 个人/小团队 Web 前端:聊天+博客+相册 | PHP 8.2+ / PostgreSQL / daemon 常驻进程 | 月度小版本 + 密集补丁(0.35→0.35.4 六周四个补丁) |
| Rocket.Chat | 46,358 | NOASSERTION(混合) | 弱(跨实例联邦非核心) | 企业团队协作(类 Slack) | Node.js / MongoDB | 高频 |
| Mattermost | 39,501 | NOASSERTION(混合) | 弱 | 企业协作 + DevOps 集成 | Go / MySQL/PG | 双月 |
| Zulip | 26,155 | Apache-2.0 | 无 | 话题流式团队讨论 | Python/Django / PostgreSQL | 月度 |
| Synapse (Element) | 4,754 | AGPL-3.0 | Matrix(完全联邦) | 联邦 IM 服务器(配 Element Web) | Python / PostgreSQL | 高频 |
解读与选型建议(「如果…则…」):
- 如果诉求是组织内部团队协作(频道、审批流、集成机器人)→ 选 Rocket.Chat/Mattermost/Zulip,Movim 不是这个赛道;
- 如果诉求是完全联邦 + 网页聊天,且接受 XMPP 生态 → Movim 是 XMPP 阵营里最完整的 Web 前端之一;若更看重端到端加密默认化与年轻生态 → 同为 AGPL 的 Matrix 路线(Synapse + Element)更合适;
- 如果已有 XMPP 服务器只缺 Web 界面 → Movim 几乎是默认答案;
- 如果运维栈是 Java/Go 而缺 PHP 经验 → 注意 Movim 排障需要读 PHP 源码(本次实测的 12 条排障记录多数靠源码定位,见 《Movim 0.35.4 Docker Compose 部署指南》第十一章);
- 如果在意许可证传染性 → Movim 与 Synapse 同为 AGPL-3.0:修改并对外提供服务需开源;Rocket.Chat/Mattermost/Zulip 为混合/Apache 许可,商用嵌入更宽松。
八、参考链接
- 官网与文档:https://movim.pub/ 、https://movim.pub/doc/
- GitHub 仓库:https://github.com/movim/movim (AGPL-3.0,v0.35.4 Release 发布于 2026-10-24)
- 官方安装指南:仓库根
INSTALL.md(PHP 8.2+、apt 依赖清单、目录权限、systemd/虚拟主机模板etc/) - XMPP 协议:https://xmpp.org/ (RFC 6120;SRV 寻址见 RFC 6120 §3.2)
- 配套 XMPP 服务器:https://prosody.im/ (本文实测 Prosody 13.0.1)
- 音视频组件 Galener:https://github.com/movim/galener
- 本专栏后续篇:《Movim 0.35.4 Docker Compose 部署指南》、《Movim 0.35.4 配置参数详解》、《Movim 0.35.4 常用 CLI 命令与工具详解》