【Ubuntu】安装 Mattermost

在这篇文章中要解释的内容:

使用亚马逊云服务器搭建Ubuntu实例,然后在其上安装Mattermost。
配置包括Nginx和MySQL。

此外,我们将使用独立域名并通过Let’s Encrypt进行SSL加密。

关于以下内容,我们会在另一篇文章中进行总结。

    • 将数据从 Slack 迁移到 Mattermost

 

    关于操作 Mattermost 的 mmctl 命令(例如,如何删除通道)。

启动服务器

创建一个实例

我会使用Amazon Lightsail。

 

在启动实例时的配置内容如下。

    • 平台:Linux / Unix

 

    • 只有OS:Ubuntu20.04 LTS

 

      • 实例计划:10 美元 计划

 

    • ※ 如果内存没有达到 2GB,在 SSH 过程中可能会出现卡顿。…

 

    • SSH 密钥对:保留为默认值

 

    启用自动快照:未选中

完成后,将等待状态从“保留中”变为“执行中”。

费用与亚马逊 EC2 不同,无论系统是运行还是停止,都会收取费用。

IP地址的固定

在 “网络 “选项卡中,创建并附加静态 IP 地址。
附加时不收费。

防火墙设置。

同样从 “网络 “选项卡中添加安全规则。

Mattermost 的端口默认为:8065,因此需要打开该端口。
此外,还需要打开80号端口(HTTP)和443号端口(HTTPS)。

SSH连接

从 “连接 “选项卡,通过 “使用 SSH 连接 “进行连接,然后登录服务器。

还有其他几种方法,但这种基于浏览器的连接是最简单、最好的。
所有后续步骤都在服务器中完成。

Mattermost 的设置

请遵循以下官方程序。

准备好

确保应用最新的安全补丁。

$ sudo apt update
$ sudo apt upgrade

// 在紫色画面中,选择 "保留当前安装的本地版本"。

MySQL

按以下顺序操作

首先进行安装。

$ sudo apt install mysql-server

设置root用户的密码

$ sudo mysql
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'hogehoge';
mysql> exit

在公式中,我们首先执行了命令“sudo mysql_secure_installation”,如果不按照这个步骤进行操作,将会出现下面的错误。

Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the au
thentication method used doesn't store authentication data in the MySQL server. Please con
sider using ALTER USER instead if you want to change authentication parameters.

安全设置

$ sudo mysql_secure_installation  // 使用刚才使用的密码登录。

执行后,只有以下问题的答案是 “否”。

    • 「Would you like to setup VALIDATE PASSWORD component?」:No

 

    「Change the password for root ?」:No

登录

$ mysql -u root -p   // 使用刚才使用的密码登录。

创建用户 (mmuser)

mysql> create user 'mmuser'@'%' identified by 'mmuserP@22w0rd';
mysql> show grants for 'mmuser'@'%';

创建DB

我們將創建一個數據庫來保存Mattermost的數據。

mysql> create database mattermost;

授予访问权限

我們將賦予先前創建的用戶(mmuser)在數據庫(mattermost)中的訪問權限。

mysql> grant all privileges on mattermost.* to 'mmuser'@'%';
mysql> show grants for 'mmuser'@'%';
mysql> exit

以上,MySQL的设置已经完成。

“Mattermost” can be paraphrased in Chinese as “事项最重要” .

下一步,我们将安装Mattermost。

下载

$ wget https://releases.mattermost.com/7.2.0/mattermost-7.2.0-linux-amd64.tar.gz

您可以在此处查看最新版本。

 

解凍

$ tar -xvzf mattermost*.gz

转到/opt目录,并创建一个名为data的文件夹。

$ sudo mv mattermost /opt
$ sudo mkdir /opt/mattermost/data

创建系统用户和组。

创建用于运行Mattermost的系统用户和组,并授予权限。

$ sudo useradd --system --user-group mattermost
$ sudo chown -R mattermost:mattermost /opt/mattermost
$ sudo chmod -R g+w /opt/mattermost

编辑设置文件

编辑 Mattermost 配置文件 (config.json) 所需的部分。

$ sudo vim /opt/mattermost/config/config.json

编辑内容包括

"SiteURL" : "https://{example.com}"

※将 {example.com} 设置为您希望 Mattermost 关联的自己的域名。

如果您在网站等上使用域名的话,推荐您创建和分配子域名来使用。

※ 配置 DNS 设置;为 A 记录的值设置实例的公共 IP。

"DriverName": "mysql"
"DataSource": "mmuser:<mmuser-password>@tcp(localhost:3306)/mattermost?charset=utf8mb4,utf8&writeTimeout=30s"

※ …为之前在 MySQL 中创建的用户 (mmuser) 设置的密码。

※ 关于 “localhost “部分,虽然官方写法是 “tcp(实例的公共 IP:3306)”),但由于 ping DB 失败会导致出错,因此将其设置为 localhost。 但是,如果使用 “tcp(instance’s public IP:3306)”),则会出现 ping DB 失败和错误,因此将其设置为 localhost。

"DefaultServerLocale": "ja"
"DefaultClientLocale": "ja"

可以试试启动Mattermost。

$ cd /opt/mattermost
$ sudo -u mattermost ./bin/mattermost

如果显示了各种信息,并最后显示 “服务器正在监听 :8065” 则表示成功。

systemd 的单元文件配置

要使用 systemd,请创建 systemd 单元文件并配置其内容。

$ sudo vim /lib/systemd/system/mattermost.service

由于使用MySQL,内容将按照官方提供的资料进行参考,具体如下所示。

[Unit]
Description=Mattermost
After=network.target
After=mysql.service
BindsTo=mysql.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=mysql.service

加载systemd,并确认它是否已正确加载。

$ sudo systemctl daemon-reload
$ sudo systemctl status mattermost.service

如果显示以下内容,则成功。

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

启动Mattermost

$ sudo systemctl start mattermost.service

如果执行以下操作并且返回Matterhost的HTML,则表示成功。

$ curl http://localhost:8065

最后,我们将设置Mattermost在机器启动时自动启动。

$ sudo systemctl enable mattermost.service

Nginx

然后,我们来设置网络服务器。

首先安装。

$ sudo apt update
$ sudo apt install nginx
$ curl http://localhost

创建设置文件

$ sudo vim /etc/nginx/sites-available/mattermost

内容如下

※ {IP地址} 是实例的公共IP。
※ {example.com} 是要与Mattermost关联的自定义域名设置。

upstream backend {
   server {IP地址}: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 default_server;
   server_name {example.com};

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

删除现有的配置文件

由于创建了新的配置文件(/etc/nginx/sites-available/mattermost),因此我们将删除现有的文件。

$ sudo rm /etc/nginx/sites-available/default

激活配置文件

您刚刚创建的配置文件。将(/etc/nginx/sites-available/mattermost) 的符号链接放到 /etc/nginx/sites-enabled/ 中,然后启动 Nginx。。

$ sudo rm /etc/nginx/sites-enabled/default
$ sudo ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/mattermost
$ sudo nginx -t
$ sudo systemctl start nginx
$ curl http://localhost

SSL

接下来,使用 Let’s Encrypt 为网站加密(TLS)。

 

安装Certbot

让我们准备使用Certbot这个ACME客户端来发行Let’s Encrypt证书。

$ sudo snap install core; sudo snap refresh core
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

–进行一次试运行进行测试

在签发证书之前,请测试 DNS 是否配置正确。

$ sudo certbot certonly --dry-run
// 1: 选择Nginx Web Server plugin (nginx) 

※ 确保打开 80 端口(HTTP)。 如果未打开,挑战将失败并提示错误。

颁发证书。

$ sudo certbot
$ curl https://example.com

SSL 安全设置

最后,我们将重新编辑Nginx的配置文件,并加强SSL安全设置。

$ sudo vim /etc/nginx/site-availables/mattermost

编辑内容如下。 要添加的新章节已作注释。

upstream backend {
   server {IP地址}: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 default_server;
    server_name {example.com};

    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_http_version 1.1;  # 加上这句话。
        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;
    }
}

# 从这里开始向下添加所有内容。
    listen 443 ssl http2; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/{域名}/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/{域名}/privkey.pem; # managed by Certbot
    # include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

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


server {
    if ($host = {example.com}) {  // 请记住用您自己的域名编辑这一行
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80 default_server;
    server_name {example.com};   // 记得编辑
    return 404; # managed by Certbot

}

反映

改写完成后,设置将得到反映。

$ sudo rm /etc/nginx/sites-enabled/mattermost
$ sudo ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/mattermost
$ sudo nginx -t
$ sudo systemctl restart nginx

执行以下操作,如果返回 Matterhost HTML,则表示成功。

$ curl https://example.com

也可通过在以下网址搜索域名来检查证书

 

当您通过浏览器访问 https://example.com 时,可能会出现显示 Nginx 默认页面或者显示 “此连接未受保护” 的情况,请尝试重新加载页面。这可能是因为缓存问题所导致的。

以上,Mattermost 已经成功启动并完成了SSL加密。

我們這次使用了 Amazon Lightsail 的實例,但只要是相同的作業系統,我認為在 Amazon EC2 上也沒有問題。

在另一篇文章中

      • 将数据从 Slack 迁移到 Mattermost

 

    关于操作 Mattermost 的 mmctl 命令(例如,如何删除通道)。

如果没问题的话,我打算写这个,请您查看。

如果方便的话,请阅读我在以下博客中发布的文章。

 

广告
将在 10 秒后关闭
bannerAds