Mattermost
- Mattermost はオープンソースで、セルフホスト型の Slack クローンです。
- プロプライエタリな SaaS メッセージングの代替として、Mattermost はチームコミュニケーションをひと処に集めて、全ての情報を検索・閲覧しやすくします。
この記事では Mattermost サーバーをインストール・設定する方法を説明します。
目次
インストール
Mattermost サーバーをインストールする方法は2つあります:
- Docker を使用して #Docker を使うで説明している手順に従う。
- AUR パッケージを使用して #AUR を使うで説明している手順に従う。
Electron ベースのデスクトップクライアントは mattermost-desktopAUR パッケージでインストールできます。
Docker を使う
Docker を使用する場合、手動でデータベースサーバーをインストールして Mattermost の依存パッケージを設定する必要がありません。docker イメージには依存パッケージが全てバンドルされているため、作業が楽です。
そのかわりデータベースバックエンドやウェブサーバーを選択することはできません。docker イメージで提供されているものを使うしかありません。
- Docker をインストール。
- ソースをダウンロード:
$ git clone https://github.com/mattermost/mattermost-docker.git
- Team エディションの場合、
docker-compose.yml
ファイルを編集して次の行をコメントアウト:dockerfile: Dockerfile-enterprise
- docker コンテナをビルド・起動:
$ cd mattermost-docker $ docker-compose build $ docker-compose up -d $ docker run --name mattermost-preview -d --publish 8065:8065 mattermost/mattermost-preview
- ブラウザで
http://localhost:8065/
を開く。
TLS やメールの設定方法やエンタープライズ機能の有効化、Docker Compose によって複数のサーバーノードを使う方法は 公式ガイド を参照してください。
Mattermost 公式の Docker Hub ページ で提供されている Docker イメージは複数存在します。Mattermost Docker イメージのリポジトリ も参照。
AUR を使う
mattermost パッケージをインストールしてください。または mattermost-gitAUR で開発版をインストールできます。
- インストールすると
mattermost
ユーザーとグループが作成されます。 - mattermost のディレクトリは
/var/lib/mattermost
に作成され所有者はmattermost:root
となります。
#データベースの設定に進んでください。
データベースの設定
Mattermost はデータベースバックエンドを必要とします。データベースを同じマシンで実行する場合、最初に MySQL/MariaDB または PostgreSQL をインストールしてください。以下のセクションのどちらかに従ってから #Mattermost の設定に進んでください。
公式サポートされているのは MySQL ですが、公式ガイドは PostgreSQL を使います。
MySQL/MariaDB
$ mysql -u root -p
CREATE DATABASE mattermostdb; CREATE USER mmuser IDENTIFIED BY 'mmuser_password'; GRANT ALL ON mattermostdb.* TO mmuser;
PostgreSQL
1. PostgreSQL をインストール。
2. postgres
ユーザーでサーバーに接続:
sudo -u postgres psql
3. Mattermost データベースを作成:
CREATE DATABASE mattermostdb; CREATE USER mmuser WITH PASSWORD 'mmuser_password'; GRANT ALL PRIVILEGES ON DATABASE mattermostdb to mmuser;
4. \q
で psql
を抜ける。
TCP ソケットを使う
5. PostgreSQL#リモートホストから PostgreSQL にアクセスできるように設定に書かれているように設定。
6. 動作を確認:
$ psql --host=ip_address --dbname=mattermostdb --username=mmuser --password
Unix ソケットを使う
5. /var/lib/postgres/data/pg_ident.conf
に以下の行を追加して Unix ユーザーの mattermost
を PostgreSQL ユーザーの mmuser
にマッピング:
mattermap mattermost mmuser
6. /var/lib/postgres/data/pg_hba.conf
に以下の行を追加して Unix ソケットを設定:
local mattermostdb mattermost peer map=mattermap
7. postgresql.service
を再起動。
8. 動作を確認:
$ sudo -u mattermost psql --dbname=mattermostdb --username=mattermost
#Mattermost の設定に進んでください。
Mattermost の設定
Mattermost は /etc/webapps/mattermost/config.json
で設定します。文字列はクォートで囲う必要があります。
使用するデータベースにあわせて設定する必要があります。
DriverName
の設定: MySQL の場合は mysql
、PostgreSQL の場合は postgres
に設定。
DataSource
の設定:
- MySQL の場合、
mmuser:mmuser_password@unix(/run/mysqld/mysqld.sock)/mattermostdb?charset=utf8mb4,utf8
に設定。 - PostgreSQL の場合:
- TCP ソケット:
postgres://mmuser:mmuser_password@127.0.0.1:5432/mattermostdb?sslmode=disable&connect_timeout=10
- Unix ソケット:
postgres:///mattermostdb?host=/run/postgresql
(postgres:
の後にスラッシュが3つ必要です。mattermostdb
はデータベースの名前、/run/postgresql
は Unix ソケットがあるディレクトリです)
- TCP ソケット:
mattermost.service
を起動・有効化して http://localhost:8065/ を開いてください。
Mattermost のセットアップ
1. Mattermost を開いてチームとユーザーを作成。
2. システムの最初のユーザーには自動的に system_admin
ロールが割り当てられ、システムコンソールにアクセスすることができます。
3. town-square
チャンネルからドロップダウンをクリックして System Console
オプションを選択。
4. Notification > Email
の設定を更新して SMTP メールサービスを設定。以下は AmazonSES を使用する例:
Send Email Notifications
をtrue
に設定Require Email Verification
をtrue
に設定Feedback Name
をNo-Reply
に設定Feedback Email
をmattermost@example.com
に設定SMTP Username
を[YOUR_SMTP_USERNAME]
に設定SMTP Password
を[YOUR_SMTP_PASSWORD]
に設定SMTP Server
をemail-smtp.us-east-1.amazonaws.com
に設定SMTP Port
を465
に設定Connection Security
をTLS
に設定- 設定を保存
5. File > Storage
から Local Directory Location
の設定を ./data/
から /mattermost/data
に変更。
6. General > Logging
から Log to The Console
を false
に設定。
7. 他の設定も自由に変更してください。
8. mattermost.service
を再起動。
Plugins
Plugins are enabled by default, but require access to the plugins directory which needs to be created with the correct owner:
$ mkdir /usr/share/webapps/mattermost/client/plugins $ chown mattermost:mattermost /usr/share/webapps/mattermost/client/plugins
ヒントとテクニック
リバースプロキシによる HTTPS
自己署名 TLS 証明書をサポートしていない Android や iOS アプリから安全に Mattermost サーバーにアクセスしたい場合、リバースウェブプロキシを設定する方法があります [1]。
プロキシの主な利点:
- SSL ターミネーション
- HTTP から HTTPS にリダイレクト
- ポート 80 を 8065 にマッピング
- 標準的なリクエストログ
大抵のウェブサーバーでプロキシを使えます。
nginx
1. nginx をインストール・設定 (nginx-mainline を推奨)。
2. ドメイン名 (例: mattermost.example.com
) からサーバーへのアクセスを設定。
3. インターネットから Mattermost サーバーへのプロキシ接続を nginx に設定。nginx の設定ファイル /etc/nginx/sites-available/mattermost
を作成・編集:
upstream backend { server 127.0.0.1:8065; } 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; 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; proxy_read_timeout 600s; 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_pass http://backend; } }
4. mattermost サーバーを有効化:
# mkdir /etc/nginx/servers-enabled # ln -s /etc/nginx/servers-available/mattermost /etc/nginx/server-enabled/mattermost
5. nginx.service
を再起動。
6. プロキシ経由で Mattermost にアクセスできることを確認:
curl http://localhost/
Mattermost
というタイトルのページが表示されるはずです。
7. Let’s Encrypt を設定。
Lighttpd2
Mattermost のプロキシとして lighttpd2-gitAUR を使用する設定例では証明書が /etc/lighttpd2/certs/lighttpd2.pem
にあることが前提となっています。
プロキシをバーチャルホストに転送したい場合は mod_vhost を参照。
/etc/lighttpd2/lighttpd.conf
setup { module_load [ "mod_accesslog", "mod_proxy", "mod_openssl" ]; openssl [ "listen" => "0.0.0.0:443", "listen" => "[::]:443", "pemfile" => "/etc/lighttpd2/certs/lighttpd2.pem", "options" => ["ALL", "NO_TICKET"], "verify" => true, "verify-any" => true, "verify-depth" => 9 ]; listen "0.0.0.0:80"; listen "[::]:80"; log ["debug" => "", default => "/var/log/lighttpd2/error.log"]; accesslog "/var/log/lighttpd2/access.log"; accesslog.format "%h %V %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}\""; static.exlude_extensions [ ".php", ".pl", ".fcgi", "~", ".inc" ]; } openssl.setenv "client-cert"; keepalive.timeout 360; docroot "/srv/http"; index [ "index.php", "index.html", "index.htm" ]; include "/etc/lighttpd2/mimetypes.conf"; proxy "127.0.0.1:8065";
翻訳とプルリクエストのテスト
非公式スクリプト mattermost-prepare-pkgbuild を使うことで翻訳とプルリクエストをテストできます。