Mattermost v5.14 インストールメモ(CentOS7)

Linux
スポンサーリンク

Mattermost(マターモースト)は、Slack と同等の機能を備えるオープンソースのチャットツールです。Mattermost は、実行ファイルや Dockerイメージで提供されているので、自分で用意したサーバーにインストールして運用できることが大きな特徴です。そこで今回は、CentOS7 に Mattermost v5.14 をインストールする手順をまとめてみました。

Mattermost の2つのエディション

Mattermost には、無料で使えるチームエディション(Open Source Team Edition)と、有料のエンタープライズエディション(Enterprise Edition)の2つのエディションがあります。

1点注意が必要なのは、エンタープライズエディションはライセンスキーによりエンタープライズ機能(Active Directory や高度なアクセス制御ポリシー機能など)を有効にすることができますが、チームエディションにはその機能がありません。もし将来、エンタープライズ機能を使う予定がある場合は、エンタープライズエディションをインストールしておく必要があります。(エンタープライズエディションでもエンタープライズ機能以外は無料で使えます)

参考資料:Mattermost の機能比較表

Dockerイメージでのインストール(お試し専用版)

とりあえず Mattermost を手元のPCのローカル環境のみで試してみたい場合は、Dockerイメージでインストールするのが便利です。(ただし、本番環境では使わないように!と公式ドキュメントに注意書きがあります)

手元のPCに Docker をインストールします。

Install Docker Desktop for Mac
Install Docker Desktop on Windows

Mattermost(お試し専用版)の Dockerイメージを取得してコンテナを起動します。

docker run --name mattermost-preview -d --publish 8065:8065 mattermost/mattermost-preview

Dockerイメージの取得が終了したら、ブラウザで以下のURLにアクセスすれば Mattermost のアカウント作成画面が表示されます。

http://localhost:8065/

参考資料:Local Machine Setup using Docker | Mattermost documentation

Dockerコマンドメモ

Mattermost コンテナの停止

docker stop mattermost-preview

Mattermost コンテナの起動

docker start mattermost-preview

Mattermost Dockerイメージの削除

docker stop mattermost-preview
docker rm mattermost-preview
docker rmi $(docker images -q mattermost/mattermost-preview)

yum アップデート

ここからは Mattermost 実行ファイルでのインストール手順です。まず下準備として CentOS7にインストールされているパッケージを、最新版にアップデートしておきましょう。

sudo yum -y update

MySQL 8 のインストール

Mattermost をインストールする前にデータベースソフトウェアをインストールする必要があります。Mattermost に対応しているデータベースソフトウェアは次の通りです。(2019年9月9日現在)

  • MySQL 5.6、5.7、8
  • PostgreSQL 9.4以降
  • Amazon Aurora MySQL 5.6+

参考資料:Software and Hardware Requirements | Mattermost documentation

インストール

今回は、データベースソフトウェアとして MySQL 8 をインストールします。

まずはじめに MySQL公式の yum リポジトリをインストールします。

sudo rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

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

sudo yum install mysql-community-devel
sudo yum install mysql-community-server

MySQL 8 を使う場合は、デフォルトの認証プラグインを「mysql_native_password」に変更する必要がありますので、MySQLの設定ファイルで次の行のコメントを外して有効にします。

sudo vi /etc/my.cnf

# default-authentication-plugin=mysql_native_password
  ↓
default-authentication-plugin=mysql_native_password

MySQL の自動起動を設定します。

sudo systemctl enable mysqld

MySQL を起動します。

sudo systemctl start mysqld

mysql_secure_installation の実行

root ユーザーの初期パスワードの確認(初期パスワードはそのまま使うことはできませんので変更が必要です)

grep password /var/log/mysqld.log
(略)
2019-09-08T00:43:01.130813Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: <初期パスワード>
この後に設定する root ユーザーの新しいパスワードは、8文字以上で英数大文字小文字と記号が含まれていないとポリシー違反で弾かれてしまいますので注意してください。
 
参考資料:6.5.3.2 Password Validation Options and Variables | MySQL 8.0 Reference Manual

mysql_secure_installation コマンドに「--use-default」オプションを付けてを実行します。root ユーザーのパスワード変更し、不要なユーザーやDBを削除してくれます。

mysql_secure_installation --use-default
 
(略)
Enter password for user root: <初期パスワード>
 
The existing password for the user account root has expired. Please set a new password.
 
New password: <新しいパスワード>
 
Re-enter new password: <新しいパスワード>
(略)

以上で MySQL にログインできるようになります。

mysql -u root -p
Enter password: <新しいパスワード>

Mattermost 用 DBとユーザーの作成

MySQL にログインして Mattermost 用の DB を作成します。

mysql -u root -p
Enter password: <新しいパスワード>
 
create database mattermost;

続いて Mattermost 用の MySQL ユーザー(mmuser)を作成し、先ほど作成した mattermost DBへのアクセス権を設定します。

create user mmuser@localhost identified by '<パスワード>';
grant all on mattermost.* to mmuser@localhost;

以上で、MySQL 8 のインストールは完了です。

Mattermost インストール

本題の Mattermost のインストールです。

インストール

Mattermost のダウンロードページ で、Mattermost 最新版のダウンロードURLを確認します。今回は、チームエディションをインストールしますので、「Open Source Team Edition (MIT License)」をクリックして表示されたURLをクリップボードにコピーしておきます。

Mattermost のダウンロードページ

コピーしたURLから Mattermost をダウンロードします。

wget https://releases.mattermost.com/5.14.2/mattermost-team-5.14.2-linux-amd64.tar.gz

展開して /opt/ ディレクトリ下に移動します。

tar -zvxf mattermost*.gz
sudo mv mattermost /opt/

Mattermost 用のストレージディレクトリを作成します。(このディレクトリに Mattermost に投稿されるすべてのファイルと画像が保存されますので、それなりの容量が確保されている必要があります。)

sudo mkdir /opt/mattermost/data

Mattermost を実行するシステムユーザー「mattermost」を作成し、/opt/mattermost/ ディレクトリ以下のオーナーを mattermost に変更して、書込み権限を追加します。

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

データーベースの設定

Mattermost が使うデーターベース(今回は MySQL)の設定です。

Mattermost の設定ファイルの SqlSettings.DataSource の値を書き換えます。

sudo vi /opt/mattermost/config/config.json

"SqlSettings": {
  "DriverName": "mysql", ←「mysql」であればOKです。
  "DataSource": "mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?charset=(略)〜
                  ↓
  "DataSource": "mmuser:<mmuserのパスワード>@tcp(localhost:3306)/mattermost?charset=(略)〜

mattermost ユーザーで Mattermost が起動するか確認します。

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

少し待って以下のようなログが表示されていればOKです。Ctrl + Cキーで Mattermost を停止します。

(略)
{"level":"info","ts":1568230042.5481758,"caller":"app/server.go:423","msg":"Starting Server..."}
{"level":"info","ts":1568230042.5483227,"caller":"app/server.go:489","msg":"Server is listening on [::]:8065"}
{"level":"info","ts":1568230042.5554998,"caller":"app/web_hub.go:75","msg":"Starting 2 websocket hubs"}
{"level":"info","ts":1568230042.557966,"caller":"jobs/schedulers.go:72","msg":"Starting schedulers."}

systemd サービスファイルの作成

Mattermost 用の systemd サービスファイル(起動スクリプトのようなもの)を作成します。

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

作成したサービスファイルを systemd に反映します。

sudo systemctl daemon-reload

Mattermost の自動起動を設定します。

sudo systemctl enable mattermost

Mattermost を起動します。

sudo systemctl start mattermost

Mattermost が起動していることを確認します。以下のコマンドを実行して、なにかしらHTMLが表示されていればOKです。

curl http://localhost:8065

以上で Mattermost のインストールは完了です。続いてプロキシサーバーとして Nginx をインストールします。また、非公式ですが Apache httpd をプロキシサーバーとして使うこともできます。

自己署名のSSLサーバー証明書の作成

Nginx のインストールの前に、自己署名のSSLサーバー証明書を作成しておきます。

インターネットに公開しているサーバーであれば、無料でSSLサーバー証明書を発行してくれる Let's Encrypt を利用することもできます。
関連記事:Let's Encrypt サーバー証明書の取得と自動更新設定メモ

秘密鍵の作成

openssl ecparam -name prime256v1 -genkey -out server.key

CSR(証明書署名要求)の作成(入力するのは2箇所だけです。Common Name(ドメイン名)はご自分の環境に合わせて指定してください)

openssl req -new -key server.key > server.csr
 
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:<空エンター>
Locality Name (eg, city) [Default City]:<空エンター>
Organization Name (eg, company) [Default Company Ltd]:<空エンター>
Organizational Unit Name (eg, section) []:<空エンター>
Common Name (eg, your name or your server's hostname) []:mattermost.example.com
Email Address []:<空エンター>
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:<空エンター>
An optional company name []:<空エンター>

SSLサーバー証明書の作成(有効期限10年)

openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt

秘密鍵とSSL証明書を移動

mv -i server.key /etc/pki/tls/private/
mv -i server.crt /etc/pki/tls/certs/

パーミッションを変更

chmod 600 /etc/pki/tls/private/server.key
chmod 600 /etc/pki/tls/certs/server.crt

SELinux を有効にしている場合は、秘密鍵とSSL証明書に正しいセキュリティコンテキストをつけておきましょう。

restorecon /etc/pki/tls/private/server.key
restorecon /etc/pki/tls/certs/server.crt

CSRを削除

rm server.csr

firewalld の設定

HTTP(80/tcp) と HTTPS(443/tcp) への接続を許可しておきます。

sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --add-port=443/tcp --permanent

設定を読込みます

sudo firewall-cmd --reload

Nginx のインストール

インストール

Nginx のリポジトリを追加します。

sudo vi /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/7/$basearch/
gpgcheck=0
enabled=1

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

sudo yum install nginx

Nginx の自動起動を設定します。

sudo systemctl enable nginx

Nginx を起動します。

sudo systemctl start nginx

プロキシ設定

Nginx が Mattermost のリバースプロキシとして動作するように設定します。server_name(ドメイン名)はご自分の環境に合わせて指定してください。

Mattermost 用の設定ファイルを作成します。

vi /etc/nginx/conf.d/mattermost

upstream backend {
   server 127.0.0.1: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    mattermost.example.com;
   return 301 https://$server_name$request_uri;
}

server {
   listen 443 ssl http2;
   server_name    mattermost.example.com;

   ssl on;
   ssl_certificate /etc/pki/tls/certs/server.crt;
   ssl_certificate_key /etc/pki/tls/private/server.key;
   ssl_session_timeout 1d;
   ssl_protocols TLSv1.2;
   ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:50m;
   # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 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;
  
   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 rm /etc/nginx/conf.d/default.conf

Mattermost 用の設定ファイルを読込むようにします。

sudo ln -s /etc/nginx/conf.d/mattermost /etc/nginx/conf.d/default.conf

Nginx を再起動します。

sudo systemctl restart nginx

ブラウザで以下のURLを開いて、HTTPS にリダイレクトし Mattermost のアカウント作成画面が表示されればOKです。(自己署名のSSLサーバー証明書を使っている場合はブラウザの警告が表示されます)

http://mattermost.example.com/

Apache httpd を使いたい場合(非公式)

現時点(2019年9月12日)では非公式ですが、Apache httpd を Mattermost のリバースプロキシとして設定することもできます。すでに Apache httpd で Webサーバーを構築していて、バーチャルホストで Mattermost を動かしたい場合などに便利ですね。

参考資料:Configuring Apache2 (Unofficial) | Mattermost documentation

Apache httpd と SSL モジュールをインストールします。

sudo yum install httpd-devel
sudo yum install mod_ssl

リバースプロキシを設定するのに必要なモジュールが読込まれていることを確認します。

httpd -M | grep -e rewrite_module -e proxy_module -e proxy_http_module -e proxy_wstunnel_module
(以下の表示があればOKです)
rewrite_module (shared)
proxy_module (shared)
proxy_http_module (shared)
proxy_wstunnel_module (shared)

デフォルトの設定ファイルをバックアッップしておきます。

sudo mv -i /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
sudo mv -i /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.org

Apache httpd の設定ファイルを作成します。

sudo vi /etc/httpd/conf/httpd.conf

httpd.conf

SSL設定ファイルを作成します。このファイルの後半部分にリバースプロキシの設定があります。

sudo vi /etc/httpd/conf.d/ssl.conf

ssl.conf

Apache httpd の自動起動を設定します。

sudo systemctl enable httpd

Apache httpd を起動します。

sudo systemctl start httpd

ブラウザで以下のURLを開いて、HTTPS にリダイレクトし Mattermost のアカウント作成画面が表示されればOKです。(自己署名のSSLサーバー証明書を使っている場合はブラウザの警告が表示されます)

http://mattermost.example.com/

Mattermost の初期設定

Mattermost のユーザーを作成し、Mattermost の初期設定を行います。(最初に作成したユーザーが管理ユーザーになります)

チームの作成

なにかしらチームを作成いないと通常のチャット画面が表示できないので、チームを作成します。

Mattermost のユーザーを作成したら「Create a new team」をクリックします。

適当なチーム名を入力して「Next」をクリックします。

そのまま「Finish」をクリックします。

日本語表示に変更

メニューなどを日本語で表示できるように変更します。

ハンバーガーメニューから「Account Settings」をクリックします。

「Display」→「Language」をクリックします。

「日本語」を選択し、「Save」をクリックします。

メニューが日本語で表示されるようになります。

サイトURLの設定

ハンバーガーメニューから「システムコンソール」をクリックします。

環境の「ウェブサーバー」をクリックします。

サイトURLに Mattermost のURLを入力して、「保存」をクリックします。

画面の指示に従い Mattermost を再起動します。

sudo systemctl restart mattermost

デフォルトの言語変更

サイト設定の「言語」をクリックします。

デフォルトのサーバー言語と、デフォルトのクライアント言語をそれぞれ「日本語」に変更して、「保存」をクリックします。

メール通知の有効化

サイト設定の「通知」をクリックします。

電子メール通知を有効にする「有効」を選択します。(下に続く)

通知の表示名と通知の送信元電子メールアドレスを入力して、「保存」をクリックします。

SMTPサーバーの設定

Mattermost からメールを送信するための SMTPサーバーを設定します。今回は手軽な Gmail 経由の設定になっています。(そのため、先ほど設定した「通知の表示名」や「通知の送信元電子メールアドレス」は反映されません)実際には会社のメールサーバやメール配送サービスなどを利用するのがよいでしょう。

環境の「SMTP」をクリックします。

以下のように、Gmail経由でメールを送信するように設定します。(下に続く)

接続のセキュリティは「STARTTLS」を選択して、「保存」をクリックします。

「接続をテストする」をクリックし、以下のような表示であればOKです。メールが届いていることを確認してください。

おわりに

Mattermost をざっと見てみましたが、これだけ機能を備えたチャットツールが無料で使えるのには正直おどろきです。また、英語ですが Mattermost はドキュメントしっかりまとまっていて、わかりやすいのが管理者にとってはありがたいですね。

Administrator’s Guide | Mattermost documentation

コメント

タイトルとURLをコピーしました