slackクローンのmattermostをdockerで立てて使うメモ

slackクローンのOSS mattermost をdockerで立てるメモ。
mattermostはslackを使えないケース（オフライン環境）でのchat opsに重宝する。

参考
https://docs.mattermost.com/install/docker-local-machine.html
https://docs.mattermost.com/install/prod-docker.html
https://github.com/mattermost/mattermost-docker-preview

mattermostをdockerで立てる方法は２つある。
- docker-composeを使った、multi-node production版
　https://github.com/mattermost/mattermost-docker
- docker runコマンド一発で起動できるLocal Machine Setup(Preview Mode)版
　https://github.com/mattermost/mattermost-docker-preview

とりあえず使ってみる感じなので後者で。


#インストール

githubで公開されてる公式イメージのdockerfileはこんな感じ。
dbはmysql。

```
# Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
# See License.txt for license information.
FROM mysql:5.7

# Install ca-certificates to support TLS of Mattermost v3.5
RUN apt-get update && apt-get install -y ca-certificates

#
# Configure SQL
#

ENV MYSQL_ROOT_PASSWORD=mostest
ENV MYSQL_USER=mmuser
ENV MYSQL_PASSWORD=mostest
ENV MYSQL_DATABASE=mattermost_test

#
# Configure Mattermost
#
WORKDIR /mm

# Copy over files
ADD https://releases.mattermost.com/4.3.1/mattermost-team-4.3.1-linux-amd64.tar.gz .
RUN tar -zxvf ./mattermost-team-4.3.1-linux-amd64.tar.gz
ADD config_docker.json ./mattermost/config/config_docker.json
ADD docker-entry.sh .

RUN chmod +x ./docker-entry.sh
ENTRYPOINT ./docker-entry.sh

# Create default storage directory
RUN mkdir ./mattermost-data
VOLUME ./mattermost-data

# Ports
EXPOSE 8065
```
カスタマイズしたい場合はcloneしてビルドすれば良い
`git clone https://github.com/mattermost/mattermost-docker-preview.git`


dockerがインストール済みであれば、以下コマンドで起動完了

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



#基本設定
ログインし、初期アカウント作成
メールアドレスは適当でOK。usernameとpasswordを入れて Create Account。
初期ユーザはadminとかrootとか適当に。（後で変更可能）

![スクリーンショット 2017-10-29 14.54.45.png](https://qiita-image-store.s3.amazonaws.com/0/112537/30afbb32-b17c-76f2-4577-f04409053ffc.png)

次に [create a new team]で Team を作成する。
情報共有するプロジェクトや開発チーム単位で任意に。

![スクリーンショット 2017-10-29 14.56.50.png](https://qiita-image-store.s3.amazonaws.com/0/112537/beb294ff-ec2b-0403-3a35-f7e8525e31a9.png)

メイン画面がこちら↓
tutorialは適当にskipできる。
Public Channelsにはデフォルトで[Off Topic]と[Town Square]が用意されてる。
これらはTeamの全ユーザで共有することを目的とし、ユーザは自動で追加される標準チャネル。
Private Channelsは、Team内でもメンバーを限定して共有したい場合に利用する。
チャネルは任意で追加／削除／rename等が可能。
Direct Messagesは、ユーザ間の個別メッセージ用。


![スクリーンショット 2017-10-29 14.59.36.png](https://qiita-image-store.s3.amazonaws.com/0/112537/0c1ad88e-c509-f762-6d52-a87d305d1379.png)

初回利用時は、メインページ上部に邪魔な青い警告バーが表示される。
管理者用のSystem Consoleの設定で非表示にできる。

警告1）
「Please configure your Site URL in the System Console.」
→[General] - [Configuration] - [Site URL]を登録してSAVE

警告2）
「Preview Mode: Email notifications have not been configured」
→[Notification] - [Email] - [Enable Email Notifications:]をenableにしてSAVE

###管理画面 [System Console]

管理者用のSystem Consoleは以下。
次のような設定が可能
・ログイン認証をGitLabアカウントと連携する設定
・Mail通知連携の設定
・外部Gitサービスやクラウドサービスなどと連携するためのWebhook設定
・ユーザ権限変更、パスワードリセット、無効化
・チャネル作成数上限設定
・他

![スクリーンショット 2017-10-29 16.59.26.png](https://qiita-image-store.s3.amazonaws.com/0/112537/0e59daff-0dfa-f5fc-10d7-ba0587311fc3.png)


###ユーザ追加

なお、ユーザ追加は管理画面で簡単に一括でできると思いきや、基本的に招待機能を使う必要がある。
メール連携設定をしなくても可能で、その場合はメインメニューの「Get Team Invite Link」でアカウント登録用URLにアクセスし、１ユーザずつアカウントを追加する。
登録の際、メールアドレス入力が必要だが、メール認証は不要なので、適当で可。
また、SMTPの設定をしていれば、「Send Email Invite」でメールで招待通知を出せる。


###バックアップ

なお、この設定ではバックアップを考慮しておらず、データはコンテナ内に保持される。
適宜データフォルダ（mottermostとmysql）をホストマウントして、バックアップするなどの対策が必要。


#Web Hook

Incoming WebHooks機能で、任意のチャネルに外部からbot的に投稿することができる。
Admin権限のあるユーザのメニューから [Integrations] - [Incoming Webhooks]で、外部からHTTP POSTする　URLを生成できる。
※Incoming WebHooks機能の有効化やユーザ権限の変更は、System Consoleから。

参考
　https://docs.mattermost.com/developer/webhooks-incoming.html


![スクリーンショット_2017-10-29_22_46_09.png](https://qiita-image-store.s3.amazonaws.com/0/112537/2aec1834-e56d-420f-4a31-19d3f2587ff8.png)


curlコマンドで以下のように実行すると、例えば外部からアラートなどを投稿ができる。
テキストをカスタマイズすれば、ChatOps的に使えるはず。

```
curl -i -X POST -d 'payload={"text": "Hello World!"}' http://{your-mattermost-site}/hooks/{Webhooks URL}
```