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イメージの取得が終了したら、ブラウザで以下のURLにアクセスすれば Mattermost のアカウント作成画面が表示されます。
参考資料:Local Machine Setup using Docker | Mattermost documentation
Dockerコマンドメモ
Mattermost コンテナの停止
Mattermost コンテナの起動
Mattermost Dockerイメージの削除
docker rm mattermost-preview
docker rmi $(docker images -q mattermost/mattermost-preview)
yum アップデート
ここからは Mattermost 実行ファイルでのインストール手順です。まず下準備として CentOS7にインストールされているパッケージを、最新版にアップデートしておきましょう。
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 リポジトリをインストールします。
MySQL 8.0 をインストールします。
sudo yum install mysql-community-server
MySQL 8 を使う場合は、デフォルトの認証プラグインを「mysql_native_password」に変更する必要がありますので、MySQLの設定ファイルで次の行のコメントを外して有効にします。
sudo vi /etc/my.cnf
↓
default-authentication-plugin=mysql_native_password
MySQL の自動起動を設定します。
MySQL を起動します。
mysql_secure_installation の実行
root ユーザーの初期パスワードの確認(初期パスワードはそのまま使うことはできませんので変更が必要です)
(略)
2019-09-08T00:43:01.130813Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: <初期パスワード>
参考資料:6.5.3.2 Password Validation Options and Variables | MySQL 8.0 Reference Manual
mysql_secure_installation コマンドに「--use-default」オプションを付けてを実行します。root ユーザーのパスワード変更し、不要なユーザーやDBを削除してくれます。
(略)
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 にログインできるようになります。
Enter password: <新しいパスワード>
Mattermost 用 DBとユーザーの作成
MySQL にログインして Mattermost 用の DB を作成します。
Enter password: <新しいパスワード>
create database mattermost;
続いて Mattermost 用の MySQL ユーザー(mmuser)を作成し、先ほど作成した mattermost DBへのアクセス権を設定します。
grant all on mattermost.* to mmuser@localhost;
以上で、MySQL 8 のインストールは完了です。
Mattermost インストール
本題の Mattermost のインストールです。
インストール
Mattermost のダウンロードページ で、Mattermost 最新版のダウンロードURLを確認します。今回は、チームエディションをインストールしますので、「Open Source Team Edition (MIT License)」をクリックして表示されたURLをクリップボードにコピーしておきます。
コピーしたURLから Mattermost をダウンロードします。
展開して /opt/ ディレクトリ下に移動します。
sudo mv mattermost /opt/
Mattermost 用のストレージディレクトリを作成します。(このディレクトリに Mattermost に投稿されるすべてのファイルと画像が保存されますので、それなりの容量が確保されている必要があります。)
Mattermost を実行するシステムユーザー「mattermost」を作成し、/opt/mattermost/ ディレクトリ以下のオーナーを 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 が起動するか確認します。
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
適切なパーミッションを設定します。
作成したサービスファイルを systemd に反映します。
Mattermost の自動起動を設定します。
Mattermost を起動します。
Mattermost が起動していることを確認します。以下のコマンドを実行して、なにかしらHTMLが表示されていればOKです。
以上で Mattermost のインストールは完了です。続いてプロキシサーバーとして Nginx をインストールします。また、非公式ですが Apache httpd をプロキシサーバーとして使うこともできます。
自己署名のSSLサーバー証明書の作成
Nginx のインストールの前に、自己署名のSSLサーバー証明書を作成しておきます。
インターネットに公開しているサーバーであれば、無料でSSLサーバー証明書を発行してくれる Let's Encrypt を利用することもできます。
関連記事:Let's Encrypt サーバー証明書の取得と自動更新設定メモ
秘密鍵の作成
CSR(証明書署名要求)の作成(入力するのは2箇所だけです。Common Name(ドメイン名)はご自分の環境に合わせて指定してください)
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年)
秘密鍵とSSL証明書を移動
mv -i server.crt /etc/pki/tls/certs/
パーミッションを変更
chmod 600 /etc/pki/tls/certs/server.crt
SELinux を有効にしている場合は、秘密鍵とSSL証明書に正しいセキュリティコンテキストをつけておきましょう。
restorecon /etc/pki/tls/certs/server.crt
CSRを削除
firewalld の設定
HTTP(80/tcp) と HTTPS(443/tcp) への接続を許可しておきます。
sudo firewall-cmd --add-port=443/tcp --permanent
設定を読込みます
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 をインストールします。
Nginx の自動起動を設定します。
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; } }
デフォルトの設定ファイルを削除します。
Mattermost 用の設定ファイルを読込むようにします。
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 mod_ssl
リバースプロキシを設定するのに必要なモジュールが読込まれていることを確認します。
(以下の表示があればOKです)
rewrite_module (shared)
proxy_module (shared)
proxy_http_module (shared)
proxy_wstunnel_module (shared)
デフォルトの設定ファイルをバックアッップしておきます。
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 の自動起動を設定します。
Apache 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 を再起動します。
デフォルトの言語変更
サイト設定の「言語」をクリックします。
デフォルトのサーバー言語と、デフォルトのクライアント言語をそれぞれ「日本語」に変更して、「保存」をクリックします。
メール通知の有効化
サイト設定の「通知」をクリックします。
電子メール通知を有効にする「有効」を選択します。(下に続く)
通知の表示名と通知の送信元電子メールアドレスを入力して、「保存」をクリックします。
SMTPサーバーの設定
Mattermost からメールを送信するための SMTPサーバーを設定します。今回は手軽な Gmail 経由の設定になっています。(そのため、先ほど設定した「通知の表示名」や「通知の送信元電子メールアドレス」は反映されません)実際には会社のメールサーバやメール配送サービスなどを利用するのがよいでしょう。
環境の「SMTP」をクリックします。
以下のように、Gmail経由でメールを送信するように設定します。(下に続く)
接続のセキュリティは「STARTTLS」を選択して、「保存」をクリックします。
「接続をテストする」をクリックし、以下のような表示であればOKです。メールが届いていることを確認してください。
おわりに
Mattermost をざっと見てみましたが、これだけ機能を備えたチャットツールが無料で使えるのには正直おどろきです。また、英語ですが Mattermost はドキュメントしっかりまとまっていて、わかりやすいのが管理者にとってはありがたいですね。
コメント