介绍

Mattermost 是一个灵活、开源的聊天消息平台,是 Slack 的开源私有部署版本。

可以用于内网聊天,自带桌面与移动平台客户端,易于使用。

系列文章

这一系列文章中的软件是在同一台机器上安装配置的,完整地记录了配置过程。解决了同时部署各种服务之间可能会产生的问题,最终将各种服务整合到一起。每个服务都配置使用域名访问,便于使用。

账号系统未使用 LDAP,因此 Jira 与 GitLab 账号是独立的,Jenkins 与 Mattermost 使用 GitLab 账号登录。

比较

  • RTX 腾迅出品,2015年之后就没有更新过,RTX for mac 经常崩溃、掉线,而且无法获取组织架构信息,导致无法找人。
  • 钉钉 阿里出品,可以打卡、考勤,官方还出了考勤机,与钉钉自动连接。
  • BearyChat 比较卡顿,搜索功能较差。

环境

  • CentOS 7.6 1810
  • MySQL 5.7.25
  • Mattermost 5.8.0 2019/02/16

安装流程

官方提供了完整的安装流程,可以根据自己的实际情况决定如何安装。本文章记录了在实际环境中安装的全过程,仅供参考。

MySQL

安装

1
2
3
4
5
rpm -ivh https://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm
yum install -y mysql-server

systemctl enable mysqld
systemctl start mysqld

设置 root 密码

1
2
3
4
sudo grep 'temporary password' /var/log/mysqld.log
mysql -uroot -p
# 输入上面提示的密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourmysqlpassword';

注意:密码必须设置地复杂,否则会提示 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

创建 Mattermost 数据库

1
2
3
4
mysql -u root -p
mysql> create user 'mmuser'@'%' identified by 'yourmattermostpassword';
mysql> create database mattermost;
mysql> flush privileges;

Mattermost 安装

1
2
3
4
5
6
7
8
9
wget https://releases.mattermost.com/5.8.0/mattermost-5.8.0-linux-amd64.tar.gz
tar -xvzf mattermost-5.8.0-linux-amd64.tar.gz

sudo mv mattermost /opt
mkdir /data/mattermost

sudo useradd --system --user-group mattermost
sudo chown -R mattermost:mattermost /opt/mattermost
sudo chmod -R g+w /opt/mattermost

配置

配置 MySQL 以及根据需要决定是否修改文件保存目录

vi /opt/mattermost/config/config.json

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
    "SqlSettings": {
        "DriverName": "mysql",
        "DataSource": "mmuser:yourmattermostpassword@tcp(127.0.0.1:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s",

    "FileSettings": {
        "EnableFileAttachments": true,
        "EnableMobileUpload": true,
        "EnableMobileDownload": true,
        "MaxFileSize": 52428800,
        "DriverName": "local",
        "Directory": "/data/mattermost/",

防火墙

如果不使用默认的 8065 端口访问,而是使用后续介绍的 Nginx 绑定域名+80端口访问的话,此步可以跳过。

1
2
3
4
5
6
firewall-cmd --permanent --new-service=mattermost
firewall-cmd --permanent --service=mattermost --set-short="Mattermost Service Ports"
firewall-cmd --permanent --service=mattermost --set-description="Mattermost service firewalld port exceptions"
firewall-cmd --permanent --service=mattermost --add-port=8065/tcp
firewall-cmd --zone=public --add-service=mattermost --permanent
firewall-cmd --reload

启动测试

1
2
cd /opt/mattermost
sudo -u mattermost ./bin/mattermost

等待一会儿出现 Server is listening on :8065 字样后就可以按 Ctrl+C 停止运行,继续后面的操作。 这步最主要的作用是确定前面的配置是否正确,如果有异常,可以根据实际提示去修改配置。

自动启动

sudo vi /etc/systemd/system/mattermost.service

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[Unit]
Description=Mattermost
After=syslog.target network.target mysqld.service

[Service]
Type=notify
WorkingDirectory=/opt/mattermost
User=mattermost
ExecStart=/opt/mattermost/bin/mattermost
PIDFile=/var/spool/mattermost/pid/master.pid
TimeoutStartSec=3600
LimitNOFILE=49152

[Install]
WantedBy=multi-user.target

配置自动启动

1
2
3
4
sudo chmod 664 /etc/systemd/system/mattermost.service
sudo systemctl daemon-reload
sudo systemctl enable mattermost
sudo systemctl start mattermost

域名

增加 A 记录 mattermost.company.com 这样访问时 URL 中不需要增加端口

Nginx

server 替换成 127.0.0.1server_name 替换为域名

vi /etc/nginx/conf.d/mattermost.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
upstream backend {
   server 127.0.0.1:8065;
   keepalive 32;
}

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;

server {
   listen 80;
   server_name    mattermost.company.com;

   location ~ /api/v[0-9]+/(users/)?websocket$ {
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       client_max_body_size 50M;
       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_buffers 256 16k;
       proxy_buffer_size 16k;
       client_body_timeout 60;
       send_timeout 300;
       lingering_timeout 5;
       proxy_connect_timeout 90;
       proxy_send_timeout 300;
       proxy_read_timeout 90s;
       proxy_pass http://backend;
   }

   location / {
       client_max_body_size 50M;
       proxy_set_header Connection "";
       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_buffers 256 16k;
       proxy_buffer_size 16k;
       proxy_read_timeout 600s;
       proxy_cache mattermost_cache;
       proxy_cache_revalidate on;
       proxy_cache_min_uses 2;
       proxy_cache_use_stale timeout;
       proxy_cache_lock on;
       proxy_http_version 1.1;
       proxy_pass http://backend;
   }
}

systemctl restart nginx

经过这样配置后就可以使用 http://mattermost.company.com 访问。

Mattermost 站点网址

  • 打开 系统控制台 - Mattermost
  • 站点网址 修改为 http://mattermost.company.com,然后保存
  • 执行 systemctl restart mattermost 重启服务

GitLab OAuth 登录

使用 GitLab 登录可以减少需要注册的账号数量,而且方便管理。

GitLab

在 GitLab 中添加应用时,一定要注意,URI 要添加两行

1
2
http://mattermost.company.com/login/gitlab/complete
http://mattermost.company.com/signup/gitlab/complete

其次范围选择 api,否则无法登录。

Mattermost

将上一步产生的应用程序 ID 与密钥填写即可,然后输入 GitLab 地址,保存后注销后在登录界面点击 GitLab Login 按钮登录测试。

邮件通知

可以在公司使用的企业邮箱内创建单独的管理账号,并且赋予多个别名,分别用于不同用途,如 Jenkins、GitLab、Jira、Mattermost 等等。

然后查找企业邮箱对应的 SMTP 发件服务器客户端设置,填写到 系统控制台 - Mattermost,最后使用 测试连接 按钮发送测试邮件即可。

注意:强烈建议使用 TLS 加密连接方式,增强安全性。

WebHooks 通知

Mattermost 中增加 Jenkins 用户,用于发送 Jenkins 打包通知。 需要将用户角色从成员改为团队管理员,这样才可以使用集成中的 WebHooks 功能。

客户端

官方有 Android iOS macOS Windows Linux 客户端,覆盖全面。

打开客户端只需要填写服务器地址,然后使用 GitLab 登录即可。

iOS 客户端登录后可以接收到 Mattermost 发送的消息,即使应用不在前台也不在内网也会收到消息对应的 iOS 通知,因为默认使用 Mattermost 官方的外网推送服务器发送消息。

其他设置

每个团队最多用户数建议根据实际情况由 50 改为更高的的 100

  • 成员和团队 - 系统控制台 - Mattermost

建议 团队队友的名字显示: 改为 若存在昵称显示昵称,否则显示姓名,因为默认显示全名的话是按照名在前姓在后显示的,不符合国人习惯。这样需要所有人将昵称改为姓在前名在后的全名。

  • 成员和团队 - 系统控制台 - Mattermost

关闭邮件注册功能

  • 邮件验证 - 系统控制台 - Mattermost