Arukasを使って無料でGo製のslackbotを運用する
はじめに
SlackbotをHerokuで一日中動かすと課金が発生するので色々ハックが必要となったりするので、なんとかしたくArukasに出会いました。
今回は、自分が作ったgo製のslackbotを元につくったbotをgithubにpushしてWercker経由でdockerImageを作ってArukasへのDeployを行う方法を紹介します。
今回のコードとか設定をexampleとして公開してますので、よろしければ参考にしていただければと。
Arukasとは?
いまのところ無料でDockerをホスティングできるサービスです。
一応CLIツールも公開されていて、結構便利です。
※注意点としては、CMDで起動したプロセス監視とかは無いので自分でとかgo-server-starterとかを入れてプロセス死んだときに再起動する仕組みを入れる必要があるところです。
流れ
- 以前作ったgo製のslackbotのdockerImageをWerckerで作成する kyokomi.hatenablog.com kyokomi.hatenablog.com
- Arukasのコンソールでアプリケーションを作成し、dockerImageを指定する
- WerckerのworkflowでArukasのrestartを設定する
slackbotのコード自体はDockerとか意識しない形になっているので、wercker.ymlとかを見ていただければと。
example-go-slackbot/wercker.yml at master · kyokomi/example-go-slackbot · GitHub
Werckerの設定
README.md に書いてある通り6つの環境変数の登録が必要です。
- DockerHubまわりは、普通に自分のアカウントとかリポジトリを入れてもらえればOKです
- Arukasまわりは、 https://app.arukas.io/settings/api-keys で発行したAPIKeyとSecretを設定してください
ポイントはdocker-pushのworkflowで github.com/lestrrat/go-server-starter/cmd/start_server
をinstallしてます。
まあ別にバイナリをdonwloadでもいいんですが面倒だったので...
docker-push: box: golang steps: - glide-install - setup-go-workspace - script: name: install deamontools code: | go get github.com/lestrrat/go-server-starter/cmd/start_server - script: name: install application code: | go install - internal/docker-push: username: $DOCKER_HUB_USERNAME password: $DOCKER_HUB_PASSWORD tag: latest repository: $DOCKER_HUB_REPOSITORY registry: https://registry.hub.docker.com
arukas-deployのworkflowでは、 arukasのバイナリをdownloadして適当にPATHを通してstop -> startしてます。
sleep 10
を挟んでいるのは、stopする前にstartするとエラーになるので仕方なくです。
arukas-deploy: box: golang steps: - script: name: install tools code: | sudo apt-get update sudo apt-get -f install sudo apt-get install -y wget unzip curl tree - script: name: arukas install code: | mkdir -p $HOME/lib export PATH=$PATH:$HOME/lib cd $HOME/lib wget https://github.com/arukasio/cli/releases/download/v0.1.2/arukas_v0.1.2_linux_amd64.zip unzip arukas_v0.1.2_linux_amd64.zip rm arukas_v0.1.2_linux_amd64.zip - script: name: arukas restart code: | arukas stop ${ARUKAS_CONTAINER_ID} sleep 10 arukas start ${ARUKAS_CONTAINER_ID}
Arukasの設定
- SlackbotのTokenは、
Bots
かhubot
で作ったTokenを使ってください - docomoのAPIは雑談で使ってます(必須じゃないので不要なら設定しなくてOKです)
- REDISTOGO_URLは、
redis://<id>:<password>@<host>:<port>
の形式で指定します- 雑談のContext保持とCronコマンドの保存に使っています
- Redis To Go のfree planを使うのがおすすめです
- CMDでgo-server-stater経由でbotを起動するように指定してます
おまけ
ちゃんとプロセス死んで再起動するかの動作確認ですが、昔ネタでいれたcommandを実行させるプラグインが役に立ちました。(危険)
何度でも蘇る。