CentOS7-minimal上に社内向け各種OSSシステム構築 -- (4-1) 各種Slackクローンお試し

#はじめに
このところ社内SNSの一つとしてチャット系のシステムが活況のようで、クラウドサービスとしても多くのよさげなサービスが提供されてます。ただ、OSSなものは基本"[Slack](https://slack.com/)"のクローンです。

以下が有名どころ？のようですので、これらをインストールして比較できる環境を作っていきます。

* [Rocket.Chat](https://rocket.chat/)
* [Mattermost](http://www.mattermost.org/)
* [Let's Chat](https://sdelements.github.io/lets-chat/)

基本公式サイトに記載されている手順通りやっていけば動く「はず」なんですが、ちょっとしたことでハマったりしがちですので、私がハマったこととかが何らかのお役に立ちましたら幸いです。

他にも"[Kandan](https://github.com/kandanapp/kandan)"、"[Zulip](https://www.zulip.org/)"もよく見かけますが、"Kandan"は

>「SlackとKandanを比較した場合、Slackの出来がいいため、どうしてもという理由がない限りSlackを使ったほうがいいようです。」（http://hidemium.hatenablog.com/entry/2014/11/03/022453 ）

らしいので、また"Zulip"は興味ひかれますが少々大物のようですので、これらはまた別の機会に。
- - -
#Rocket.Chat
公式サイトのドキュメント https://rocket.chat/docs/installation/docker-containers/docker-compose によると「今のところ本番運用ではお勧めしないよ」って書いてありますが、お試しなのでdocker-compose使います。

適当なディレクトリを作成して、その中に docker-compose.yml ファイルを作成します。

```
$ mkdir ~/rocketchat-docker
$ cd ~/rocketchat-docker
$ vi docker-compose.yml
```

```~/rocketchat-docker/docker-compose.yml
mongo:
  image: mongo
# volumes:
#    - ./data/runtime/db:/data/db
#    - ./data/dump:/dump
  command: mongod --smallfiles --oplogSize 128

rocketchat:
  image: rocketchat/rocket.chat:latest
# volumes:
#    - ./uploads:/app/uploads
  environment:
    - PORT=3000
    - ROOT_URL=http://yourhost:3000
    - MONGO_URL=mongodb://mongo:27017/rocketchat
# 次の1行を追加しておく方が無難です。
    - Accounts_UseDNSDomainCheck=false
  links:
    - mongo:mongo
  ports:
    - 3000:3000

# hubot, the popular chatbot (add the bot user first and change the password before starting this image)
hubot:
  image: rocketchat/hubot-rocketchat
  environment:
    - ROCKETCHAT_URL=rocketchat:3000
    - ROCKETCHAT_ROOM=GENERAL
    - ROCKETCHAT_USER=bot
    - ROCKETCHAT_PASSWORD=botpassword
    - BOT_NAME=bot
# you can add more scripts as you'd like here, they need to be installable by npm
    - EXTERNAL_SCRIPTS=hubot-help,hubot-seen,hubot-links,hubot-diagnostics
  links:
    - rocketchat:rocketchat
# this is used to expose the hubot port for notifications on the host on port 3001, e.g. for hubot-jenkins-notifier
  ports:
    - 3001:8080
```
ほぼ[公式サイトのサンプル](https://raw.githubusercontent.com/RocketChat/Rocket.Chat/develop/docker-compose.yml)丸写しですが一点注意。
真ん中らへんの

```
- Accounts_UseDNSDomainCheck=false
```
というのを1行追加しておく方が無難です。これがないと新規ユーザー登録時にそのメールアドレスによっては「無効なドメイン」というエラーチェックに引っかかる（バグ）かもなので。そのうち修正されるんでしょうけど、あとからは変更できないそうなので、指定しておきましょう。
>これは[推奨手順](https://rocket.chat/docs/installation/manual-installation/centos/)でも同じくで、`export Accounts_UseDNSDomainCheck=false`をしておかないと同じはめに陥ります。

docker-compose.yml ファイルを記載したらあとはそのディレクトリで

```
$ docker-compose up -d mongo
$ docker-compose up -d rocketchat
```
これだけです。楽ちん。今回は

```docker-compose.yml
[...]
rocketchat:
[...]
  ports:
    - 3000:3000
[...]
```
と指定した3000番ポート（"3000:3000"の左側）で待ち受けてますので、http://[host or ip]:3000/ にアクセスしてみてください。ログイン画面が表示されるはずです。
![Fig_Rocket.Chat_Home.png](https://qiita-image-store.s3.amazonaws.com/0/116852/4edc25d5-f86a-a1da-0e86-3c3834b29cdd.png)
「新しいアカウントを登録」からアカウントを作成しましょう。

![Fig_Rocket.Chat_Register.png](https://qiita-image-store.s3.amazonaws.com/0/116852/28d0b592-55d7-a81f-c55b-793accdf2368.png)
ユーザー名、メールアドレス、パスワードを入力して［送信］。

![Fig_Rocket.Chat_General.png](https://qiita-image-store.s3.amazonaws.com/0/116852/b038667d-1161-231a-394e-14cf5c339b40.png)
こんな感じです。標準でだいたい日本語化もされてます。

#Mattermost
同じく公式ドキュメント http://docs.mattermost.com/install/prod-docker.html を参考にしながらdocker-composeで構築します。

```
$ cd
$ git clone https://github.com/mattermost/mattermost-docker.git
$ cd mattermost-docker
```
gitで落としてきた docker-compose.yml で指定されている80番ポートのままだと本チャンのnginxのデフォルトポートと当たりますので、ポート番号を変更してください。

```
$ vi docker-compose.yml
```

```~/mattermost-docker/docker-compose.yml
[...]
web:
  build: web
  ports:
#    - "80:80"
    - "3010:80"
[...]
```
あ、公式ドキュメントには

```
ln -s docker-compose-nossl.yml docker-compose.yml
```
みたいなシンボリックリンクを張るように書いてあったりしますが、少なくとも今は不要です。この辺りはgitで落としてきた内容を見て適宜判断してください。

あとは`docker-compose up -d`するだけ…と行きたいとこなんですが、もう一つ。
落としてきたDockerfileのなかで`apt-get`とかが実行されますので、proxy設定を行っておく必要があります。'app'、'db'、'web'の各サブディレクトリ内のDockerfileに以下のようにproxy設定環境の設定を2行ずつ、それぞれ追加しておいてください。

```Dockerfile
FROM [...]
ENV http_proxy http://proxy.sample.co.jp:8080/
ENV https_proxy http://proxy.sample.co.jp:8080/
[...]
```
ではdocker-compose実行。

```
$ cd ~/mattermost-docker
$ docker-compose up -d
```
いろいろやってくれてるのを横目に悠然と待つ…(笑) 環境によりけりですが10分や20分とかは余裕でかかるかも。

Dockerコンテナが全て立ち上がったら指定したポートにアクセスしてみてください。サインアップ画面が表示されるはず。
![Fig_Mattermost_FirstUserSignup.png](https://qiita-image-store.s3.amazonaws.com/0/116852/695ee386-8c69-031c-cb15-db0b5fa65e79.png)
とりあえず管理者とするアカウントの情報を入力してアカウントを作成しましょう。

![Fig_Mattermost_SelectTeam.png](https://qiita-image-store.s3.amazonaws.com/0/116852/9cf957b5-572f-d3a8-cc14-6fe29ebe7094.png)
"Create a new team"リンクからお好きな名前のチームを作成してください。

![Fig_Mattermost_Language.png](https://qiita-image-store.s3.amazonaws.com/0/116852/b207066f-165e-b2da-79ca-efacb3d63b38.png)
日本語表示にもほぼほぼ対応してます。

![Fig_Mattermost_TownSquare.png](https://qiita-image-store.s3.amazonaws.com/0/116852/c816a49f-920a-c318-0a3e-2feab5594a2a.png)
Let's Try!!
#Let's Chat
Let's Chatも https://hub.docker.com/r/sdelements/lets-chat/ に記載されている手順でdocker-composeで簡単に構築できます。

```
$ cd
$ mkdir letschat-docker
$ cd letschat-docker
$ vi docker-compose.yml
```

```~/letschat-docker/docker-compose.yml
app:
  image: sdelements/lets-chat
  links:
    - mongo
  ports:
#    - 8080:8080
    - 3020:8080
    - 5222:5222

mongo:
  image: mongo:latest
```
docker-compose.yml ファイルもページに記載されているサンプル丸写しですが、ポート番号だけ変えておきましょう。あとは

```
$ docker-compose up -d
```
コンテナが作成されて立ち上がったら指定したポートにアクセスしてみてください。サインイン画面が表示されるはずです。
![Fig_LetsChat_Login.png](https://qiita-image-store.s3.amazonaws.com/0/116852/ef26f9d2-e21f-030f-1c18-6e3f1cacf6e4.png)
何か「都会的」って感じでかっこいいですね。
"I Need an account"をクリックしてアカウントを作成しましょう。

![Fig_LetsChat_Register.png](https://qiita-image-store.s3.amazonaws.com/0/116852/47dee699-c3b9-2694-36ac-52e6cbad026f.png)
管理者用のアカウントの情報を入力して登録しましょう。

![Fig_LetsChat_AllRooms.png](https://qiita-image-store.s3.amazonaws.com/0/116852/5c12187a-d1f2-2c7f-06d8-30461e082954.png)
え～っと、とりあえずからっぽ(笑)です。右上の"+"マークをクリックして新しいルームを作成するところから始めてください。
#注意：自動起動は…されません <(_ _)>
docker-compose.yml ファイル内で`restart: always`指定することで、OS起動後にコンテナを自動起動できる場合もあるのですが、今回の場合はできてません。

起動後は同じように`$ docker-compose up -d`してください。（初回以降はすぐにコンテナは起動します。）

たぶん自動起動の方法はあると思いますので調べてみてください。