CentOS7 に Mattermostをインストールしてみた

投稿者: | 2024年2月10日

SlackのOSS版ともいうべき Mattermostを
セキュア(TLS)+大規模アクセス対応(Nginxによるリバースプロキシ)した環境で構築します。

基本的に、公式サイト
従ってすすめます。

パッケージを最新化します。

    $ sudo yum update
    $ sudo yum upgrade

MySQL をインストールします。

    $ sudo curl -L -O http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
    $ sudo yum localinstall mysql57-community-release-el7-9.noarch.rpm
    $ sudo yum install mysql-community-server
    $ sudo systemctl enable mysqld
    $ sudo systemctl start mysqld

rootのパスワードを確認します。

    $ sudo grep 'temporary password' /var/log/mysqld.log

DBを作成します。

    $ mysql -u root -p
    mysql> alter user 'root'@'localhost' identified by 'Password42!';
    mysql> create user 'mmuser'@'172.17.1.63' identified by 'Password53!';
    mysql> create database mattermost;
    mysql> grant all privileges on mattermost.* to 'mmuser'@'172.17.1.63';
    mysql> quit

Mattermostをインストールします。

    $ curl -L -O https://releases.mattermost.com/5.8.0/mattermost-5.8.0-linux-amd64.tar.gz
    $ tar zxvf mattermost-5.8.0-linux-amd64.tar.gz
    $ sudo mv mattermost /opt/
    $ sudo mkdir /opt/mattermost/data
    $ sudo useradd --system --user-group mattermost
    $ sudo chown -R mattermost:mattermost /opt/mattermost
    $ sudo chmod -R g+w /opt/mattermost
    $ sudo vi /opt/mattermost/config/config.json
    以下のように編集
    ...
    "SqlSettings": {
        "DriverName": "mysql",
        "DataSource": "mmuser:Password53!@tcp(172.17.1.63:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s",
    ...

Mattermostが起動するか確認します。

    $ cd /opt/mattermost
    $ sudo -u mattermost ./bin/mattermost
    下記メッセージがでればOKです。
    {"level":"info","ts":1551684862.607604,"caller":"app/server.go:462","msg":"Server is listening on [::]:8065"}

サービス登録します。

    $ sudo touch /etc/systemd/system/mattermost.service
    $ sudo vi /etc/systemd/system/mattermost.service
    下記のように編集します。
    [Unit]
    Description=Mattermost
    After=syslog.target network.target mysqld.service

    [Service]
    Type=notify
    WorkingDirectory=/opt/mattermost
    User=mattermost
    ExecStart=/opt/mattermost/bin/mattermost
    PIDFile=/var/spool/mattermost/pid/master.pid
    TimeoutStartSec=3600
    LimitNOFILE=49152

    [Install]
    WantedBy=multi-user.target

    $ sudo chmod 664 /etc/systemd/system/mattermost.service
    $ sudo systemctl daemon-reload
    $ sudo systemctl enable mattermost
    $ sudo systemctl start mattermost

動作確認します。

    $ curl http://localhost:8065

リバースプロキシとしてnginxをインストールします。

    $ sudo touch /etc/yum.repos.d/nginx.repo
    $ sudo vi /etc/yum.repos.d/nginx.repo
    以下のように編集します。
    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/rhel/7/$basearch/
    gpgcheck=0
    enabled=1

    $ sudo yum install nginx.x86_64
    $ sudo systemctl enable nginx
    $ sudo systemctl start nginx

nginxの設定をします。

    $ sudo vi /etc/nginx/conf.d/mattermost.conf
    以下のように編集します。
    upstream backend {
        server 172.17.1.63: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 8080;
        server_name mattermost.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;
        }
    }

    $ sudo systemctl restart nginx

リバースプロキシ経由でアクセスできるか確認します。

    $ curl http://localhost:8080

SSLを設定します(今回は自己証明書です)

    $ sudo yum -y install openssl
    $ sudo mkdir -p /etc/nginx/ssl
    $ sudo openssl req -new -x509 -sha256 -newkey rsa:2048 -days 365 -nodes -out /etc/nginx/ssl/server.pem -keyout /etc/nginx/ssl/server.key
    $ sudo vi /etc/nginx/conf.d/mattermost.conf
    以下のように編集します。
    ...
    server {
        listen 443 ssl;
        ssl_certificate /etc/nginx/ssl/server.pem;
        ssl_certificate_key /etc/nginx/ssl/server.key;
    ...

    $ sudo systemctl restart nginx

SSLでアクセスできることを確認します。

    $ curl -k https://localhost

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です