Mattermost-dockerをRaspberry Pi3で動かす

# Mattermost-dockerをRaspberry Pi3で動かす
ラズパイ用のMattermostをビルドした後で、Mattermost-docker用のdockerコンテナを作成します。

この記事は、[MattermostをRaspberry Pi3用にビルドする](https://qiita.com/tkyonezu/items/64eb7f5fd2c7ad6dc668)の続編となっています。またラズパイには、dockerとdocker-composeがインストールされている必要があります。

参考： dockerは、[Get Docker-CE for Debian](https://docs.docker.com/install/linux/docker-ce/debian/) にある armhf用でインストールします。
　　　 docker-composeは、[Raspberry Pi用docker-composeの構築](https://qiita.com/tkyonezu/items/ceaaf41924df39254058) を参照して下さい。

## 1. Mattermost-dockerのコンテナ
Mattermost-dockerでは、app、db、webの3つのコンテナを使用していますが、それぞれのBase Imageは以下のようになっています。

| サービス | app | db | web |
|---|---|---|---|
| コンテナ | mattermost-docker_app | mattermost-docker_db | mattermost-docker_web |
| アプリケーション | mattermost-team-linux-arm.tar.gz |   |   |
| ベースイメージ | alpine:3.6  | postgres-9.4:alpine | nginx:mainline-alpine |

- ラズパイ用としてappのベースイメージである`alpin:3.6`は、`arm32v6/alpine:3.6`が`alpine:3.6.2`ベースになっていますので、これを使います。
- PostgreSQLは、`arm32v6/postgres:9.4-alpine`にします。
- nginxは、見つからなかったので`arm32v6/alpine:3.6`をベースイメージとして、コンテナを作ってしまいましょう。このコンテナイメージ名を`arm32v6/nginx:mainline-alpine`としてビルドすると、以下のようになります。

| サービス | app | db | web |
|---|---|---|---|
| コンテナ | mattermost-docker_app | mattermost-docker_db | mattermost-docker_web |
| アプリケーション | mattermost-team-linux-arm.tar.gz |   |   |
| ベースイメージ | arm32v6/alpine:3.6  | arm32v6/postgres:9.4-alpine | arm32v6/nginx:mainline-alpine |

この図では、nginx用のベースイメージを`arm32v6/nginx:mainline-alpine`としていますが、そのコンテナイメージを作成するためのベースイメージを`arm32v6/alpine:3.7`としています。mattermostのappでは、`alpine:3.6`でしたが`nginx:mainline-alpine`のDockerfileが`alpine:3.7`を使っていましたので3.7に修正しています。

## 2. nginx用コンテナの作成
`docker-nginx`をクローンします。

```
git clone https://github.com/nginxinc/docker-nginx.git
```

alpine用のmainlineということで、`mainline/alpine`ディレクトリのDockerfileを修正してベースイメージをラズパイ用にします。

```
cd docker-nginx/mainline/alpine
vi Dockerfile
FROM arm32v6/alpine:3.7
```

ここで、dockerコンテナをビルドします。

```
docker build -t arm32v6/nginx:mainline-alpine .
```

## 3. mattermost-dockerのビルド
いよいよmattermost-dockerのコンテナをビルドします。
### 3.1 mattermost-dockerのクローン
`mattermost-docker`をクローンします。

```
git clone https://github.com/mattermost/mattermost-docker.git
```

### 3.2 mattermostパッケージをコピー
[事前にビルド](https://qiita.com/tkyonezu/items/64eb7f5fd2c7ad6dc668)しておいた`mattermost-team-linux-arm.tar.gz`ファイルを`mattermost-docker/app`ディレクトリにコピーします。

```
cp mattermost-team-linux-arm.tar.gz mattermost-docker/app
```

### 3.3 app/Dockerfileの修正
app/Dockerfileをラズパイ用に修正します。

```
cd mattermost-docker/app
vi Dockerfile
FROM arm32v6/alpine:3.6
```

また`Dockerfile`の`# Get Mattermost`のRUNコマンドを、以下の内容に修正して、事前にビルドしたパッケージを使用するようにします。

```
COPY mattermost-team-linux-arm.tar.gz /

RUN mkdir -p /mattermost/data \
 && tar zxvf mattermost-team-linux-arm.tar.gz \
 && cp /mattermost/config/config.json /config.json.save \
 && rm -rf /mattermost/config/config.json \
 && rm mattermost-team-linux-arm.tar.gz
```

### 3.4 db/Dockerfileの修正
db/Dockerfileをラズパイ用に修正します。

```
cd mattermost-docker/db
vi Dockerfile
FROM arm32v6/postgres:9.4-alpine
```

### 3.5 web/Dockerfileの修正
web/Dockerfileをラズパイ用に修正します。

```
cd mattermost/web
vi Dockerfile
FROM arm32v6/nginx:mainline-alpine
```

### 3.6 mattermost-dockerのビルド
準備ができたので、mattermost-dockerをビルドします。

```
cd mattermost-docker
docker-compose build
```

ビルドが成功すると、以下の3つのコンテナイメージができています。

```
$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED
     SIZE
mattermost-docker_web   latest              a176edc41160        16 seconds ago
     15MB
mattermost-docker_app   latest              d10b8c15596b        32 seconds ago
     165MB
mattermost-docker_db    latest              41694313188e        About a minute a
go   336MB
```

## 4. mattermost-dockerの起動
docker-composeを使って、mattermost-dockerを起動します。

```
cd mattermost-docker
docker-compose up -d
```

起動している状態は、以下となっています。

```
$ docker ps -a
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                                      NAMES
d324568f0991        mattermost-docker_web   "/entrypoint.sh"         20 seconds ago      Up 10 seconds       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   mattermost-docker_web_1
397890880eda        mattermost-docker_app   "/entrypoint.sh plat…"   20 seconds ago      Up 11 seconds       80/tcp                                     mattermost-docker_app_1
515ab571d4b6        mattermost-docker_db    "/entrypoint.sh post…"   20 seconds ago      Up 11 seconds       5432/tcp                                   mattermost-docker_db_1
```

## 5. mattermost-dockerのアクセス
ブラウザからmattermost-dockerの動いているラズパイをアクセスします。

成功していれば、Mattermostの初回サインアップ画面が表示されますから管理者用のアカウントを作成します。

## 6. 実際の利用にあたって
上記でラズパイ上で、Mattermostを利用できるようになりました。ただし、実際に利用する場合にはhttps対応をしたり、dbとappでマウントするボリュームを変更したりしておいた方が良いでしょう。

参考： [Configuring NGINX with SSL and HTTP/2](https://docs.mattermost.com/install/config-ssl-http2-nginx.html)