Movim 0.35.4 介绍与选型指南

Movim 0.35.4 联邦制聊天与博客平台(XMPP Web 前端)的定位、三层架构(PHP daemon + WebSocket + PostgreSQL)、功能特性、最小可用安装示例,与 Rocket.Chat/Mattermost/Zulip/Synapse 的量化选型对比;版本与社区数据 2026-11-02 联网实查,登录链路实测验证。

MovimMovimXMPPPHP即时通讯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 的两个关键性质:

  1. 它不是 IM 协议,而是协议之上的 Web 应用:消息、在线状态、群组、订阅内容的「真身」都存在 XMPP 服务器上(如 Prosody、ejabberd、Openfire),Movim 只是把它变成浏览器里可用的聊天 + 博客 + 相册 + 音视频界面;
  2. 天然联邦:账号是 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)私有协议为主开箱即用、团队协作功能强,但跨实例联邦弱或不联邦单一组织内部协作
IRCRFC 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_ID Cookie)→ 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 实测):

项目StarsLicense协议/联邦定位技术栈发布节奏
Movim 0.35.42,069AGPL-3.0XMPP(完全联邦)个人/小团队 Web 前端:聊天+博客+相册PHP 8.2+ / PostgreSQL / daemon 常驻进程月度小版本 + 密集补丁(0.35→0.35.4 六周四个补丁)
Rocket.Chat46,358NOASSERTION(混合)弱(跨实例联邦非核心)企业团队协作(类 Slack)Node.js / MongoDB高频
Mattermost39,501NOASSERTION(混合)弱企业协作 + DevOps 集成Go / MySQL/PG双月
Zulip26,155Apache-2.0无话题流式团队讨论Python/Django / PostgreSQL月度
Synapse (Element)4,754AGPL-3.0Matrix(完全联邦)联邦 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 许可,商用嵌入更宽松。

八、参考链接

Movim 0.35.4 介绍与选型指南 - Quzuo