3
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

docker-composeでChatWork用のhubot環境を作る

すごい冗長な気がするけど

  • hubot with chatwork adapter
  • redis
  • redisのData Volume Container

の3つのdockerコンテナをdocker-composeで管理できるようにしてみました。

前提

  • Mac OS X 10.10.3
  • virtualbox 4.3.28
  • homebrew
  • node.js

手順

dockerインストール

今回はboot2docker上でdockerを動かします。

brew install boot2docker

boot2docker VMを作成して起動します。

boot2docker init
boot2docker start

環境変数をセットします。

$(boot2docker shellinit)

docker-composeインストール

brew install docker-compose

hubot環境を作る

ローカルにhubot環境を作ります。
公式に倣ってyeomanでひな形を生成します。

HUBOT

npm install -g yo generator-hubot
mkdir myhubot
cd myhubot
yo hubot

幾つか質問されます。Bot adapterにはchatworkと入力します。

ひな形が生成されたらカレントディレクトリにあるexternal-scripts.jsonを開きます。
今回herokuは使わないのでhubot-heroku-keepaliveを消しておきます。

hubotコンテナのDockerfileを書く

上記でhubotのひな形を作ったプロジェクトのルートディレクトリにDockerfileを置きます。

FROM node:latest

ENV BOT_HOME /bot

RUN mkdir $BOT_HOME
WORKDIR $BOT_HOME

ADD ./package.json $BOT_HOME/
RUN npm install

ADD . $BOT_HOME

CMD ["bin/hubot", "--adapter", "chatwork"]

先にpackage.jsonだけをADDしてnpm installすることで、package.jsonに変更がなければbuildをスキップさせることができます。RailsのDockerfile内でGemfileに対して使われている手法を真似してみました。

.dockerignoreファイルを作る

build時に変更があったことを検知してほしくないファイルは無視されるようにしておきます。

## node
node_modules

.git

## log
.hubot_history

## OSX
.DS_Store

docker-compose.ymlを書く

hubotはDockerfileからbuild、redisとData Volume Containerはimageから作ります。
このdocker-compose.ymlもプロジェクトのルートに置きます。

redis:
  restart: always
  image: redis:latest
  command: redis-server --appendonly yes
  volumes_from:
    - storage

storage:
  restart: always
  image: busybox:latest
  volumes:
    - /var/lib/redis:/data

hubot:
  restart: always
  build: .
  ports:
    - '8190:8080'
  environment:
    REDIS_URL: redis://redis:6379
    HUBOT_CHATWORK_TOKEN: 
    HUBOT_CHATWORK_ROOMS: 
    HUBOT_CHATWORK_API_RATE: 420
    TZ: Asia/Tokyo
  links:
    - redis

hubotコンテナの環境変数にはredisの接続に必要なREDIS_URLと、chatwork用hubotアダプターの環境変数、あとはタイムゾーン設定をするTZを設定してみました。
環境変数は、値を空にすることでdocker-compose up時にhostマシンに設定されている同じ名前の環境変数を読み込ませる事ができます。セキュアな情報を書きたくない時に便利ですね。

Compose yml - Docker Documentation

一応8190ポートでhubotにアクセスできるようにしていますが、chatworkと連携するだけならこれは特に必要ないです。

起動

先にhostのMac側でchatworkの環境変数を設定しておきます。

export HUBOT_CHATWORK_TOKEN=XXXXXXXXXXXXXXXXXX
export HUBOT_CHATWORK_ROOMS=XXXXXX,XXXXXX

プロジェクトのルートディレクトリで起動します。

docker-compose up -d

upコマンドはbuildから起動まで全部まとめてやってくれます。

Compose command line - Docker Documentation

-dオプションを付けることでバックグラウンドで起動しています。

これでhubotが動くようになりました。chatwork上で話しかけたらなんか答えてくれると思う。
ソースはGitHubに置いています。

distkloc/docker-hubot-chatwork

参考

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
3
Help us understand the problem. What are the problem?