使用 Mattermost 作为远程办公的即时沟通工具

背景

2020年的疫情非常严峻,为了保证大家的身体健康,即使在复工的前提下在办公室内部也尽量使用聊天工具沟通。减少口头沟通,避免唾沫传播。

我们的工作平台是 Gitlab 。Gitlab 用来管理具体事务,跟踪项目推进是非常好用的。但是如果想实时沟通的话就没那么便利。所以需要找到一款补充的软件,在原有的开发流程基础上作为日常即时沟通的补充。

期间调研了一些软件。类似 Rocket.chat, Martix, 这两款软件的特点是开源并且可以自行部署,这样一来就是自己保管自己的数据和信息。数据和信息是一家公司的关键,将项目敏感信息放到微信,钉钉,Slack 沟通是不明智的。当然如果项目是以开源的方式运行,所有信息透明公开,那么就不需要有这个顾虑。

Martix 因为 Mozilla 采用有了一定知名度,同时架构设计也是分布式的。本来已经比较倾向于使用 Martix, 不过刚好和一个朋友聊天提起来。他建议使用 Mattermost。

经过一些功能验证和调研,最终采用了 Mattermost。有一个非常关键的优点,就是可以使用 Gitlab 的账号直接登录。

基本功能和特点

  • 有开源的手机客户端软件,并且一直在积极更新

    Android 的推送有些限制,不过如果再自行部署一个推送服务器的话就没有当前的限制。

  • 基本上照搬 Slack 的产品逻辑

    与微信对比的话,能将讨论的内容按照频道(主题)分开。

  • 支持 webhook, bot 账号

    这样就覆盖了一些 auto devops 的场景。将原来命令,网页式的操作变成会话式的控制。

    同时和 Gitlab 对接,可以简单的创建,读取工单。

部署方法

  • 首先需要准备一个运行环境

    我现在都习惯使用 Docker 来部署。所以使用了 https://github.com/mattermost/mattermost-docker 这个项目来部署。

    当前使用的环境:

    1. Ubuntu 19.04
    2. Docker version 18.09.7, build 2d0083d
    3. docker-compose version 1.21.0, build unknown
    4. 需要使用服务器的 80,443 端口
  • 在制作镜像之前需要对 Docker-compose 进行修改

    因为我使用的是社区版,但是仓库里面默认编译使用的是商业版。

       app:
    -    build: app
    -      # uncomment following lines for team edition or change UID/GID
    -      # args:
    -      #   - edition=team
    +    build:
    +      # change `build:app` to `build:` and uncomment following lines for team edition or change UID/GID
    +      context: app
    +      args:
    +         - edition=team
  • 先根据说明执行一遍镜像制作

    docker-compose build

  • 启动之前的准备

    如果想要启用 https, 那么需要打开

    @@ -60,4 +61,4 @@ services:
           - /etc/localtime:/etc/localtime:ro
         # Uncomment for SSL
         # environment:
    -    #  - MATTERMOST_ENABLE_SSL=true
    +      - MATTERMOST_ENABLE_SSL=true

    同时准备好证书。如果你使用的是 let's encrypt 生成的证书

    cp ./volumes/web/cert/privkey.pem ./volumes/web/cert/key-no-password.pem

    因为服务默认找到的是 key-no-password.pem。如果没有这个文件,并且开启了 SSL 那么网站启动之后将无法访问。

    如果要修改数据库账户默认的密码,则更新 MM_PASSWORD, POSTGRES_PASSWORD, MM_SQLSETTINGS_DATASOURCE 中对应的密码配置。

    我在踩坑的过程中漏了配置 MM_SQLSETTINGS_DATASOURCE。就导致了启动之后 app 的 log 里面提示数据库密码错误的问题。

    同时常规的坑为:

    Error: failed to load configuration: failed to load: failed to persist required changes after load: failed to write file: open /mattermost/config/config.json:

    以上的问题原因是没有设置: chown -R 2000:2000 ./volumes/app/mattermost/

  • 启动服务器

    docker-compose up

基本配置

  • 邮件配置

    配置 SMTP 的账号:

    启动邮件通知

  • 使用 Gitlab 账号进行登录

    首先,这是公司内部使用的服务。所以我禁止了注册功能。

    开启创号创建需要启动。因为通过 Gitlab 账号登录的机制是:读取 Gitlab 的信息并自动在 Mattermost 上新建一个账号。如果这里配置错了,跳转登录的时候会提示失败。

    同时我禁止了邮件和账号登录

    这样一来用户打开页面,就只有一个登录的按钮。

    不一定美观,但是够用。

使用总结

  1. 搜索需要改进,Gitlab 也存在同样的问题。因为这是西文国家的人设计的,他们在考虑最小输入单位来触发搜索的时候是以字母来计算长度,但是放到中文中就不够了。要想起六个字才能搜索历史记录,几乎不可能。这个我打算改进。
  2. 手机端还未使用,目前主力是在 PC 端。
  3. 将主题作为频道分割开,解决了在微信上沟通工作低效的问题,又保证了数据的安全性。
avatar

极客世界

乐聚机器人研发总监 | 黄怀贤