きょこみのーと

元六本木でGo書いてました。今はVRでGo書いてます。

Arukasを使って無料でGo製のslackbotを運用する

はじめに

SlackbotをHerokuで一日中動かすと課金が発生するので色々ハックが必要となったりするので、なんとかしたくArukasに出会いました。

今回は、自分が作ったgo製のslackbotを元につくったbotgithubにpushしてWercker経由でdockerImageを作ってArukasへのDeployを行う方法を紹介します。

github.com

今回のコードとか設定をexampleとして公開してますので、よろしければ参考にしていただければと。

Arukasとは?

いまのところ無料でDockerをホスティングできるサービスです。

arukas.io

一応CLIツールも公開されていて、結構便利です。

github.com

※注意点としては、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の設定

f:id:kyokomi:20170101221031p:plain

README.md に書いてある通り6つの環境変数の登録が必要です。

ポイントは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の設定

f:id:kyokomi:20170102005223p:plain

おまけ

ちゃんとプロセス死んで再起動するかの動作確認ですが、昔ネタでいれたcommandを実行させるプラグインが役に立ちました。(危険)

f:id:kyokomi:20170102010051p:plain

何度でも蘇る。