概要
- アプリを開発する際、
http://commit番号-ドメイン
とかで見れるようになると凄い楽そうだなぁと思い、galaxyというAPIを作ってみました(commit番号は7桁) - https://github.com/sioncojp/galaxy
仕組み
- 複雑に見えますがシンプルです。流れとしてはこんな感じです。
- 事前にDockerをインストール
- commit番号を保管する"galaxy.commits"テーブルを作成する
- ベースとなるconfig.ymlを作る
-
galaxy -c config.yml
APIサーバ起動 -
/repository -X POST
作業用のworkdirを作る * ターゲットとなるリポジトリをgit cloneしたてくる。 -
/container_proxy -X POST
config.ymlに指定したproxyサーバを立てる -
/container/:commit_number -X POST -F "commit_number=99c6894"
commit番号でdocker containerを立てる- "workdir/commit番号/"を作成し、"コンテナ:/tmp"にマウントされてる
- "VIRTUAL_HOSTS変数 = commit番号-config.url"をセット
- コンテナ起動後、ローカルスクリプトが実行可能(config.script)で、"引数$1 = workdir/commit番号/"となっている。
ここでbuildしたものやrailsだとcpなどで"workdir/commit番号/"に移してあげる - コンテナ起動後+ローカルスクリプト実行後、コンテナに対しbashコマンドが実行可能(config.docker.exec)
- コミット番号40桁をDBに登録
- /etc/hostsを書き換えれば、proxyを介してアクセス可能。
- 例:
127.0.0.1 99c6894-test-app.com
- proxyは
jwilder/nginx-proxy
ベースで、建てたコンテナの"VIRTUAL_HOSTS変数"を読み取って動的に"/etc/nginx/conf.d/default.conf"を書き換える - また、workdirが/tmpにマウントされているので、コンテナ毎のapp.sockにアクセスすることが出来る
- 例:
-
/container/list
proxy以外のコンテナ一覧を表示 -
/url/list
アクセス可能なURL一覧を表示
サンプルその1 - Go
- https://github.com/sioncojp/galaxy/blob/master/doc/sample_go/README.md
- こちらの手順を踏んでもらえると、https://github.com/sioncojp/test-app でお試しできます
- 最終的にはこんな感じになります
サンプルその2 - Rails
- https://github.com/sioncojp/galaxy/blob/master/doc/sample_rails/README.md
- こちらの手順をふんでもらえると、https://github.com/sioncojp/test-app-rails でお試しできます
- 起動に2分くらいかかりますが、最終的にこんな感じになります。
最後に
- 社内の開発環境として適用出来たらいいなぁと実験をしてます
- 改善点はいっぱい(テスト書かないと)ですので、じっくり育てて行ければなと思います