oknm.jp

HerokuのデプロイをDocker化した

Dockerの勉強がてら、HerokuのデプロイをDocker化(という言葉であってるのか?)した。

参考: Building Docker Images with heroku.yml | Heroku Dev Center
作業内容はこちら: Heroku container deploy by okonomi · Pull Request #152 · okonomi/blg

まずstackをcontainerに変更する。
herokuコマンドで切り替え:

heroku stack:set container -a oknmjp

Review Appはapp.jsonの指定を変更:

{
  "stack": "container"
}

次に、アプリの定義ファイルheroku.ymlを作る:

build:
  docker:
    web: Dockerfile.production
  config:
    GITHUB_OAUTH_CLIENT_KEY: xxx
    GITHUB_OAUTH_CLIENT_SECRET: xxx
    SECRET_KEY_BASE: xxx
release:
  image: web
  command:
    - bin/rails db:prepare
run:
  web: bin/rails server -p $PORT

あとはDockerfile.productionをいい感じに用意する。

ハマったこと:

  • イメージビルド時にbin/rails assets:precompileを実行しているが、SECRET_KEY_BASEを設定する必要があった
  • Railsサーバの起動ポートは$PORTで指定しないといけない

解決してないこと:

  • ビルド時にSECRET_KEY_BASEとかの漏洩しちゃいけない値はどうDockerに渡せばいいのか
    • アプリのConfig Varsはビルド時には参照できない
    • いまはとりあえずダミー値を渡してるけどあんまり良くない気がする

まだDocker化した恩恵は感じてないけど…