LoginSignup
16
16

More than 5 years have passed since last update.

dockerでslackにHubotを住まわせる

Last updated at Posted at 2014-11-27

概要

CentOS7にHubotを立ててslackに住まわせるまでの記録。始めはherokuに立てる予定だったがやはり無料だと色々制限されるので、持て余しているさくらVPS上に構築した。

dockerを使わない場合

「docker言うたやん」と思うかもしれないが、まずdockerを使わない場合でディレクトリ構成を説明する。
最近は何でもかんでもyeomanで雛形を作るのが流行らしい。

% npm install -g yeoman generator-hubot
% mkdir hubotdir
% cd hubotdir
#adapterがデフォルトではcampfireになっているのでslackにする。それ以外は任意。
% yo hubot
                     _____________________________  
                    /                             \ 
   //\              |      Extracting input for    |
  ////\    _____    |   self-replication process   |
 //////\  /_____\   \                             / 
 ======= |[^_/\_]|   /----------------------------  
  |   | _|___@@__|__                                
  +===+/  ///     \_\                               
   | |_\ /// HUBOT/\\                             
   |___/\//      /  \\                            
         \      /   +---+                            
          \____/    |   |                            
           | //|    +===+                            
            \//      |xx|                            

? Owner: [作成者名]
? Bot name: [ボット名]
? Description: [説明]
? Bot adapter: slack

~~ (省略) ~~

% npm install
% tree -L 2
.
|-- Procfile #heroku用、気にしなくて良い
|-- README.md
|-- bin #起動スクリプト格納場所
|   |-- hubot
|   `-- hubot.cmd
|-- external-scripts.json #利用するモジュールのリスト
|-- hubot-scripts.json #node_modules/hubot-scripts/src/scriptsの中で利用するスクリプトのリスト
|-- node_modules
|   |-- coffee-script
|   |-- hubot
|   |-- hubot-diagnostics
|   |-- hubot-google-images
|   |-- hubot-google-translate
|   |-- hubot-help
|   |-- hubot-heroku-keepalive
|   |-- hubot-maps
|   |-- hubot-pugme
|   |-- hubot-redis-brain
|   |-- hubot-rules
|   |-- hubot-scripts
|   |-- hubot-shipit
|   |-- hubot-slack
|   `-- hubot-youtube
|-- package.json
`-- scripts #自作スクリプト格納場所(格納したものは全て有効化される)
    `-- example.coffee

18 directories, 8 files

これであとはscriptsディレクトリ内に自作のスクリプトを置けばよい。
起動前に環境変数をexportしておく。

export HUBOT_SLACK_TOKEN=your_slack_token
export HUBOT_SLACK_TEAM=your_slack_teamname
export HUBOT_SLACK_BOTNAME=any_botname
  • your_slack_token : slack連携画面から取得したアクセストークン
  • your_slack_teamname : slackのチーム名
  • any_botname : 任意のボット名(slack内での表示名)

起動コマンド

% ./bin/hubot -a slack

バックグラウンドで実行させたい場合はscreenやforeverなどを使うといい。

dockerを使う場合

上で作った雛形をもとにDockerfileを書いてイメージをビルドした。

DockerHubにイメージをプッシュして置いたので次の起動コマンドでダウンロードと起動を一挙に行うことができる。

% docker run -d --name hubot -p 8080:8080 \
-e "HUBOT_SLACK_TOKEN=your_slack_token" \
-e "HUBOT_SLACK_TEAM=your_slack_teamname" \
-e "HUBOT_SLACK_BOTNAME=any_botname" \
almat64/hubot:slack

-eオプションでコンテナ内に環境変数を取り込んでいる。
この例では8080番ポートを割り当てているが、もちろんホスト側の割り当てポートは何でもいい。
私の場合はnginxをリバースプロキシとしてbot.[ドメイン]というバーチャルホストに80番でlistenさせている。

slack側の設定はインテグレーションの管理画面に従えば、すぐにトークンを発行してくれる。

課題

コンテナのサイズ大き過ぎる...(500MB越え)
そもそもベースにしているnode.jsのイメージがデカいので仕方ないのかもしれないが。

16
16
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
16