必要要件
- ubuntu 14.04
- ruby 2.1
- sinatra
- dokku
セットアップ
必要要件をインストール
dokkuが動作出来る環境と、dokku-github-webhookで必要となるrubyとsinatraをインストールする。
sinatraのバージョンは特に意識していない。(現在使用しているのは1.4.5)
digitalOceanを使うと、dokku環境がそろっているので便利。
HOSTNAMEとVHOSTに、example.comを記述
dokku-github-webhookの設定
1.dokku-github-webhookをインストールする。
$ cd /home/dokku
$ sudo -u dokku git clone https://github.com/kiyo-e/dokku-github-webhook.git
2./home/dokku/.ssh/id_rsaを生成
3.dokku-github-webhookフォルダ内の、nginx.confを変更し、webhookを受けられるようにする。(server_nameをwebhook.example.comに修正)
githubの設定
1. githubのプライベートアカウントからcloneできるように、/home/dokku/.ssh/id_rsa.pubをデプロイキーとして、該当リポジトリに登録。
2. webhook.example.comに対して、pull request時に通知が飛ぶよう、githubのwebhookに登録する。
3.githubに登録してるキーをauthorized_keysに登録
worker.rbを起動
デーモン化するために、起動スクリプトを作って起動する。
$ cd /home/dokku/dokku-github-webhook
$ sudo ./bootstrap.sh
デフォルトのENVを設定できるように
通常のdokkuの使い方では、herokuと同じようにENVを設定できるが、PRベースだと環境の構築回数が増えるので、毎回個別に設定していくのは面倒。そこで、デフォルトを指定できるようなプラグインを作成。
インストール
$ sudo git clone https://github.com/kiyo-e/dokku-default-env /var/lib/dokku/plugins/dokku-default-env/
設定
/home/dokku/ENVを編集する。
うちで使っているのは、こんな感じです。
DATABASE_URL=mysql2://hoge:page@127.0.0.1:3306/staging
RAILS_ENV=staging
RACK_ENV=staging
その他
環境を作成後、URLがわからないので別途、通知が必要になる。
具体的には/var/lib/dokku/plugins/notification/post-deployに
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
APP="$1"
PORT="$2"
URL_FILE="$DOKKU_ROOT/$APP/URL"
APP_URL=$(cat $URL_FILE)
echo $APP_URL
curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"app_name":"'$APP'","app_url":"'$APP_URL'"}' http://example.herokuapp.com/
こんな感じのものを作って、heroku経由でいろいろ通知させてます。
TODO
- deployにあわせて通知するようにしているが、初回のpull request時には2回通知されてしまう。
- pull requestが同時に送られてきたときの処理が若干怪しい。
- マイグレーション処理をどうするか。
その他
URL長くなりがちなので、nginxのURLの長さの設定を変更しておいたほうがいいかも。