俺は一体何回Chat環境をつくれば気が済むんだ…
- 社内でHipChatクローンのKandanとHubotを動かす - Qiita
- Let's ChatとHubotを連携する - Qiita
- Back channelingとHubotを連携する - Qiita
ってことで、DockerでRocket.Chatの環境を構築してHubotと連携してみたいと思います。
$ docker version 1.12.3, build 6b644ec
$ docker-compose --version
docker-compose version 1.8.1, build 878cff1
$ docker-machine --version
docker-machine version 0.8.2, build e18a919
インストールは公式のドキュメントを参考にして進めてみます。
iOSアプリのCI用Mac上に構築する想定なので、Mac用の手順を参照しています。
Docker, Docker Composeがインストールされている前提です。
docker-compose.ymlを作成する
Rocket.chatのdocker-compose.ymlを参考にして、必要な設定のみ残したものを作成します。
$ mkdir rocket-chat
$ cd rocket-chat
$ wget https://raw.githubusercontent.com/RocketChat/Rocket.Chat/develop/docker-compose.yml
$ vi docker-compose.yml
Rocket.chatは永続化にMongoDBを利用しているので、MongoDBの設定が入っています。
HubotとRocket.chatを連携したいので、Hubotの設定も残しておきます。
proxy対応として、 hubot-proxy-loader
をEXTERNAL_SCRIPTS
に追加しています。
※ Hubotを別サーバにインストールする場合は、Hubotの設定は不要です
rocketchat:
image: rocketchat/rocket.chat:latest
volumes:
- ./uploads:/app/uploads
- /etc/localtime:/etc/localtime:ro
environment:
- PORT=3000
- ROOT_URL=http://localhost:3000
- MONGO_URL=mongodb://mongo:27017/rocketchat
# - HTTP_PROXY=http://proxy.domain.com
# - HTTPS_PROXY=http://proxy.domain.com
- TZ=Asia/Tokyo
links:
- mongo:mongo
ports:
- 3000:3000
mongo:
image: mongo:3.2
volumes:
- ./data/db:/data/db
- /etc/localtime:/etc/localtime:ro
environment:
- TZ=Asia/Tokyo
command: mongod --smallfiles --oplogSize 128
# hubot, the popular chatbot (add the bot user first and change the password before starting this image)
hubot:
image: rocketchat/hubot-rocketchat:latest
environment:
- ROCKETCHAT_URL=rocketchat:3000
- ROCKETCHAT_ROOM=GENERAL
- ROCKETCHAT_USER=bot
- ROCKETCHAT_PASSWORD=password
- BOT_NAME=bot
# you can add more scripts as you'd like here, they need to be installable by npm
- EXTERNAL_SCRIPTS=hubot-seen,hubot-links,hubot-diagnostics,hubot-proxy-loader
- TZ=Asia/Tokyo
links:
- rocketchat:rocketchat
labels:
- "traefik.enable=false"
volumes:
- ./scripts:/home/hubot/scripts
- /etc/localtime:/etc/localtime:ro
# 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
2016/11/17 Timezoneの設定を追加しました。
ログが 2016-11-17T10:33:31.592+0900
のように表示されるようになります。
起動
$ docker-compose up -d
プロセスの確認
docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------
rocketchat_hubot_1 /bin/sh -c node -e "consol ... Up 0.0.0.0:3001->8080/tcp
rocketchat_mongo_1 /entrypoint.sh mongod --sm ... Up 27017/tcp
rocketchat_rocketchat_1 node main.js Up 0.0.0.0:3000->3000/tcp
Botアカウントの作成
起動後、自身のアカウントを作成しログインしたら、Hubot用のアカウントを作成します。
設定値はdocker-compose.yml
の値に合わせます。
ユーザ作成直後は@bot ping
しても応答が返ってきませんでした。(まだbotが介在していないよう)
再起動を実行すると、
$ docker-compose stop
Stopping rocketchat_hubot_1 ... done
Stopping rocketchat_rocketchat_1 ... done
Stopping rocketchat_mongo_1 ... done
>>> elapsed time 27s
$ docker-compose up -d
Starting rocketchat_mongo_1
Starting rocketchat_rocketchat_1
Starting rocketchat_hubot_1
HubotがRocketchatに接続し、ルームに参加するようになります。
hubot_1 | [Tue Nov 15 2016 04:20:14 GMT+0000 (UTC)] INFO Starting Rocketchat adapter version 1.0.6...
hubot_1 | [Tue Nov 15 2016 04:20:14 GMT+0000 (UTC)] INFO Once connected to rooms I will respond to the name: bot
hubot_1 | [Tue Nov 15 2016 04:20:14 GMT+0000 (UTC)] INFO Connecting To: rocketchat:3000
hubot_1 | [Tue Nov 15 2016 04:20:14 GMT+0000 (UTC)] INFO Successfully connected!
hubot_1 | [Tue Nov 15 2016 04:20:14 GMT+0000 (UTC)] INFO GENERAL
hubot_1 | [Tue Nov 15 2016 04:20:14 GMT+0000 (UTC)] INFO Logging In
hubot_1 | [Tue Nov 15 2016 04:20:15 GMT+0000 (UTC)] INFO Successfully Logged In
hubot_1 | [Tue Nov 15 2016 04:20:15 GMT+0000 (UTC)] INFO Looking up Room ID for: GENERAL
hubot_1 | [Tue Nov 15 2016 04:20:15 GMT+0000 (UTC)] INFO Joining Room: GENERAL
hubot_1 | [Tue Nov 15 2016 04:20:15 GMT+0000 (UTC)] INFO rid: [ 'GENERAL' ]
hubot_1 | [Tue Nov 15 2016 04:20:15 GMT+0000 (UTC)] INFO All rooms joined.
hubot_1 | [Tue Nov 15 2016 04:20:15 GMT+0000 (UTC)] INFO Successfully joined room: GENERAL
hubot_1 | [Tue Nov 15 2016 04:20:15 GMT+0000 (UTC)] INFO Preparing Meteor Subscriptions..
hubot_1 | [Tue Nov 15 2016 04:20:15 GMT+0000 (UTC)] INFO Subscribing to Room: __my_messages__
hubot_1 | [Tue Nov 15 2016 04:20:15 GMT+0000 (UTC)] INFO Successfully subscribed to messages
hubot_1 | [Tue Nov 15 2016 04:20:15 GMT+0000 (UTC)] INFO Setting up reactive message list...
以下の画像の1回目のping
は再起動前、2回目は再起動後です。
感想
なんやかんやうまくいかなくて docker-compose logs -f
したり、 docker-compose rm
で消してからやり直したりしたので、ここらへんのコマンドは覚えておくと良さそうです。
ちょこちょこDockerを社内で利用しようと手を出しているのですが、これだけ簡単に環境が整うのはホント楽ですね。
今回は自分のマシンで環境を構築しましたが、この後にiOSアプリCI用Macに同様の環境を構築する予定です。
そんな場合でも、同様のdocker-compose.yml
を配置してdocker-compose up -d
すれば環境が整うのはありがたいです。