概要
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のイメージがデカいので仕方ないのかもしれないが。