動機
PaaS もいいけど無料枠であれこれするってのもつらそうだし、思い切ってインスタンス借りてやってしまおうという話。
とりあえず、簡単なChatOpsを全面的に導入したいので、慣れるまで (= 実際のボット作業のインプリをいろいろできるようになるまで) ちょっと生々しいLinuxがみえるところでやってみたいなあと。
参考
LightSail を用意する
- LightSail のコンソールにいって
- インスタンスの作成ボタン
- 設計図の選択 で Node.js 11.6.0 を選択して作成
以上で完了。
Hubot 作成
前手順で用意した LightSail インスタンスに ssh して
sudo npm install -g yo generator-hubot
mkdir ha4go-bot
cd ha4go-bot
yo hubot
これで作成開始、とりあえず以下のように答えた
? Owner PharaohKJ
? Bot name ha4go-bot
? Description A simple helpful robot for your Company
? Bot adapter slack
API Token 取得
- botを置きたいslackにウェブブラウザでログイン
- Search App Directory で
Hubot
を検索して追加 - 名前をつける(私はBot name と同じにした)
これで API Tokenが表示される。
トークンつきでHubot 実行 & TEST
- ↑の
yo hubot
したシェルからHUBOT_SLACK_TOKEN=<TOKEN> ./bin/hubot --adapter slack
- botを置きたいslackのAppsのところに
ha4go-bot
が登場する - ダブルクリックして会話モードに入って
ping
と話かける。PONG
と返ってくる - botを置きたいslackのチャンネルで
/invite @ha4go-bot
とすることで呼び込める - 呼び込んだら
@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ディレクトリに移動して
-
git init
# プリインストールだった、やったね -
git add .
# .gitignore も作ってくれているのでだいじょうぶなはず git commit -m '1st commit'
- GitHubでリポジトリ作成、リポジトリのssh URLゲット
- いろいろやりかたけれど
ssh-keygen
で鍵ペアを作成して公開鍵をGitHubにコピペ git remote add origin <git@githのURL>
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 があがってなくてメモリあいてるっぽいのでよしとする。