LoginSignup
4
4

More than 5 years have passed since last update.

AWS LightSail で hubot を動かしてサービス化して備える

Last updated at Posted at 2019-04-26

動機

PaaS もいいけど無料枠であれこれするってのもつらそうだし、思い切ってインスタンス借りてやってしまおうという話。

とりあえず、簡単なChatOpsを全面的に導入したいので、慣れるまで (= 実際のボット作業のインプリをいろいろできるようになるまで) ちょっと生々しいLinuxがみえるところでやってみたいなあと。

参考

LightSail を用意する

  1. LightSail のコンソールにいって
  2. インスタンスの作成ボタン
  3. 設計図の選択 で Node.js 11.6.0 を選択して作成

以上で完了。

Hubot 作成

前手順で用意した LightSail インスタンスに ssh して

  1. sudo npm install -g yo generator-hubot
  2. mkdir ha4go-bot
  3. cd ha4go-bot
  4. yo hubot

これで作成開始、とりあえず以下のように答えた

? Owner PharaohKJ
? Bot name ha4go-bot
? Description A simple helpful robot for your Company
? Bot adapter slack

API Token 取得

  1. botを置きたいslackにウェブブラウザでログイン
  2. Search App Directory で Hubot を検索して追加
  3. 名前をつける(私はBot name と同じにした)

これで API Tokenが表示される。

トークンつきでHubot 実行 & TEST

  1. ↑の yo hubot したシェルから HUBOT_SLACK_TOKEN=<TOKEN> ./bin/hubot --adapter slack
  2. botを置きたいslackのAppsのところに ha4go-bot が登場する
  3. ダブルクリックして会話モードに入って ping と話かける。 PONG と返ってくる
  4. botを置きたいslackのチャンネルで /invite @ha4go-bot とすることで呼び込める
  5. 呼び込んだら @ha4go-bot ping と話かけると PONG を返ってくる

できたぞー

自動実行 = サービス化

サービスファイルを作成して systemd にがんばってもらう。hubotコンソールを抜けて

sudo vim /etc/systemd/system/ha4go-bot.service

参考サイトを参照して以下のように作った。実行ファイルをフルパスにしないといけなかった & 実行パスをいろいろ指定しないと npm が無いと言われたので sudo su - して export した PATH の中身をまるまるコピペした。あと、 Environment="HUBOT_SLACK_TOKEN=<TOKEN>"Environment="HUBOT_SLACK_TOKEN='<TOKEN>'" ってやったらクオートがトークンにはいっちまってNGだったので注意。

[Unit]
Description=Ha4go-Hubot
Requires=network.target
After=network.target

[Service]
Type=simple
Restart=always
WorkingDirectory=/home/bitnami/ha4go-bot/
User=bitnami
ExecStart=/home/bitnami/ha4go-bot/bin/hubot --adapter slack
ExecStop=/bin/kill $MAINPID
ExecReload=/bin/kill -HUP $MAINPID
Environment="HUBOT_SLACK_TOKEN=<TOKEN>"
Environment="PATH='/opt/bitnami/redis/bin:/opt/bitnami/python/bin:/opt/bitnami/nodejs/bin:/opt/bitnami/git/bin:/opt/bitnami/apache2/bin:/opt/bitnami/common/bin:/opt/bitnami/redis/bin:/opt/bitnami/python/bin:/opt/bitnami/nodejs/bin:/opt/bitnami/git/bin:/opt/bitnami/apache2/bin:/opt/bitnami/common/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin'"


[Install]
WantedBy=multi-user.target

このファイルができたら sudo systemctl start ha4go-bot で開始。slackにha4go-botがオンラインになったら大成功。ならなかったら

  • sudo systemctl status ha4go-bot で確認
  • journalctl -e とか journalctl -xe でログ確認

しながら対応すればOK。だいじょうぶそうなら sudo systemctl enable ha4go-bot して自動起動有効にしておく。

そして ssh を抜けてha4go-botがオンラインのままならとりあえず成功。やったね。

ソースコードの管理

んんー↑の Environment="HUBOT_SLACK_TOKEN=<TOKEN>"EnvironmentFile に置き換えてコード管理したほうがいいかもしれないね、、、。とりあえずserviceファイルは管理しないとして、ha4go-botディレクトリに移動して

  1. git init # プリインストールだった、やったね
  2. git add . # .gitignore も作ってくれているのでだいじょうぶなはず
  3. git commit -m '1st commit'
  4. GitHubでリポジトリ作成、リポジトリのssh URLゲット
  5. いろいろやりかたけれど ssh-keygen で鍵ペアを作成して公開鍵をGitHubにコピペ
  6. git remote add origin <git@githのURL>
  7. git push origin master

できたのがこれ PharaohKJ/ha4go-bot: CfK で使うボットです

とりあえずこれで準備はできたな。とりあえずメモリの量とか気になるんでいったん munin-node 入れてウォッチしていく。

httpd を止めておく

munin でみてたらもういきなりメモリないやんけ。ケチって512Mのインスタンス借りたからまぁしょうがないんだが・・・。

$ ps aux
(略)
root      1863  0.0  0.8 199192  4388 ?        Ss   11:19   0:00 /opt/bitnami/apache2/bin/httpd.bin -f /opt/bitnami/apache2/conf/httpd.conf
daemon    1870  0.0  2.4 568348 12000 ?        Sl   11:19   0:00 /opt/bitnami/apache2/bin/httpd.bin -f /opt/bitnami/apache2/conf/httpd.conf
daemon    1871  0.0  2.3 568544 11780 ?        Sl   11:19   0:00 /opt/bitnami/apache2/bin/httpd.bin -f /opt/bitnami/apache2/conf/httpd.conf
daemon    1872  0.0  2.6 568544 13452 ?        Sl   11:19   0:00 /opt/bitnami/apache2/bin/httpd.bin -f /opt/bitnami/apache2/conf/httpd.conf
daemon    1873  0.0  2.9 568680 14908 ?        Sl   11:19   0:00 /opt/bitnami/apache2/bin/httpd.bin -f /opt/bitnami/apache2/conf/httpd.conf
daemon    1874  0.0  2.9 568540 14460 ?        Sl   11:19   0:00 /opt/bitnami/apache2/bin/httpd.bin -f /opt/bitnami/apache2/conf/httpd.conf
(略)

んんん?httpdがバリバリ動いてますぞ。そうかNode.jsの設計図を使うとbitnamiさんが用意してくれたhttpdがデフォルトで動くようになってるのか。 このサーバ:80 でwelcomeページも表示される。expressとか使うのにはいいんだろうが、今回はいらないんだなあ。

httpd (apache2) はうまいこと bitnami さんのスクリプトで処理されているようで httpd だけを disable する方法がわからん。中のスクリプト読む限り、まぁこれでいいんじゃないか、、、ってことで

$ sudo systemctl stop bitnami
$ sudo systemctl disable bitnami
$ sudo systemctl status bitnami

ってやっとけば、再起動しても httpd があがってなくてメモリあいてるっぽいのでよしとする。

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