spring bootアプリケーションをherokuにデプロイする

エンジニア

以前spring bootアプリをgcpのpaasの無料枠を使ってデプロイしていたが、メモリ不足やストレージを利用せざるを得なくなったりで有料枠に乗り換えたところ、かなり費用が膨らんでしまった。

そこで、無料枠で気軽に運用できるプラットフォームを求めて、今度はherokuに7,8年ぶりに戻ってみることにした。

今回はwindows。

まず、heroku-cliをインストール。

多要素認証(MFA)への切り替え。また、heroku loginもMFAで。
ここで地味に躓いたのが、メールアドレスとパスワードでは失敗する。一度ブラウザでログイン(してたら再度画面遷移させたりした上で heroku login する。そうするとブラウザが立ち上がるようになり自動でログインされる。

基本的には公式のガイドにしたがう。

Heroku に Spring Boot アプリケーションをデプロイする | Heroku Dev Center
この記事では、Maven を使用して既存の Spring Boot アプリケーションを Heroku に移行する方法について説明します。
heroku create
git push heroku main

コンパイルエラー。デフォルトJava8とのことなので、おそらくそれが原因。

remote:        * What went wrong:
remote:        Execution failed for task ':compileJava'.
remote:        > invalid source release: 11

これも説明どおりに対処

Heroku Java Support | Heroku Dev Center
Reference documentation describing the support for Java on Heroku.

プロジェクトルートにsystem.properties ファイルを作成し、下記行を追加しコミット。

java.runtime.version=11

再度、git push heroku main して成功したと思いきや、

もうひとつエラー。

no main manifest attribute, in build/libs/sample-0.0.1-SNAPSHOT-plain.jar

単純にエラーログでググるとgradleでjarのMainClassを指定を追加する解決法がたくさんでてくるが、不正解。実行するjarが正しく指定できていないらしい。

これにはProcfile というファイルを置くべきだったようで、ない場合herokuのログを見ると自動生成しているようだ。

Create a Procfile to customize the command used to run this process: https://devcenter.heroku.com/articles/procfile

herokuのgradleサンプルにもこれがおいてあった。
https://github.com/heroku/gradle-getting-started/blob/master/Procfile
というかSpring Bootの場合がここに書いてあった
https://devcenter.heroku.com/ja/articles/deploying-gradle-apps-on-heroku
(そもそも、これやらないと動かないのにSpring Bootをデプロイするガイドの方に書いておいてほしい)

そこで、Procfileを作成。下記も参考になった。
https://qiita.com/hiroki1994/items/9ce824efce5399870134

web: java -Dserver.port=$PORT $JAVA_OPTS -jar build/libs/xxxxxx-0.0.1-SNAPSHOT.jar

しかし、バージョン変えるたびにこの内容も変える必要があるので、あとで動的に生成するなどの検討をしたい。

コメント

タイトルとURLをコピーしました