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化した恩恵は感じてないけど…