LoginSignup
15
13

More than 5 years have passed since last update.

commit番号毎で、URLにアクセス出来るgalaxyというAPIを作った

Last updated at Posted at 2017-01-22

概要

  • アプリを開発する際、http://commit番号-ドメインとかで見れるようになると凄い楽そうだなぁと思い、galaxyというAPIを作ってみました(commit番号は7桁)
  • https://github.com/sioncojp/galaxy

仕組み

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

スクリーンショット 2017-01-12 1.34.33.pngスクリーンショット 2017-01-12 1.34.24.png

サンプルその2 - Rails

最後に

  • 社内の開発環境として適用出来たらいいなぁと実験をしてます
  • 改善点はいっぱい(テスト書かないと)ですので、じっくり育てて行ければなと思います
15
13
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
13