作为Write for DOnations计划的一部分,作者选择了免费和开源基金来接受捐赠。
介绍
Mattermost是一个开源协作和消息传递平台,其创建时考虑到了安全性和可配置性,提供了与Discord或Slack相当的功能。它提供群组、线程和一对一消息传递、无限搜索历史记录和文件共享功能、双因素授权和通知。Mattermost 还提供了 webhooks 和机器人集成以进行进一步的定制。由于其响应式 Web 界面和专用移动应用程序,可以从各种类型的现代设备访问它。
在本教程中,您将在 Ubuntu 18.04 服务器上设置Mattermost Team Edition。首先,您将安装它并在您的域中公开它,并使用免费的Let’s Encrypt TLS 证书进行保护。然后,您将启用电子邮件通知、自定义品牌并创建您的留言板(在 Mattermost 中称为团队)。
先决条件
- 运行 Ubuntu 18.04 的服务器,具有至少 2GB RAM、root 访问权限和 sudo、非 root 帐户。您可以按照此初始服务器设置指南进行设置。
- MariaDB 安装在您的服务器上。要了解如何执行此操作,请访问如何在 Ubuntu 18.04 上安装 MariaDB。您可以按照本教程开头概述的简短版本进行操作。
- 在您的服务器上以仅发送模式安装 Postfix。访问如何在 Ubuntu 18.04教程中安装和配置 Postfix 作为仅发送 SMTP 服务器以进行设置。您将使用它来启用从 Mattermost 发送电子邮件通知。
- 您的服务器上安装了 Nginx。有关如何执行此操作的指南,请完成如何在 Ubuntu 18.04 上安装 Nginx 的步骤 1 到 4 。
- 一个完全注册的域名来托管 Mattermost,指向您的服务器。本教程将贯穿始终。你可以购买一个域名Namecheap,免费获得一个在Freenom,或使用你选择的域名注册商。对于 DigitalOcean,您可以按照DigitalOcean DNS的介绍了解有关如何添加它们的详细信息。
mattermost.your-domain
注意:为了让您的 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
找到如下所示的行:
. . .
"DriverName": "..."
"DataSource": "..."
. . .
将它们修改为如下所示,替换your_mmuser_password
为您为mmuser
数据库帐户设置的密码:
"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
添加以下几行:
[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
找到如下所示的行:
. . .
"SiteURL": ""
. . .
在引号中插入您的域名:
...
"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
添加以下几行:
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
(Uncomplicated Firewall) 并将其配置为允许未加密的 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
再次找到如下所示的行:
. . .
"SiteURL": "http://mattermost.your-domain"
. . .
更改http
为https
:
. . .
"SiteURL": "https://mattermost.your-domain"
. . .
这就是您需要编辑的全部内容,因此请保存并关闭文件。
通过运行重新启动 Mattermost:
- sudo systemctl restart mattermost
您现在可以在浏览器中重新加载您的 Mattermost 域并观察站点地址左侧的挂锁,这意味着您已正确保护您的连接。
现在您的 TLS 证书已成功配置并且您的域可通过安全连接访问,您已准备好配置 Mattermost。
第 4 步 — 设置 Mattermost
在本节中,您将在 Mattermost 中创建您的团队、设置电子邮件通知并更改服务器品牌。
当您第一次访问 Mattermost 时,您需要创建一个对您的服务器具有管理员权限的帐户。如果您已经有帐户,则可以改为登录。登录后,您会看到一个页面,告诉您没有可以加入的团队。
要解决此问题,请选择创建团队。您将看到一个页面,要求您为您的团队命名(例如,Sammy
):
输入您选择的名称,然后单击下一步。然后它会要求您在您的域中为您的团队定义一个网址,这将是您的团队在 Mattermost 中的访问点:
您可以保持 URL 不变。完成后,单击“完成”。Mattermost 将创建您的团队,在您跳过本教程后,您将看到主界面,您将在其中花费大部分时间进行交流:
该接口将在下一步中详细说明。要访问设置,请单击左上角的用户名,然后单击System Console。只有当您是管理员用户时才能访问此选项。
左侧是一个菜单,提供对 Mattermost 配置部分的访问。您将首先设置电子邮件通知,因此单击SMTP选项,该选项可在Environment下找到:
要连接到您作为先决条件的一部分安装Postfix的服务器,请在localhost
作为SMTP服务器,并25
作为SMTP服务器端口。完成后单击蓝色的保存按钮,然后按下位于更下方的测试连接按钮。您将在绿色框中收到一条消息,指出发送电子邮件时未报告错误。请检查您的收件箱以确保。
您现在可以检查您注册时使用的电子邮件的收件箱。您会发现来自 Mattermost 的一条消息,说电子邮件设置已正确设置。如果您没有收到,请检查您的垃圾邮件文件夹。如果您收到来自 Mattermost 的错误,请仔细检查您输入的内容,如果需要,请再次阅读先决条件教程。
现在你已经验证了电子邮件在工作,你需要选择启用电子邮件通知通知下方站点配置在菜单中。将启用电子邮件通知设置为true
,并将通知发件人地址设置为您选择的电子邮件地址,例如。mattermost@your_domain
因为它并不需要真正存在,不会被监控,类型no-reply
为通知显示名称,这是发件人的名称将在电子邮件客户端显示。您可以选择启用电子邮件批处理,将多条未读邮件压缩到一封电子邮件中,以减少发送给团队成员的电子邮件总数。完成修改设置后,单击保存。
您已全局启用电子邮件通知,现在您可以通过选择“站点配置”下方的“自定义”选项来选择性地更改服务器品牌。在这里您可以设置站点名称和站点描述,以及上传自定义品牌图片和文本。
您可以通过单击左上角的用户名并从下拉菜单中选择第一个选项来退出系统控制台。
您已在 Mattermost 中创建了您的团队并设置了电子邮件通知,因此您将随时了解团队中发生的新讨论。
结论
您现在拥有自己的可扩展、自托管的消息传递平台,您和您的团队可以使用该平台在所有设备上进行协作。现在,您将能够更高效地交流、共享文件以及轻松地跨消息和频道进行搜索。
Mattermost 不提供视频和音频会议功能。要设置视频会议,请查看我们关于Jitsi Meet的教程,这是一个提供加密多人会议室的开源应用程序。
如果您想了解有关使用 Mattermost 用户界面的更多信息,请访问官方文档。