CentOS7-minimal上に社内向け各種OSSシステム構築 -- (4-2) Mattermostを非Dockerで


#はじめに
"[(4-1) 各種Slackクローンお試し](http://qiita.com/nobu182/items/dfc382b7f58a57832eea)"でRocket.Chat、Mattermost、Let's Chatの3種類のSlackクローンのお試し環境をDockerで構築する手順を説明しました。

ウチの会社ではMattermost使ってます。決め手は「日本語の全文検索への対応が比較的簡単にできること。」

3種ともインストール後の「素」の状態では日本語全文検索に対応してないです。ただRocket.Chat、Let's ChatはDBに日本語全文検索に非対応なMongoDB使ってる関係で日本語全文検索対応はけっこう難しそうなんですが、DBにMySQLあるいはPostgreSQLが使えるMattermostは比較的少ない手数で日本語全文検索に対応させることが可能です。
別にMattermost自体に手を加えるわけでもないので、その点でも安心です。

「じゃぁウチもMattermostにするか。でもせっかく"[(2) (L)EMP](http://qiita.com/nobu182/items/6ca1a59fd7ec5c229494)"でMySQL入れてるのに、DockerコンテナのPostgreSQL使うってのはどうよ…？」
ごもっとも。

ではMattermostのバイナリをMySQLを使う設定で配置し、日本語全文検索対応させるまでの手順を説明します。とりあえず"[(2) (L)EMP](http://qiita.com/nobu182/items/6ca1a59fd7ec5c229494)"の最後まで行ったところからスタート。

#データベースの作成、ユーザー割当て
全体的には公式ドキュメント http://docs.mattermost.com/install/prod-rhel-7.html を参照に進めていきます。このドキュメントではデータベースにPostgreSQL 9.4を使用する前提で記載されてますが、"[(2) (L)EMP](http://qiita.com/nobu182/items/6ca1a59fd7ec5c229494)"でインストールしたMySQL 5.7を利用します。MySQL 5.6以上も動作環境に入ってますのでご安心を。
（ちなみにDBを日本語全文検索に対応させるのはたぶんMySQLが一番楽ちんです。というかMariaDBはけっこう四苦八苦したあげく結局断念しました。知識のある人がやればできるんでしょうけど。）

下記要領でMattermost用のデータベースを作成し、ユーザーを割当てます。普通Mattermostのシステム以外からアクセスすることはないと思いますので、これだけでよいのではないかと。

```
$ mysql -u root -p
> create database mattermost;
> grant all privileges on mattermost.* to 'webuser'@'localhost' identified by 'MyNewPass4!';
> flush privileges;
> exit
$
```
#Mattermostバイナリーのダウンロード・配置・設定
最新のバイナリーファイルのダウンロード先は http://www.mattermost.org/download/ で確認してください。2016年6月時点では https://releases.mattermost.com/3.1.0/mattermost-team-3.1.0-linux-amd64.tar.gz (2016/06/16)となってます。

/usr/src にダウンロードして解凍

```
$ cd /usr/src
$ sudo wget https://releases.mattermost.com/3.1.0/mattermost-team-3.1.0-linux-amd64.tar.gz
```
/opt 下に配置。

```
$ sudo tar -xvzf mattermost-team-3.1.0-linux-amd64.tar.gz
$ sudo mv mattermost /opt
$ sudo mkdir -p /opt/mattermost/data
$ sudo useradd -r mattermost -U
$ sudo chown -R mattermost:mattermost /opt/mattermost
$ sudo chmod -R g+w /opt/mattermost
$ sudo usermod -aG mattermost centosuser
```
/opt/mattermost/config/config.json ファイルの設定を変更します。大半の部分は後からブラウザで変更できるので、ここではポート番号とデータベース接続の部分のみ。（前述のとおり、ドキュメントではPostgreSQLに合わせた記載になってますのでMySQLに合わせます。）

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

```/opt/mattermost/config/config.json
[...]
        "ListenAddress": ":3010",
[...]
        "DriverName": "mysql",
        "DataSource": "webuser:MyNewPass4!@tcp(localhost:3306)/mattermost?charset=utf8mb4,utf8",
[...]
        "DefaultServerLocale": "ja",
        "DefaultClientLocale": "ja",
[...]
```
ポート番号は適宜、DataSourceのDBユーザー名、パスワード、データベース名は先ほどMattermost用に作成・指定したものと合わせてください。
#動作テスト

```
$ cd /opt/mattermost/bin
$ sudo ./platform
```
この状態でコンソールに`[INFO] サーバーは:3010で接続待ちです`と表示されたら、Webブラウザからそのポートにアクセスしてみてください。アカウント登録画面が表示されたら正常に動作してます。
![Fig311.png](https://qiita-image-store.s3.amazonaws.com/0/116852/10e12b74-bf92-6f7e-8b35-4909798134a9.png)
「config.jsonでロケール"ja"を指定してるのに表示が英語だ」ということもあるかもしれませんが、まぁあまり気にせず行きましょう。
確認できたら一旦`Ctrl-C`で終了させてください。
#サービス化
下記内容のサービス定義ファイルを作成してください。
（作成するディレクトリがドキュメントと異なりますが、これもあまり気にせず。）

```
$ sudo vi /lib/systemd/system/mattermost.service
```

```/lib/systemd/system/mattermost.service
[Unit]
Description=Mattermost
After=syslog.target
After=network.target
After=mysqld.service

[Service]
Type=simple
WorkingDirectory=/opt/mattermost/bin
ExecStart=/opt/mattermost/bin/platform
PIDFile=/var/spool/mattermost/pid/master.pid

[Install]
WantedBy=multi-user.target
```
ドキュメントでは[Service]セクションに`User=mattermost`を記載するようになってますが、この指定があるとうまくサービスとして起動しないので抜きました。

設定内容を反映させて、サービスを開始させてください。

```
$ sudo systemctl daemon-reload
$ sudo systemctl start mattermost
```
この段階でもう一度Webブラウザからアクセスし、正常に画面が表示されたらOKです。（念のためリロードして確認してください。）

あとは自動起動の設定をしてリブート後再度確認してください。

```
$ sudo systemctl enable mattermost
$ sudo reboot
```
うむむ、手数は要りますけど、かかる時間はdocker-composeで延々待ってるより早いくらいかもですね。
#日本語全文検索対応
[Mattermostの日本語メッセージ全文検索対応まとめ(MySQL編)](http://qiita.com/terukizm/items/858bd63daa2c4dba7829)を参考にさせていただきました。
今の時点でインストールされているMySQLのバージョンは'5.7.13'ですので、「MySQL 5.7.6以降を利用している場合」の項に記載のとおり入れて行けば何の問題もありません。丸写しするのもおこがましいですので、そちらを参照してください。

終わったら適当に日本語のメッセージを投稿して検索結果を確認してください。
（ちなみに私はMeCabのほう入れましたので、「おぉ、確かに"京都"で検索しても"東京都"はひっかかからへん！」みたいな感じ。）

以上です。