LoginSignup
16
20

More than 5 years have passed since last update.

Rocket.Chat を Dockerで構築してHubotと連携する

Last updated at Posted at 2016-11-15

https://camo\.githubusercontent\.com/10d84b7d3ba2cff5cef0736152dd6792a38ea511/68747470733a2f2f726f636b65742e636861742f696d616765732f6c6f676f2f6c6f676f2d6461726b2e7376673f7633

俺は一体何回Chat環境をつくれば気が済むんだ…:poop:

ってことで、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-loaderEXTERNAL_SCRIPTS に追加しています。

※ Hubotを別サーバにインストールする場合は、Hubotの設定は不要です

docker-compose.yml
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

Rocket_Chat.png

Botアカウントの作成

起動後、自身のアカウントを作成しログインしたら、Hubot用のアカウントを作成します。
設定値はdocker-compose.ymlの値に合わせます。

Rocket_Chat.png

ユーザ作成直後は@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回目は再起動後です。

Rocket_Chat.png

感想

なんやかんやうまくいかなくて docker-compose logs -fしたり、 docker-compose rm で消してからやり直したりしたので、ここらへんのコマンドは覚えておくと良さそうです。
ちょこちょこDockerを社内で利用しようと手を出しているのですが、これだけ簡単に環境が整うのはホント楽ですね。

今回は自分のマシンで環境を構築しましたが、この後にiOSアプリCI用Macに同様の環境を構築する予定です。
そんな場合でも、同様のdocker-compose.ymlを配置してdocker-compose up -d すれば環境が整うのはありがたいです。

16
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
20