Edited at

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

More than 1 year has passed since last update.


概要


  • アプリを開発する際、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


サンプルその2 - Rails


最後に


  • 社内の開発環境として適用出来たらいいなぁと実験をしてます

  • 改善点はいっぱい(テスト書かないと)ですので、じっくり育てて行ければなと思います