如何在 Rocky Linux 9 上安装 Mattermost
在此页面上
- 先决条件
- 安装 PostgreSQL 和 Nginx
- 打开 HTTP 和 HTTPS 端口
- 创建 PostgreSQL 用户和数据库
- 下载最重要的
- 使用 PostgreSQL 配置 Mattermost
- 将 Mattermost 作为 systemd 服务运行
- 将 Nginx 设置为反向代理
- 使用 Mattermost 创建第一个工作区
- 结论
Mattermost 是适合您组织的开源自托管消息系统。它是 Slack 和 Microsoft Teams 等服务的替代方案。 Mattermost 结合了多种功能,包括文件共享、搜索、自动化和众多第三方集成。它是适合您的内部组织和公司的协作平台和消息系统。
本指南教您如何在 Rocky Linux 9 服务器上安装 Mattermost。您将设置 Mattermost,使用 PostgreSQL 作为数据库,Nginx 作为反向代理,然后在 Mattermost 中创建第一个工作区。
先决条件
展望未来,请确保您满足以下要求:
- Rocky Linux 9 服务器
- 具有管理员权限的非 root 用户
- 域名指向服务器IP地址
- 状态为许可的 SELinux
- 启用防火墙
安装 PostgreSQL 和 Nginx
在本部分中,您将安装 Mattermost 的依赖项,其中包括 PostgreSQL 服务器、Nginx Web 服务器和 Certbot。您还将添加 EPEL 存储库并启用 PostgreSQL 16 的存储库模块。
首先,运行下面的“dnf”命令将 EPEL 存储库添加到您的系统。
sudo dnf install epel-release -y
然后使用以下命令启用 PostgreSQL 16 存储库模块。
sudo dnf module enable postgresql:16
现在安装 PostgreSQL、Nginx Web 服务器和 Certbot 等依赖项作为 Mattermost 的依赖项。输入“Y”以确认安装。
sudo dnf install postgresql-server postgresql-contrib nginx certbot wget curl
对于 PostgreSQL 服务器,要使其正常工作,请执行以下命令来初始化 PostgreSQL 数据目录。
sudo /usr/bin/postgresql-setup --initdb
接下来,运行下面的“systemctl”命令来启动并启用“postgresql”服务。然后,验证它以确保 PostgreSQL 正在运行。
sudo systemctl enable --now postgresql
sudo systemctl status postgresql
以下输出显示 PostgreSQL 服务器已启用并正在运行。
最后,使用以下命令启动并启用 Nginx Web 服务器。然后,检查 Nginx 服务。
sudo systemctl enable --now nginx
sudo systemctl status nginx
如下所示,Nginx 正在运行并启用。
打开 HTTP 和 HTTPS 端口
安装依赖项后,您需要在系统上打开 HTTP 和 HTTPS 端口。在 Rocky Linux 上,您将使用 firewalld,通过“firewall-cmd”实用程序进行管理。
使用下面的“firewall-cmd”命令在firewalld 上打开HTTP 和HTTPS 服务。添加后,您将看到输出“成功”。
sudo firewall-cmd --add-service={http,https} --permanent
现在使用以下命令重新加载firewalld以应用新规则。
sudo firewall-cmd --reload
最后,使用以下命令检查防火墙上的规则。您将看到在firewalld 中启用了HTTP 和HTTPS 服务。
sudo firewall-cmd --list-all
创建 PostgreSQL 用户和数据库
在本部分中,您将 PostgreSQL 身份验证方法设置为“scram-sha-256”,然后创建一个新的数据库和用户,Mattermost 将通过“psql”或 PostgreSQL shell 使用该数据库和用户。
要更改默认密码身份验证方法,请使用“nano”编辑器打开 PostgreSQL 配置“/var/lib/pgsql/data/pg_hba.conf”。
sudo nano /var/lib/pgsql/data/pg_hba.conf
使用“scram-sha-256”更改本地主机连接的默认身份验证方法,如下所示:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host all all ::1/128 scram-sha-256
保存文件并退出编辑器。
现在运行下面的“systemctl”命令来重新启动 PostgreSQL 并应用您的更改。
sudo systemctl restart postgresql
配置 PostgreSQL 后,您将为 Mattermost 创建新的数据库和用户。
使用下面的“psql”命令登录到 PostgreSQL 服务器。
sudo -u postgres psql
现在运行以下查询来创建一个新数据库“mattermost”、一个新用户“mmuser”和密码“password”。
CREATE DATABASE mattermost;
CREATE USER mmuser WITH PASSWORD 'password';
GRANT ALL ON DATABASE mattermost TO mmuser;
ALTER DATABASE mattermost OWNER TO mmuser;
GRANT USAGE, CREATE ON SCHEMA PUBLIC TO mmuser;
使用以下命令检查 PostgreSQL 中的数据库和用户列表 - 您将看到数据库“mattermost”和用户“mmuser”已创建。
\l
\du
输入“quit”退出 PostgreSQL 服务器。
接下来,运行下面的“psql”命令,使用“mmuser”登录到数据库“mattermost”的 PostgreSQL 服务器。出现提示时输入您的密码。
sudo -u postgres psql --host=localhost --dbname=mattermost --username=mmuser --password
如果成功,请使用以下查询检查连接状态。您将看到您已使用“mmuser”连接到“mattermost”数据库。
\conninfo
最后,输入“quit”退出。
下载最重要的
现在您已经配置了 PostgreSQL,您将创建一个新用户,下载 Mattermost 源代码,然后配置 Mattermost 安装目录。
下载 Mattermost 之前,请运行以下命令在您的系统上添加新用户“mattermost”。
sudo useradd --system --user-group mattermost
使用“wget”命令下载 Mattermost 源代码,并使用下面的“tar”命令将其解压。 Mattermost 源代码将被提取到“mattermost”目录。
wget https://releases.mattermost.com/10.0.1/mattermost-10.0.1-linux-amd64.tar.gz
tar xf mattermost-10.0.1-linux-amd64.tar.gz
将“mattermost”目录移动到“/opt”,并在其顶部创建一个新的“data”目录。在这种情况下,Mattermost 将安装在“/opt/mattermost”目录中。
mv mattermost /opt/
mkdir -p /opt/mattermost/data
最后,运行以下命令将“/opt/mattermost”目录的所有权更改为“mattermost”用户。另外,请确保组“mattermost”具有读写访问权限。
sudo chown -R mattermost:mattermost /opt/mattermost
sudo chmod g+rw /opt/mattermost
使用 PostgreSQL 配置 Mattermost
在本部分中,您将使用 PostgreSQL 配置 Mattermost。您将编辑 Mattermost 配置文件“/opt/mattermost/config/config.json”,为 Mattermost 设置域名,然后将 PostgreSQL 数据库添加到 Mattermost。
使用“nano”编辑器打开默认的 Mattermost 配置“/opt/mattermost/config/config.json”。
sudo nano /opt/mattermost/config/config.json
将默认的“SiteURL”更改为您的 Mattermost 域名。在本例中,我们将使用域名“https://space.howtoforge.local”。
"ServiceSettings": {
"SiteURL": "https://mattermost.howtoforge.local",
移至“SqlSettings”部分并更改数据库配置,如下所示。确保调整数据库名称、用户和密码。
"SqlSettings": {
"DriverName": "postgres",
"DataSource": "postgres://mmuser:password@localhost/mattermost?sslmode=disable&connect_timeout=10&binary_parameters=yes",
完成后,保存文件并退出编辑器。
将 Mattermost 作为 systemd 服务运行
现在您已将 Mattermost 与 PostgreSQL 集成,您将为 Mattermost 创建一个新的服务文件。这允许您在后台运行 Mattermost 并通过“systemctl”命令行轻松管理 Mattermost。
使用“nano”编辑器创建新的 systemd 服务文件“/etc/systemd/system/mattermost.service”。
sudo nano /etc/systemd/system/mattermost.service
插入以下配置以将 Mattermost 作为 systemd 服务运行。
[Unit]
Description=Mattermost
After=network.target
After=postgresql.service
BindsTo=postgresql.service
[Service]
Type=notify
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
KillMode=mixed
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152
[Install]
WantedBy=multi-user.target
保存并退出文件。
现在运行下面的“systemctl”命令来重新加载 systemd 管理器并应用新的“mattermost”服务。
sudo systemctl daemon-reload
重新加载 systemd 后,运行以下“systemctl”命令来启动并启用“mattermost”服务。然后,验证它以确保服务正在运行。
sudo systemctl enable --now mattermost
sudo systemctl status mattermost
如果一切顺利,您将看到“mattermost”服务正在运行并启用的配置,如下所示:
将 Nginx 设置为反向代理
此时,Mattermost 已在您的 Rocky Linux 服务器上启动并运行。为了使其可访问,您需要将 Nginx 设置为启用安全 HTTPS 的反向代理。
在配置 Nginx Web 服务器之前,请运行以下命令停止 Nginx 服务并从 LetsEncrypt 生成 SSL 证书。请务必使用您的信息更改域名和电子邮件地址。
sudo systemctl stop nginx
sudo certbot --certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email -d space.howtoforge.local
该过程完成后,您的 SSL 证书将在“/etc/letsencrypt/live/domain.com”目录中可用。
接下来,使用“nano”编辑器创建一个新的 Nginx 配置'/etc/nginx/conf.d/mattermost.conf'。
sudo nano /etc/nginx/conf.d/mattermost.conf
插入以下配置并确保使用您的信息更改域名和 SSL 证书的路径。
upstream backend {
server 127.0.0.1:8065;
keepalive 32;
}
server {
listen 80;
server_name space.howtoforge.local;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name space.howtoforge.local;
http2_push_preload on; # Enable HTTP/2 Server Push
ssl_certificate /etc/letsencrypt/live/mattermost.howtoforge.local/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mattermost.howtoforge.local/privkey.pem;
ssl_session_timeout 1d;
# Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
ssl_protocols TLSv1.2 TLSv1.3;
# Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
# prevent replay attacks.
#
# @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
ssl_early_data on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:50m;
# HSTS (ngx_http_headers_module is required) (15768000 seconds = six months)
add_header Strict-Transport-Security max-age=15768000;
# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;
add_header X-Early-Data $tls1_3_early_data;
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 $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 60s;
send_timeout 300s;
lingering_timeout 5s;
proxy_connect_timeout 90s;
proxy_send_timeout 300s;
proxy_read_timeout 90s;
proxy_http_version 1.1;
proxy_pass http://backend;
}
location / {
client_max_body_size 100M;
proxy_set_header Connection "";
proxy_set_header Host $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_http_version 1.1;
proxy_pass http://backend;
}
}
# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the '$ssl_early_data' variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data {
"~." $ssl_early_data;
default "";
}
完成后保存文件并退出编辑器。
接下来,运行下面的'nginx'命令来验证您的 Nginx 语法。如果您的语法正确,您将看到输出“syntax is ok - test is successful”。
sudo nginx -t
最后,运行下面的“systemctl”命令来重新启动 Nginx 服务并应用您的更改。
sudo systemctl restart nginx
使用 Mattermost 创建第一个工作区
打开您的网络浏览器并访问您的 Mattermost 安装,例如“https://space.howtoforge.local”。如果安装成功,您将看到安装向导。
单击“在浏览器中查看”按钮可通过网络浏览器设置 Mattermost。
输入新的管理员用户、电子邮件地址和密码,然后点击“创建帐户”继续。
输入您的组织名称。
目前,您可以跳过与第三方应用程序的集成。
现在点击“完成设置”即可完成 Mattermost 安装。
完成后,您将被重定向到您的第一个 Mattermost 工作区。
结论
恭喜!您已在 Rocky Linux 9 服务器上完成了 Mattermost 的安装。您已将 Mattermost 作为 systemd 服务在后台启动并运行,其中 PostgreSQL 作为数据库,Nginx 作为反向代理。您还使用 HTTPS 保护 Mattermost 并在 Mattermost 中创建了您的第一个工作区。从这里,您可以将 Mattermost 与第三方应用程序(例如 GitHub、GitLab 和 Bitbucket)集成。