随着大模型的发展,将 AI 接入团队协作平台(ChatOps)已成为提升效率的利器。Mattermost 作为开源界最知名的 Slack 替代品,非常适合部署在私有云中。而结合 OpenClaw,我们还能让它拥有多 AI 模型协同的“灵魂”。
本篇文章记录了我在 Unraid 环境下,从零搭建 Mattermost 到成功配置 OpenClaw 多机器人的全过程,并附带了我在数据库权限、密码丢失、内网互通等环节踩过的所有坑及修复方案。干货满满,建议收藏。
阶段一:Unraid 环境下的 Mattermost 基础部署
在 Unraid 的 Docker 中部署 Mattermost 并不复杂,但有几个极其容易踩坑的底层配置必须提前做好。
1. 核心避坑:目录与权限准备
Mattermost 容器内部运行的默认用户 UID 是 2000。如果你直接在 Unraid 拉取镜像,容器会因为没有宿主机的目录写入权限而无限重启。
在拉取镜像前,请务必打开 Unraid 终端(Terminal),执行以下命令初始化目录并赋予权限:
# 创建必要的挂载目录
mkdir -p /mnt/user/appdata/mattermost/{config,data,logs,plugins,client/plugins,bleve-indexes}
# 将目录所有权强制移交给 UID 2000
chown -R 2000:2000 /mnt/user/appdata/mattermost/
提示:文件存储默认在
data目录中,请确保你的appdata共享文件夹有足够的阵列空间。
2. 核心 Docker 参数配置
在 Unraid 中配置 Mattermost 容器时,建议搭配 PostgreSQL 数据库,并尽量让数据库与 Mattermost 处于同一个自定义 Docker 网络中。以下是核心环境变量的填写规范:
| 映射项 | 示例/说明 |
|---|---|
| Network Type | 建议选择自定义桥接网络,如 postgres_network |
| MM_SQLSETTINGS_DATASOURCE | 数据库连接串。格式:postgres://admin:密码@192.168.1.100:5432/mattermost?sslmode=disable |
| MM_SERVICESETTINGS_SITEURL | 服务的内网或外网访问地址:http://192.168.1.100:8065 |
注:请将 192.168.1.100 替换为你实际的 NAS IP。
3. Mattermost 常见启动故障排除
部署过程中,你大概率会遇到以下几个经典问题:
- 报错:
password authentication failed for user "admin"
原因:密码中含有特殊字符(如 @),导致连接串解析失败。 解决:将 @ 转义为 %40,或者进入 PostgreSQL 容器执行 ALTER USER admin WITH PASSWORD '新密码'; 修改密码。确保数据库中已手动创建了 mattermost 库。
- 忘记管理员密码且提示
Your account is locked
原因:未配置 SMTP 邮件服务器,多次输错密码被锁死,且无法通过邮箱找回。 解决:直接进入 PostgreSQL 数据库,执行底层 SQL 强制解锁并清空密码:
UPDATE users
SET password='', lastpasswordupdate=0, failedattempts=0
WHERE username='你的管理员账号名';
重启 Mattermost 容器后,使用浏览器的无痕模式访问,密码留空即可登录或重新触发初始设置。
- 报错:插件安装失败(
this plugin requires a professional license)
原因:官方镜像预装了部分企业版插件。 解决:这属于正常现象,不影响基础聊天功能。进入系统控制台手动禁用这些报错插件即可。
阶段二:为 Mattermost 注入灵魂——接入 OpenClaw AI 机器人
基础平台搭好后,接下来使用 OpenClaw 为 Mattermost 接入 AI 机器人。
1. 创建机器人账号(Bot Account)
AI 必须先有一个合法的“员工身份”才能发言:
- 管理员进入
System Console -> Integrations -> Bot Accounts,将其设为True。 - 回到前台主菜单,进入
Integrations -> Bot Accounts -> Add Bot Account,创建一个名为openclaw-main的机器人。 - 创建成功后,页面会显示一串 Access Token。这个 Token 只显示一次,务必立刻保存。
2. 将机器人拉入团队与频道
机器人创建后默认不会自动加入你的频道,需要手动邀请:
- 进入
System Console -> User Management -> Teams,将机器人加入你的团队。 - 回到你希望机器人发言的频道,点击右上角邀请成员,把机器人拉进来。
- 如果你准备做多机器人路由,建议记录好不同 bot 账号分别对应哪个 OpenClaw agent,后续排错会省很多事。
3. OpenClaw 中 Mattermost 的正确配置方式
很多早期教程会把 Mattermost 的路由直接写进 channels.mattermost.accounts[].routing,或者使用并不存在的 target、conditions.channelId 之类字段。按当前 OpenClaw 配置结构,这些写法已经不对了。
OpenClaw 里,Mattermost 的关键配置应分成三层:
channels.mattermost:声明 Mattermost 通道本身的全局行为;channels.mattermost.accounts:声明具体 bot 账号(baseUrl、botToken等);bindings:把某个 Mattermost 账号绑定到指定 agent。
如果你的 Mattermost 服务跑在内网,当前可用配置更接近下面这样:
{
"channels": {
"mattermost": {
"enabled": true,
"dmPolicy": "open",
"allowFrom": ["*"],
"groupPolicy": "open",
"chatmode": "oncall",
"replyToMode": "all",
"allowPrivateNetwork": true,
"defaultAccount": "default",
"accounts": {
"default": {
"name": "MainBot",
"baseUrl": "http://192.168.1.100:8065",
"botToken": "YOUR_MAIN_BOT_TOKEN"
},
"second": {
"name": "PmBot",
"baseUrl": "http://192.168.1.100:8065",
"botToken": "YOUR_SECOND_BOT_TOKEN"
}
}
}
},
"bindings": [
{
"agentId": "main",
"match": {
"channel": "mattermost",
"accountId": "default"
}
},
{
"agentId": "pm",
"match": {
"channel": "mattermost",
"accountId": "second"
}
}
]
}
这里有几个要点:
chatmode: "oncall"表示群里通常只在被 @ 时才回复,适合降低刷屏概率。replyToMode: "all"能让回复尽量挂在线程或上下文里,更利于阅读。allowPrivateNetwork: true允许 bot 访问内网 Mattermost 地址,这正适合 NAS 场景。- 多机器人分工靠
bindings,不是靠每个 account 下面写 routing。
4. 多机器人协同的正确思路
如果你想在同一个 Mattermost 里放多个机器人,不建议再用“一个账号里塞多套路由”的旧思路。更稳妥的做法是:
- 在 Mattermost 中创建多个 Bot Account;
- 在 OpenClaw 的
channels.mattermost.accounts中分别配置; - 再用
bindings将不同账号分别绑定到不同 agent。
例如:
default账号绑定main,负责通用问答与系统协助;second账号绑定pm,负责文案、审稿、方案整理;- 后续若再扩展,也只需继续新增 bot 账号与 binding。
这种方式的好处是结构清晰、升级后更不容易失效,出了问题也能迅速定位是哪个账号、哪个 agent、哪段绑定规则出了岔子。
阶段三:网络通信排错与收尾工作
如果配置完成后,你在频道里 @ 机器人,它却毫无反应,重点检查以下几项。
1. Mattermost 的内网信任设置
进入 Mattermost 系统控制台的开发者相关设置,检查 Allowed Untrusted Internal Connections。如果 OpenClaw 与 Mattermost 都在内网,这一项通常要放行 OpenClaw 所在宿主机或对应网段,否则本地通信可能被拦下。
2. 反向代理与 WebSocket
如果后续你准备把 Mattermost 暴露到公网,常见做法是挂在 Nginx Proxy Manager 或 Nginx 反向代理后面。此时务必开启 WebSocket Support,否则聊天消息、状态同步、机器人回复都有可能出现异常延迟。
3. 配置检查与重启
每次修改 OpenClaw 配置后,建议先执行:
openclaw doctor
确认配置格式与插件状态无误后,再重启 OpenClaw 相关服务。这样比一边猜一边改要省事得多。
结语
从宿主机目录权限、数据库连接,到 Mattermost bot 账号、多 agent 绑定与内网通信,整套链路跑通之后,你就拥有了一套真正属于自己的私有 ChatOps + AI 协作环境。
它的价值不只在于“能聊天”,而在于:
- 数据留在自己的私有环境中;
- 机器人角色可以拆分;
- 不同模型和不同 agent 可以各司其职;
- 后续扩展飞书、Telegram、网页控制台等通道时,也能复用同一套 OpenClaw 体系。
如果你也在折腾 NAS、Unraid、Mattermost 或 OpenClaw,希望这篇实战记录能替你少踩几个坑。