moCloudでHubotを動かしてSlack上で遊ぼう

どうも、mobingiの 吉田真吾@yoshidashingo)です。(※当初セクションナインて書いてたけど、私mobingiの人でもあるのだ、ははは)

mobingiの提供しているPaaS「moCloud」は、サーバー部分をDocker Hubのリポジトリに保存されたdockerイメージからデプロイし、コード部分をGitHubなどからデプロイして利用するのが基本的な操作方法です。

ただし、利用するdockerイメージに含まれていないツールをインストールしたり、すでにインストールしたツールの設定変更をしたい場合に、 mobingi-install.sh という追加実行可能な仕組みを用意しています。

f:id:yoshidashingo:20151215150406p:plain

ここでは、Hubotとhubot-slackのセットアップ方法を例に、moCloudにおけるdockerイメージのデプロイから、Hubotの動作環境の追加セットアップ、コードのデプロイの仕組みを解説します。

まず覚えておくこと

  • moCloudはDocker Hubのリポジトリに登録されているイメージを使ってサーバーを作る
  • 追加インストールやセットアップ内容は mobingi-install.sh に記載して利用する(サーバーで実行させるためにGitHubのリポジトリのルートに置いておく)
  • 実行するアプリケーションコードもGitHubに置いておく

作業の流れ

  • サーバーのデプロイ
    • mobingi公式のdockerイメージを選択してサーバーをデプロイする
  • 追加セットアップの準備
    • Slack上でHubotのIntegrationを設定し、APIトークンをmoCloudの環境変数に設定する
    • mobingi-install.shを書いてみよう (GitHubのリポジトリに追加)
  • コードの準備
  • 準備した追加セットアップとコードをデプロイしBlue-Greenデプロイ
    • GitHubリポジトリを接続する

はじめてみよう

1. サーバーのデプロイ

  • Get Startedドキュメント > ダッシュボードでデプロイ」を参考にデプロイしてみましょう。
  • SSHログインするためのキーペアはこの時点で設置してもいいですし、あとで設置してもOKです。
  • 今回はPHP Stack(mobingi/ubuntu-apache2-php5)を選択します(ApacheもPHPも実際には使わないですが、空のイメージはまだ用意してないので)

f:id:yoshidashingo:20151215100806p:plain

2. 追加セットアップの準備

2-1. Slackの設定

  • Slackの Integrations > Hubotを選択し、bot名を入れて「Add Hubot Integration」を押下します

f:id:yoshidashingo:20151215101913p:plain

  • API Tokenを確認します

f:id:yoshidashingo:20151215102240p:plain

  • moCloudのインスタンスの「設定」タブで環境変数に「key=HUBOT_SLACK_TOKEN, value=<Slackから払いだされたAPI Token>」を入力します

f:id:yoshidashingo:20151215102511p:plain

2-2. mobingi-install.shを書いてみよう

以下はmobingi-install.shで行うべきコマンドの説明です

  • インスタンスに含まれてないNode.jsをセットアップします
apt-get -y install nodejs npm
update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10
  • hubotやhubot-slack,coffee-scriptのインストールをします
npm -y install -g hubot coffee-script hubot-slack
  • コードの配布とsupervisordへの登録
cp -r /var/www/html /root/scripts

echo "[program:hubot]" >> /etc/supervisor/conf.d/supervisord.conf
echo "command=hubot --adapter slack" >> /etc/supervisor/conf.d/supervisord.conf
echo "directory=/root" >> /etc/supervisor/conf.d/supervisord.conf

はい、ここで内部的な仕組みがわかる記述が出てきました。

mocloudでは、GitHubのルートに置かれているmobingi-install.shがインスタンス起動後に実行され、完了した段階で切替が行われますが、それ以外にGitHubのコードはすべて、まず「/root/scripts」にコピーされています。よって、コードの配布はここからcpして配布する設定をしておく必要があります。(今回使ったインスタンスのWebサーバーがApacheなので/var/www/htmlに配布している※Hubotとは関係ない)

3. コードの準備

module.exports = (robot) ->

  robot.respond /hello/i, (msg) ->
    msg.send "hello!"

ということで、上記サンプルが入ってるGitHubのリポジトリが以下です。

github.com

4. デプロイしよう

4-1. デプロイする

  • 「コード」タブでGitHubのリポジトリと接続します

f:id:yoshidashingo:20151215104737p:plain

  • 「ログ」タブで「moDaemon」を選択すると、Blue-Greenデプロイされていることが確認できます

f:id:yoshidashingo:20151215105056p:plain

4-2. 確認する

f:id:yoshidashingo:20151215105611p:plain

4-3. スクリプトを育てる

  • あとはスクリプトを育てて、設定したGitHubリポジトリのブランチにpushすればすぐに新しいコンテナのセットアップと差し替えが行われるようになります。

まとめ

moCloudを使えば簡単にHubotの導入ができますよ。Happy Mobingi Life!!