如何在Ubuntu20.04上设置Mattermost

来自菜鸟教程
跳转至:导航、​搜索

作为 Write for DOnations 计划的一部分,作者选择了 Free and Open Source Fund 来接受捐赠。

介绍

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

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

先决条件

  • 一台运行 Ubuntu 20.04 的服务器,至少有 2GB RAM、root 访问权限和一个 sudo、非 root 帐户。 您可以按照 this Initial Server Setup Guide 进行设置。
  • MariaDB 安装在您的服务器上。 要了解如何执行此操作,请访问 如何在 Ubuntu 20.04 上安装 MariaDB。 您可以按照教程开头概述的简短版本进行操作。
  • Postfix 以仅发送模式安装在您的服务器上。 访问 如何在 Ubuntu 20.04 上安装和配置 Postfix 作为仅发送 SMTP 服务器的教程进行设置。 您将使用它来启用从 Mattermost 发送电子邮件通知。
  • Nginx 安装在您的服务器上。 有关如何执行此操作的指南,请完成 如何在 Ubuntu 20.04 上安装 Nginx 的步骤 1 到 4。
  • 托管 Mattermost 的完全注册域名,指向您的服务器。 本教程将自始至终使用 mattermost.your_domain。 您可以在 Namecheap 上购买一个域名,在 Freenom 上免费获得一个域名,或者使用您选择的域名注册商。 对于DigitalOcean,您可以关注这个DigitalOcean DNS的介绍,详细了解如何添加它们。

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


第 1 步 — 安装 Mattermost

在本节中,您将在您的服务器上设置 Mattermost。 这需要下载最新版本,将其配置为使用 MariaDB 数据库,并创建一个 systemd 服务,使 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

该命令将解压目录中所有以 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 作为服务运行可确保它始终在后台运行。

您将服务配置存储在 /lib/systemd/system 目录中名为 mattermost.service 的文件中,其中 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 才能激活。

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

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

您将看到以下输出:

Outputnginx: 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 安装。 在下一步中,您将通过应用免费的 Let's Encrypt TLS 证书来保护它。

第 3 步 — 保护您的域

在本节中,您将使用 Let's Encrypt TLS 证书保护您的域,您将使用 Certbot 进行配置。

您应该已经安装了 Certbot 作为先决条件的一部分,因此您只需要通过运行以下命令来安装其 Nginx 插件:

sudo apt install python3-certbot-nginx

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

sudo ufw allow https

输出将是:

OutputRule added
Rule added (v6)

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

sudo ufw reload

输出将显示:

OutputFirewall reloaded

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

sudo certbot --nginx -d mattermost.your_domain

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

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

OutputPlease 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

您的输出将与此类似:

OutputIMPORTANT 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"
. . .

http 更改为 https

/opt/mattermost/config/config.json

. . .
"SiteURL": "https://mattermost.your_domain"
. . .

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

通过运行重新启动 Mattermost:

sudo systemctl restart mattermost

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

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

第 4 步 — 设置 Mattermost

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

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

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

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

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

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

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

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

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

现在您已经验证了电子邮件正在工作,您需要通过选择菜单中 站点配置 下的 Notifications 来启用电子邮件通知。 将 Enable Email Notifications 设置为 true 并将 Notification From Address 设置为您选择的电子邮件地址,例如 mattermost@your_domain

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

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

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

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

结论

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

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