简介
Mattermost是一套开放源代码、可自行架设的在线聊天服务,有分享文件、搜索与集成其他服务等功能。它被设计成用于组织与公司的内部沟通,且主要将其作为Slack[6][7]与Microsoft Teams的开放源代码替代品。使用Golang和React编写的,并且可与MySQL或PostgreSQL一起作为单个Linux二进制文件运行。
本文主要记录如何使用Docker私有化部署一个能在生产环境中使用的Mattermost,同时记录如何设置与使用mattermost
部署
首先新建一个项目目录用于存放数据,然后进入该项目目录
mkdir -p /opt/mattermost && cd /opt/mattermost
新建一个compose
vim docker-compose.yml
在里面填入如下配置
你可以在ports那一行的下方修改要暴露的web端口,默认为8065
version: '3.5'
services:
postgres:
container_name: postgres
image: postgres
restart: unless-stopped
security_opt:
- no-new-privileges:true
pids_limit: 100
tmpfs:
- /tmp
- /var/run/postgresql
env_file:
- .env
volumes:
- ./volumes/db:/var/lib/postgresql/data
mattermost:
container_name: mattermost
image: mattermost/mattermost-team-edition:latest
restart: unless-stopped
depends_on:
- postgres
security_opt:
- no-new-privileges:true
pids_limit: 200
tmpfs:
- /tmp
env_file:
- .env
ports:
- 127.0.0.1:8065:8065
volumes:
- ./volumes/app/mattermost/config:/mattermost/config:rw
- ./volumes/app/mattermost/data:/mattermost/data:rw
- ./volumes/app/mattermost/logs:/mattermost/logs:rw
- ./volumes/app/mattermost/plugins:/mattermost/plugins:rw
- ./volumes/app/mattermost/client/plugins:/mattermost/client/plugins:rw
- ./volumes/app/mattermost/bleve-indexes:/mattermost/bleve-indexes:rw
然后新建一个.env
文件,用于存放变量
设置你的数据库用户名以及密码替换掉imlala和password,另外用你的域名替换掉chat.example.com
POSTGRES_DB=mattermost
POSTGRES_USER=imlala
POSTGRES_PASSWORD=password
MM_SQLSETTINGS_DRIVERNAME=postgres
MM_SQLSETTINGS_DATASOURCE=postgres://imlala:password@postgres:5432/mattermost?sslmode=disable&connect_timeout=10
MM_BLEVESETTINGS_INDEXDIR=/mattermost/bleve-indexes
MM_SERVICESETTINGS_SITEURL=https://chat.example.com
创建项目所需要的目录并给予正确的权限
mkdir -p ./volumes/app/mattermost/{config,data,logs,plugins,client/plugins,bleve-indexes}
chown -R 2000:2000 ./volumes/app/mattermost
然后启动
docker-compose up -d
该容器默认在8065端口提供http服务,浏览器直接访问ip+8065或者nginx反向代理本地的8065端口。
我的反向代理配置文件如下
location /
location ~ /api/v[0-9]+/(users/)?websocket$ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:8065;
}
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:8065;
}
运行效果
使用教程
设置系统语言
设置当前界面语言
mattermost默认进来的界面是英文的,我们可以设置为中文的。
点击左上角的设置按钮
在显示
->语言
中选择中文
即可
设置默认语言
点击左上角进入系统控制台
找到Localization
,然后两个都选中中文即可
配置邮件 smtp
通知设置
首先进入站点设置
->通知
,更改以下四个选项
其中,通知显示名称
将决定你的邮件的标题
通知邮件地址一定要和你的smtp邮箱一致,否则将导致邮件发送失败
剩下可以和邮箱地址一样。
配置smtp
找到环境
->SMTP
,将信息填入并保存,然后点击测试连接
,如果不报错的话你的邮箱可以成功收到一个邮件。
注意:已知使用qq邮箱发送注册邮件时会报错
报错与官方解释如下
550 Mail content denied
出错原因:该邮件内容涉嫌大量群发,并且被多数用户投诉为垃圾邮件。
对于具有群发性质的邮件,如果出现用户普遍表示反感或集中投诉的情况,腾讯邮箱将禁止类似此邮件内容继续发送。
改善建议:如果您是此群发邮件的管理员,请停止群发对用户造成骚扰的广告及推广类邮件。
如果您是个人邮箱用户,请向您的电子邮件提供商报告此情况。
添加团队
Mattermost 既可以部署到单个团队,也可以部署到多个团队。目前,官方建议部署到单个团队,原因如下:
- 单一团队部署促进了整个组织的沟通。当您添加多个团队时,组可能会变得孤立。
- 我们尚不支持跨团队的搜索或渠道,这可能会影响跨团队的用户体验。这包括一般搜索、保存的帖子和最近的提及。
- 集成(例如,webhook 和斜杠命令)仅在单个团队部署中保持不变。
但是,一些 Mattermost 客户更喜欢多团队部署,原因如下:
- 当每个人都有一个目的时,团队是有用的。例如,一个团队用于员工,另一个团队用于外部用户。
- 当用户分散在多个团队中而不是全部在同一个团队中时,性能会更好。对于多个团队,每个团队或频道切换加载的内容更少,并且数据库查询更快。
- 为所有用户创建一个共享团队,并使用高级权限来控制谁可以创建频道并将成员添加到共享团队,在使用多个团队时改进了跨团队协作。此外,公告横幅可用于提供系统范围的公告。
创建方法
点击左上角的团队名称
,点击创建团队
按钮即可
添加/注册用户
mattermost不支持管理员在网页控制台手动添加和删除用户,但是可以通过命令行的方式添加与删除用户
官方文档:https://docs.mattermost.com/manage/command-line-tools.html
这里着重介绍如何邀请他人加入团队
点击左上角的加号->邀请成员,然后复制链接发给别人,或者自己再开个浏览器手动注册即可。
开放注册
mattermost默认不开放注册,如果有路人进入你的mattermost网站,那么他是找不到注册按钮且无法注册的。
如果你想让任何访问你的站点的人都来注册,那么你可以在后台控制面板
->注册
->启用开放服务器
选择是
,然后保存即可。
要求邮箱验证
注册时,默认不需要验证邮件,即随便填写邮件都能注册成功,如果你不喜欢这样的话可以在后台更改
后台控制面板
->电子邮件
->需要电子邮件验证
选择是
,然后保存即可。
进阶设置
进入Docker容器内部执行命令
mattermost不支持bash,所以你需要使用如下命令来进入该容器控制台
docker exec -it mattermost sh
Config配置文件位置
/config/config.json
隔离不同团队间的用户
mattermost默认允许不同团队间的用户互相搜索并创建私聊,如果你对此不满意,可以修改配置文件并重启容器来实现。
官方相关文档:
操作方法:
找到config.json中的RestrictDirectMessage
,它的值默认为any
,将其修改为team
即可限制用户只能与他加入的团队的用户创建私聊。
禁止私聊
官方没有提供对该功能的支持,但是你可以通过安装插件来实现该功能。
首先要修改配置文件以支持手动上传插件
官方文档如下:
操作步骤:
修改config.json中的PluginSettings
->EnableUploads
字段,使其值为True,然后重启mattermost即可开启上传插件功能
禁止私聊插件GitHub链接:
https://github.com/Brightscout/mattermost-plugin-disable-dm
下载并上传与启用该插件即可实现。
笔者的使用体验
优点
这个系统初次使用体验很好,速度快
,资源占用少
支援专业而且好用的看板功能,适合个人和团队协调分配任务和规划时间。
支援PlayBook功能,官方描述如下:
Mattermost Playbooks 是预先构建的、可配置的清单,它为团队定义了一个可重复的过程,以实现特定和可预测的结果。借助 Playbook,开发团队可以编排规定的工作流程,并定义、简化和记录复杂的重复性操作。Playbooks 通过集成的通信、协作和状态仪表板帮助您掌控整个工作流程生命周期。
缺点
但是mattermost的权限控制系统和管理系统跟RocketChat简直没法比,被RocketChat薄纱。
- 无法创建只读频道(企业版功能)
比如你想设置一个只读的频道,专门用于发布公告,查阅文档后发现该功能是企业版独享的。
- 无法禁止私聊
想禁止私聊,查阅文档后却发现这项功能官方没有提供,你需要通过手动安装第三方插件来实现。
- 无法在web控制台删除用户、群聊、团队
还有,mattermost居然无法在控制面板删除用户、群聊、和团队等,一旦创建只能归档或禁用,查阅官方文档后发现聊天记录和数据是可以删除,但是需要使用命令行来删。
- 无法批量删除历史消息,无法设置数据保留策略(企业版功能)
另外,mattermost无法批量删除历史消息,无法设置历史消息自动删除。查阅文档后发现mattermost其实是有这类功能的,该功能名称为Data retention policy
,即数据保留政策
,但是这个功能是企业版独享的,免费版没法用。
批量删除历史消息和数据保留策略应该是一项最基本的功能,如果你的聊天系统打算长期投入使用的话,该功能必不可少,我认为把该功能放到企业版里是Unacceptable
不可接受的
总结
这个聊天系统(免费版)仅时候短期内在一个小团队使用,就算是付费的企业版我觉得用起来也是够呛,用户体验估计还可以,但是管理员的体验肯定不怎么好,因为它的管理系统太弱了。
笔者认为将 RocketChat
和mattermost
两个聊天平台结合起来使用是一个办法。RocketChat用于日常使用,mattermost对于项目开发小组非常友好,两者长短可以互补。
RocketChat搭建教程:https://www.hash070.top/archives/rocketchat-docker.html