突っ走り書き

見せるほどのものでは..

Spring Boot アプリケーションを Heroku で動かす(Docker で)

Heroku CLI のインストール

brew tap heroku/brew && brew install heroku
% heroku -v
heroku/7.60.2 darwin-x64 node-v14.19.0

devcenter.heroku.com

デプロイする

devcenter.heroku.com

注意ポイント① Spring Boot の Java の version を Heroku に教える

devcenter.heroku.com

注意ポイント② Procfile を作る

↓ とエラーが出た。

at=error code=H10 desc="App crashed" method=GET path="/" host=xxx.herokuapp.com request_id=xxx fwd="106.73.3.130" dyno= connect= service= status=503 bytes= protocol=https

原因は、./build/libs/*-plain.jar を実行してしまっているから。 実は ./gradlew build では、 以下の2つの jar が生成される。

  • ${APP_NAME}-0.0.1-SNAPSHOT-plain.jar
  • ${APP_NAME}-0.0.1-SNAPSHOT.jar

このうち、Spring Application として実行可能なのは、 plain ではないほうの ${APP_NAME}-0.0.1-SNAPSHOT.jar である。 ところが、Heroku の実行は、 ./build/libs/*.jar を実行する指定がされており、plain が実行されてしまっているっぽい。 これを防ぐため、プロジェクトのルートに Procfile を作成し、plain ではないほうの jar を起動するように設定する。

web java -Dserver.port=$PORT $JAVA_OPTS -jar ./build/libs/realworld-example-app-0.0.1-SNAPSHOT.jar