如何在 Ubuntu 18.04 上设置 Mattermost

作为Write for DOnations计划的一部分,作者选择了免费和开源基金来接受捐赠

介绍

Mattermost是一个开源协作和消息传递平台,其创建时考虑到了安全性和可配置性,提供了与DiscordSlack相当的功能它提供群组、线程和一对一消息传递、无限搜索历史记录和文件共享功能、双因素授权和通知。Mattermost 还提供了 webhooks 和机器人集成以进行进一步的定制。由于其响应式 Web 界面和专用移动应用程序,可以从各种类型的现代设备访问它。

在本教程中,您将在 Ubuntu 18.04 服务器上设置Mattermost Team Edition首先,您将安装它并在您的域中公开它,并使用免费的Let’s Encrypt TLS 证书进行保护。然后,您将启用电子邮件通知、自定义品牌并创建您的留言板(在 Mattermost 中称为团队)。

先决条件

注意:为了让您的 Postfix SMTP 服务器正常工作,您服务器的 PTR 记录必须匹配your_domain. 您可以通过hostname在命令提示符下键入来验证服务器的主机名输出应与您在创建服务器时为其指定的名称相匹配。

步骤 1 — 安装 Mattermost

在本节中,您将在服务器上设置 Mattermost。这需要下载最新版本,将其配置为使用 MariaDB 数据库,并创建一个systemd让 Mattermost 始终在后台运行服务。

下载 Mattermost

您将所有与 Mattermost 安装相关的数据存储在名为~/mattermost. 通过运行以下命令来创建它:

  • mkdir ~/mattermost

导航到它:

  • cd ~/mattermost

您需要前往官方网站上Mattermost 下载页面并复制最新版本的链接。在撰写本文时,最新版本是5.24.2. 使用wget以下命令下载它

  • wget https://releases.mattermost.com/5.24.2/mattermost-5.24.2-linux-amd64.tar.gz

然后,通过运行解压缩存档:

  • tar -xvzf mattermost*.gz

此命令将解压目录中名称以 .zip 开头的所有存档文件mattermost

您将获得一个与您下载的原始文件完全相同的文件夹,其中包含 Mattermost 二进制文件。将其复制到,/opt以便您可以通过运行在系统范围内访问它:

  • sudo cp -r mattermost /opt

然后,为 Mattermost 创建一个文件夹,用于存储用户数据:

  • sudo mkdir /opt/mattermost/data

注意: Mattermost 会将您和您的团队共享的文件和图像存储在此目录中,因此请确保您在它所在的驱动器上有足够的可用空间。

接下来,为 Mattermost 创建一个用户和组:

  • sudo useradd --system --user-group mattermost

然后,让新创建的用户及其组拥有数据文件夹:

  • sudo chown -R mattermost:mattermost /opt/mattermost

这样做是为了在发生违规事件时,攻击者将被限制在 Mattermost 目录中,并且无法轻松访问系统的其余部分。

最后,使/opt/mattermost目录可按组写入:

  • sudo chmod -R g+w /opt/mattermost

既然 Mattermost 二进制文件已经到位并具有安全权限,让我们为它设置一个数据库。

设置数据库

首先通过运行以下命令输入 MariaDB 提示符:

  • sudo mysql

创建一个mmuser通过运行以下命令调用的数据库用户,替换your_mmuser_password为您选择的密码:

  • CREATE USER 'mmuser'@'%' IDENTIFIED BY 'your_mmuser_password';

然后,为 Mattermost 创建一个数据库:

  • CREATE DATABASE mattermost;

mmuser访问mattermost数据库,请通过运行以下命令授予它访问权限:

  • GRANT ALL PRIVILEGES ON mattermost.* TO 'mmuser'@'%';

然后,重新加载授权表以立即应用更改:

  • FLUSH PRIVILEGES;

完成后,退出提示:

  • exit

创建数据库和随附用户后,您现在将编辑主要的 Mattermost 配置文件并设置正确的数据库连接字符串。

打开它进行编辑:

  • sudo nano /opt/mattermost/config/config.json

找到如下所示的行:

/opt/mattermost/config/config.json
. . .
"DriverName": "..."
"DataSource": "..."
. . .

将它们修改为如下所示,替换your_mmuser_password为您为mmuser数据库帐户设置的密码

/opt/mattermost/config/config.json
"DriverName": "mysql"
"DataSource": "mmuser:your_mmuser_password@tcp(localhost:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s"

完成后保存并关闭文件。

您现在已将 Mattermost 配置为使用新创建的数据库来存储用户、团队和消息。现在您已准备好继续为其创建systemd服务。

创建一个 systemd 服务

将 Mattermost 作为服务运行使用systemd可确保它始终在后台运行。

您将服务配置存储在一个名为 的文件中mattermost.service该文件位于存储其服务/lib/systemd/system目录中systemd使用文本编辑器创建它:

  • sudo nano /lib/systemd/system/mattermost.service

添加以下几行:

/lib/systemd/system/mattermost.service
[Unit]
Description=Mattermost
After=network.target
After=mysql.service
Requires=mysql.service

[Service]
Type=notify
User=mattermost
Group=mattermost
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
LimitNOFILE=49152

[Install]
WantedBy=mysql.service

在这里,您首先指定服务的描述。然后,您声明该mysql服务必须在 Mattermost 服务之前启动,因为 Mattermost 服务需要运行 MariaDB 才能工作。在该[Unit]部分之后,您定义服务的类型。notify意味着该进程将通知systemd它已加载。您提供将要执行的命令并将重新启动策略设置为always您还可以定义进程的工作目录以及它应该作为哪个用户和组运行。

在该[Install]部分中,您将数据库服务指定为WantedBy参数值,以确保 Mattermost 与数据库一起重新启动。当数据库自动更新时,省略此设置可能会导致问题,因为如果不重新启动 Mattermost 可能会停止工作。

保存并关闭文件,然后通过运行以下命令重新加载所有服务:

  • sudo systemctl daemon-reload

检查它是否正确加载:

  • sudo systemctl status mattermost

您将看到以下输出:

Output
● mattermost.service - Mattermost Loaded: loaded (/lib/systemd/system/mattermost.service; disabled; vendor preset: enabled) Active: inactive (dead)

如果systemd报告错误,请仔细检查服务文件的文件名、位置和内容的有效性。

然后,通过运行以下命令启用 Mattermost 服务:

  • sudo systemctl enable mattermost

在这一步中,您已经下载了 Mattermost,将其配置为使用 MariaDB 数据库,并systemd为其创建了一个服务。在下一步中,您将在您的域中公开它。

第 2 步 — 在您的域中公开 Mattermost

在本节中,您将 Nginx 配置为 Mattermost 的反向代理服务器。

在配置 Nginx 之前,您需要在主 Mattermost 配置文件中指定您的域。打开它进行编辑:

  • sudo nano /opt/mattermost/config/config.json

找到如下所示的行:

/opt/mattermost/config/config.json
. . .
"SiteURL": ""
. . .

在引号中插入您的域名:

/opt/mattermost/config/config.json
...
"SiteURL": "http://mattermost.your-domain"
...

保存并关闭文件。

正如您在 Nginx 先决条件步骤中了解到的,它的站点配置文件存储在下面,/etc/nginx/sites-available并且必须稍后被符号链接以/etc/nginx/sites-enabled激活。

您将在您的域中公开 Mattermost 的配置存储在一个名为 的文件中mattermost.conf,在/etc/nginx/sites-available. 使用您的编辑器创建它:

  • sudo nano /etc/nginx/sites-available/mattermost.conf

添加以下几行:

/etc/nginx/sites-available/mattermost.conf
upstream backend {
   server localhost: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.your_domain;

   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;
   }
}

替换为您想要的域,然后保存并关闭文件。mattermost.your-domain

在此文件中,您定义 Nginx 应侦听 HTTP 端口80然后,您指定一个server_name告诉 Nginx 接受请求的域并应用此特定配置。接下来的两个块进一步配置代理连接,以便 Mattermost 能够正常工作。

要激活此站点配置,您需要/etc/nginx/sites-enabled通过运行以下命令文件夹中创建指向它的符号链接

  • sudo ln -s /etc/nginx/sites-available/mattermost.conf /etc/nginx/sites-enabled/mattermost.conf

要测试配置的有效性,请运行以下命令:

  • sudo nginx -t

您将看到以下输出:

Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

要使配置生效,您需要重新启动 Nginx:

  • sudo systemctl restart nginx

然后,通过运行以下命令启动 Mattermost 服务:

  • sudo systemctl start mattermost

此命令完成后,尝试在浏览器中导航到您的域。您应该会看到一个要求您注册的页面:

Mattermost - 注册提示

您现在可以在您的域中使用并访问您的 Mattermost 安装。在下一步中,您将通过应用免费的 Let’s Encrypt TLS 证书来保护它。

第 3 步 – 保护您的域

在本部分中,您将使用 Let’s Encrypt TLS 证书保护您的域,您将使用 Certbot 提供该证书。

你应该已经安装了 Certbot 作为先决条件的一部分,所以你只需要通过运行来安装它的 Nginx 插件:

  • sudo apt install python3-certbot-nginx

此外,作为先决条件的一部分,您启用了ufw(Uncomplicated Firewall) 并将其配置为允许未加密的 HTTP 流量。为了能够访问受保护的站点,您需要通过运行以下命令将其配置为接受加密流量:

  • sudo ufw allow https

输出将是:

Output
Rule added Rule added (v6)

与 Nginx 类似,您需要重新加载它以使配置生效:

  • sudo ufw reload

输出将显示:

Output
Firewall reloaded

要为您的域请求证书,请运行以下命令:

  • sudo certbot --nginx -d mattermost.your-domain

在此命令中,您运行certbot为您的域请求证书 – 您通过-d参数传递域名--nginx标志告诉它自动更改 Nginx 站点配置以支持 HTTPS。记得用你的域名替换mattermost.your-domain

如果这是您第一次运行 Certbot,系统会要求您提供紧急通知的电子邮件地址并接受 EFF 的服务条款。然后,Certbot 将从 Let’s Encrypt 为您的域请求证书。然后它会询问您是否要将所有 HTTP 流量重定向到 HTTPS:

Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

建议选择第二个选项以最大限度地提高安全性。输入您的选择后,按ENTER

您的输出将类似于:

Output
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/mattermost.your-domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/mattermost.your-domain/privkey.pem Your cert will expire on 2020-09-28. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

这意味着 Certbot 已成功生成 TLS 证书并将其应用于您域的 Nginx 配置。

由于您的域现在可以使用 HTTPS 访问,您需要在主 Mattermost 配置文件中更正域的 URL。打开它进行编辑:

  • sudo nano /opt/mattermost/config/config.json

再次找到如下所示的行:

/opt/mattermost/config/config.json
. . .
"SiteURL": "http://mattermost.your-domain"
. . .

更改httphttps

/opt/mattermost/config/config.json
. . .
"SiteURL": "https://mattermost.your-domain"
. . .

这就是您需要编辑的全部内容,因此请保存并关闭文件。

通过运行重新启动 Mattermost:

  • sudo systemctl restart mattermost

您现在可以在浏览器中重新加载您的 Mattermost 域并观察站点地址左侧的挂锁,这意味着您已正确保护您的连接。

现在您的 TLS 证书已成功配置并且您的域可通过安全连接访问,您已准备好配置 Mattermost。

第 4 步 — 设置 Mattermost

在本节中,您将在 Mattermost 中创建您的团队、设置电子邮件通知并更改服务器品牌。

当您第一次访问 Mattermost 时,您需要创建一个对您的服务器具有管理员权限的帐户。如果您已经有帐户,则可以改为登录。登录后,您会看到一个页面,告诉您没有可以加入的团队。

要解决此问题,请选择创建团队您将看到一个页面,要求您为您的团队命名(例如,Sammy):

Mattermost - 创建团队

输入您选择的名称,然后单击下一步然后它会要求您在您的域中为您的团队定义一个网址,这将是您的团队在 Mattermost 中的访问点:

Mattermost - 团队网址

您可以保持 URL 不变。完成后,单击“完成”Mattermost 将创建您的团队,在您跳过本教程后,您将看到主界面,您将在其中花费大部分时间进行交流:

Mattermost - 主界面

该接口将在下一步中详细说明。要访问设置,请单击左上角的用户名,然后单击System Console只有当您是管理员用户时才能访问此选项。

Mattermost - 选择系统控制台

左侧是一个菜单,提供对 Mattermost 配置部分的访问。您将首先设置电子邮件通知,因此单击SMTP选项,该选项可在Environment下找到

Mattermost - SMTP 部分

要连接到您作为先决条件的一部分安装Postfix的服务器,请在localhost作为SMTP服务器,并25作为SMTP服务器端口完成后单击蓝色的保存按钮,然后按下位于更下方测试连接按钮。您将在绿色框中收到一条消息,指出发送电子邮件时未报告错误。请检查您的收件箱以确保。

Mattermost - SMTP 验证成功

您现在可以检查您注册时使用的电子邮件的收件箱。您会发现来自 Mattermost 的一条消息,说电子邮件设置已正确设置。如果您没有收到,请检查您的垃圾邮件文件夹。如果您收到来自 Mattermost 的错误,请仔细检查您输入的内容,如果需要,请再次阅读先决条件教程。

现在你已经验证了电子邮件在工作,你需要选择启用电子邮件通知通知下方站点配置在菜单中。启用电子邮件通知设置为true,并将通知发件人地址设置为您选择的电子邮件地址,例如mattermost@your_domain

因为它并不需要真正存在,不会被监控,类型no-reply通知显示名称,这是发件人的名称将在电子邮件客户端显示。您可以选择启用电子邮件批处理,将多条未读邮件压缩到一封电子邮件中,以减少发送给团队成员的电子邮件总数。完成修改设置后,单击保存

您已全局启用电子邮件通知,现在您可以通过选择“站点配置”下方的“自定义”选项来选择性地更改服务器品牌在这里您可以设置站点名称站点描述,以及上传自定义品牌图片和文本。

您可以通过单击左上角的用户名并从下拉菜单中选择第一个选项来退出系统控制台

您已在 Mattermost 中创建了您的团队并设置了电子邮件通知,因此您将随时了解团队中发生的新讨论。

结论

您现在拥有自己的可扩展、自托管的消息传递平台,您和您的团队可以使用该平台在所有设备上进行协作。现在,您将能够更高效地交流、共享文件以及轻松地跨消息和频道进行搜索。

Mattermost 不提供视频和音频会议功能。要设置视频会议,请查看我们关于Jitsi Meet的教程,这是一个提供加密多人会议室的开源应用程序。

如果您想了解有关使用 Mattermost 用户界面的更多信息,请访问官方文档

觉得文章有用?

点个广告表达一下你的爱意吧 !😁