LoginSignup
15
15

More than 5 years have passed since last update.

dokku(docker)を使ったPR連動ステージング環境

Last updated at Posted at 2014-09-22

必要要件

  • 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の長さの設定を変更しておいたほうがいいかも。

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