如何在 Ubuntu 18.04 上设置 Mattermost

作者选择了 自由和开源基金作为 写给捐款计划的一部分接受捐款。

介绍

Mattermost是一个开源协作和消息传递平台,以安全性和可配置为主,提供与 DiscordSlack相似的功能。它提供群组,线程和一对一的消息传输,无限的搜索历史和文件共享功能,双因素授权和通知。Mattermost还提供Webhooks和bot集成,以进一步定制。

在本教程中,您将在 Ubuntu 18.04 服务器上设置 Mattermost Team Edition。 首先,您将安装它并将其暴露在您的域中,以免费的 Let's Encrypt TLS 证书保护。

前提条件

  • 运行 Ubuntu 18.04 的服务器,至少有 2GB RAM, root access, 和一个 sudo, 非 root 账户. 您可以按照 [此初始服务器设置指南] (https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-18-04) 设置此功能 。
  • MariaDB 安装在您的服务器上 。 要了解如何做到这一点,请访问如何在Ubuntu 18.04上安装MariaDB。 您可以遵循教程开头所概括的短版本 。
  • 在您的服务器上以只发送模式安装后缀 。 访问 Ubuntu 18.04 上的 [如何安装和配置 Postfix 作为 Send- Only SMTP 服务器( https://andsky.com/tech/tutorials/how-to-install-and-configure-postfix-as-a-send-only-smtp-server-on-ubuntu-18-04) 设置此选项的教程 。 你会用它来提供 从Mattermost发送电子邮件通知。
  • Nginx 安装在您的服务器上 。 关于如何做到这一点的指南,请填写 [如何在 Ubuntu 18.04 上安装 Nginx (https://andsky.com/tech/tutorials/how-to-install-nginx-on-ubuntu-18-04) 步骤1至4。
  • 一个完整的注册域名来主机Mattermost,指向您的服务器. 此教程将使用最重要的是, 您的域 。 您可以在 [Namecheap] (https://www.namecheap.com/ 上购买域名, 在 [Freenom] (https://www.freenom.com/en/index.html?lang=en ) 上免费获取域名, 或者使用您选择的域名注册员 。 对于DigitalOcean,您可以跟随这个对DigitalOcean DNS的介绍详细了解如何添加. (英语)

<$>[注意] 注意:要让您的 Postfix SMTP 服务器正常工作,您的服务器的 PTR 记录必须匹配 your_domain. 您可以通过在命令提示中键入 hostname 来验证服务器的主机名。

步骤1:安装 Mattermost

在本节中,您将在您的服务器上设置 Mattermost. 这涉及下载最新版本,配置它以使用 MariaDB 数据库,并创建一个 systemd服务,将 Mattermost 始终在背景中运行。

下载 Mattermost

您将将所有与 Mattermost 安装相关的数据存储在名为 ~/mattermost 的文件夹中。

1mkdir ~/mattermost

导航它:

1cd ~/mattermost

您需要转到官方网站上的 Mattermost download页面,并复制最新版本的链接. 写作时,最新版本是 5.24.2. 使用 wget下载,使用以下命令:

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

然后,通过运行来解包档案:

1tar -xvzf mattermost*.gz

此命令将解包在目录中的所有档案文件,其名称以mattermost开始。

您将收到一个名为正如您下载的原始文件的文件夹,其中包含 Mattermost 二进制. 将其复制到 /opt,这样您将能够通过运行系统广泛访问它:

1sudo cp -r mattermost /opt

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

1sudo mkdir /opt/mattermost/data

<$>[注] 注: Mattermost 将存储您和您的团队在该目录中共享的文件和图像,因此请确保您有足够的可用空间。

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

1sudo useradd --system --user-group mattermost

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

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

这样做是这样,以便在发生攻击的情况下,攻击者将被限制在Mattermost目录中,并且无法轻松访问其余的系统。

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

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

现在 Mattermost 二进制已经有了安全的权限,让我们为其设置一个数据库。

创建数据库

开始通过输入 MariaDB 提示来运行:

1sudo mysql

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

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

然后,为 Mattermost 创建数据库:

1CREATE DATABASE mattermost;

要让mmuser访问mattermost数据库,请通过运行:

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

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

1FLUSH PRIVILEGES;

当你完成时,离开提示:

1exit

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

打开它来编辑:

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

找出看起来如下的一些线条:

1[label /opt/mattermost/config/config.json]
2. . .
3"DriverName": "..."
4"DataSource": "..."
5. . .

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

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

保存并关闭文件,当你完成。

您现在已配置 Mattermost 以使用新创建的数据库,以便存储用户、团队和消息,现在您已经准备好为它创建一个systemd服务。

构建系统服务

运行 Mattermost 作为使用systemd的服务,确保它始终在背景中运行。

你会将服务配置存储在名为mattermost.service的文件中,在/lib/systemd/system目录中,在那里systemd存储其服务。

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

添加以下几行:

 1[label /lib/systemd/system/mattermost.service]
 2[Unit]
 3Description=Mattermost
 4After=network.target
 5After=mysql.service
 6Requires=mysql.service
 7
 8[Service]
 9Type=notify
10User=mattermost
11Group=mattermost
12ExecStart=/opt/mattermost/bin/mattermost
13TimeoutStartSec=3600
14Restart=always
15RestartSec=10
16WorkingDirectory=/opt/mattermost
17LimitNOFILE=49152
18
19[Install]
20WantedBy=mysql.service

在这里,您首先指定服务的描述,然后,您声明mysql服务必须在 Mattermost 服务之前启动,因为 Mattermost 服务需要 MariaDB 才能运行。在[Unit]部分之后,您定义了服务的类型。通知意味着过程将告知systemd它已加载。您提供将执行的命令,并将重新启动策略设置为始终

[安装]部分中,您将数据库服务指定为WantedBy参数的值,以确保 Mattermost 与数据库一起重新启动。

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

1sudo systemctl daemon-reload

检查它是否正确加载:

1sudo systemctl status mattermost

您将看到以下输出:

1[secondary_label Output]
2 mattermost.service - Mattermost
3   Loaded: loaded (/lib/systemd/system/mattermost.service; disabled; vendor preset: enabled)
4   Active: inactive (dead)

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

然后,通过运行 Mattermost 服务:

1sudo systemctl enable mattermost

在此步骤中,您已下载 Mattermost,将其配置为使用 MariaDB 数据库,并为其创建了一个systemd服务。

步骤 2 – 在您的域名中曝光 Mattermost

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

在配置 Nginx 之前,您需要在主 Mattermost 配置文件中指定您的域名。

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

找出看起来如下的一行:

1[label /opt/mattermost/config/config.json]
2. . .
3"SiteURL": ""
4. . .

在引用中插入您的域名:

1[label /opt/mattermost/config/config.json]
2...
3"SiteURL": "http://mattermost.your-domain"
4...

保存并关闭文件。

正如您在 Nginx 前提步骤中所学到的,其网站配置文件存储在/etc/nginx/sites-available下,并必须随后被同步链接到/etc/nginx/sites-enabled才能激活。

您将存储将 Mattermost 曝光到您的域名中的配置,以名为 mattermost.conf 的文件,在 /etc/nginx/sites-available 下。

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

添加以下几行:

 1[label /etc/nginx/sites-available/mattermost.conf]
 2upstream backend {
 3   server localhost:8065;
 4   keepalive 32;
 5}
 6
 7proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;
 8
 9server {
10   listen 80;
11   server_name mattermost.your_domain;
12
13   location ~ /api/v[0-9]+/(users/)?websocket$ {
14       proxy_set_header Upgrade $http_upgrade;
15       proxy_set_header Connection "upgrade";
16       client_max_body_size 50M;
17       proxy_set_header Host $http_host;
18       proxy_set_header X-Real-IP $remote_addr;
19       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
20       proxy_set_header X-Forwarded-Proto $scheme;
21       proxy_set_header X-Frame-Options SAMEORIGIN;
22       proxy_buffers 256 16k;
23       proxy_buffer_size 16k;
24       client_body_timeout 60;
25       send_timeout 300;
26       lingering_timeout 5;
27       proxy_connect_timeout 90;
28       proxy_send_timeout 300;
29       proxy_read_timeout 90s;
30       proxy_pass http://backend;
31   }
32
33   location / {
34       client_max_body_size 50M;
35       proxy_set_header Connection "";
36       proxy_set_header Host $http_host;
37       proxy_set_header X-Real-IP $remote_addr;
38       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
39       proxy_set_header X-Forwarded-Proto $scheme;
40       proxy_set_header X-Frame-Options SAMEORIGIN;
41       proxy_buffers 256 16k;
42       proxy_buffer_size 16k;
43       proxy_read_timeout 600s;
44       proxy_cache mattermost_cache;
45       proxy_cache_revalidate on;
46       proxy_cache_min_uses 2;
47       proxy_cache_use_stale timeout;
48       proxy_cache_lock on;
49       proxy_http_version 1.1;
50       proxy_pass http://backend;
51   }
52}

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

在此文件中,您定义了 Nginx 应该倾听 HTTP 端口 80. 然后,您指定一个 server_name,告诉 Nginx 哪个域接受请求并应用此特定配置。

要激活此站点配置,您需要在 /etc/nginx/sites-enabled 文件夹中创建一个对该站点的 symlink:

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

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

1sudo nginx -t

您将看到以下输出:

1[secondary_label Output]
2nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
3nginx: configuration file /etc/nginx/nginx.conf test is successful

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

1sudo systemctl restart nginx

然后,开始运行 Mattermost 服务:

1sudo systemctl start mattermost

当这个命令完成时,尝试在浏览器中导航到您的域,您应该看到一个请求您登录的页面:

Mattermost - Sign up prompt

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

步骤三:确保您的域名

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

您应该已经安装了 Certbot 作为前提条件的一部分,所以您只需要通过运行安装其 Nginx 插件:

1sudo apt install python3-certbot-nginx

此外,作为前提条件的一部分,您已启用ufw(不复杂的防火墙),并将其配置为允许未加密的 HTTP 流量。

1sudo ufw allow https

产量将是:

1[secondary_label Output]
2Rule added
3Rule added (v6)

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

1sudo ufw reload

结果将显示:

1[secondary_label Output]
2Firewall reloaded

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

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

在这个命令中,你运行certbot来请求您的域的证书 - 你通过域名与-d参数。--nginx旗帜告诉它自动更改 Nginx网站配置以支持HTTPS。

如果这是您第一次运行 Certbot,您将被要求提供紧急通知的电子邮件地址,并接受 EFF 的服务条款。

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

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

您的输出将类似于此:

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

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

由于您的域现在可以使用 HTTPS 访问,您需要在主 Mattermost 配置文件中纠正您的域的 URL。

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

再一次,找到看起来像这样的线条:

1[label /opt/mattermost/config/config.json]
2. . .
3"SiteURL": "http://mattermost.your-domain"
4. . .

http更改为https:

1[label /opt/mattermost/config/config.json]
2. . .
3"SiteURL": "https://mattermost.your-domain"
4. . .

这就是你需要编辑的,所以保存和关闭文件。

重启 Mattermost 运行:

1sudo systemctl restart mattermost

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

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

步骤 4 – 设置 Mattermost

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

当您第一次访问 Mattermost 时,您需要为您的服务器创建具有管理权限的帐户. 如果您已经有帐户,您可以登录。

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

Mattermost - Creating a Team

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

Mattermost - Team URL

一旦完成,点击 Finish. Mattermost 将创建你的团队,你跳过教程后,你会看到主界面,在那里你会花大部分时间沟通:

Mattermost - Main Interface

接口将在下一步中详细解释。 若要访问设置,请点击左上角的用户名,然后点击 System Console

Mattermost - Selecting System Console

在左侧是提供访问 Mattermost 配置部分的菜单. 您将首先设置电子邮件通知,然后单击 SMTP选项,可以在 环境下找到:

Mattermost - SMTP Section

若要连接到您作为先决条件的一部分安装的 Postfix 服务器,请键入Localhost作为 SMTP 服务器25作为 SMTP 服务器端口。完成后,点击蓝色 保存按钮,然后按下位于下方的 测试连接按钮。

Mattermost - SMTP Verification Successful

您现在可以检查您注册的电子邮件的收件箱。您会看到 Mattermost 的消息,称电子邮件设置是正确的。 如果您没有收到,请检查您的垃圾邮件文件夹。如果您收到 Mattermost 的错误,请双重检查您输入的内容,如果需要的话,请再次通过前提教程。

现在你已经验证了电子邮件的运行,你需要通过在菜单中的 网站配置下选择 通知来启用电子邮件通知,设置 启用电子邮件通知设置为真实,并将 通知从地址设置为你选择的电子邮件地址,例如mattermost@your_domain

因为它不需要实际存在,并且不会被监控,所以键入不回复作为通知显示名称**,这是发件人的名称,将显示在电子邮件客户端中。

您已在全球范围内启用电子邮件通知,您现在可以通过选择 自定义选项在 网站配置下选择可选更改服务器品牌,在这里您可以设置 网站名称网站描述,以及上传自定义品牌图像和文本。

您可以通过点击左上角的用户名离开 系统控制台并从下滑菜单中选择第一个选项。

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

结论

您现在拥有自己的可扩展的,自托邮件平台,您和您的团队可以使用它在所有设备上协作,您现在可以更有效地通信,共享文件,并轻松搜索消息和渠道。

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

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

Published At
Categories with 技术
comments powered by Disqus