背景
最終的にはLINE platformのAPIを理解したいのですが、 リファレンスを読んでいるとサンプルプログラム(サンプルbot)をHerokuにデプロイして試してみる、というような説明が多数あったので、Herokuについて理解しておこう、と考えました。
そういった考えで、今回、単純なSpringBoot hello-worldアプリをHerokuにデプロイして接続確認してみることにしました。
デプロイしてみる
ローカルでビルドした jar
をアップロードする方法と、コードをアップロードしてHerokuでビルド&デプロイする方法があるようでしたのでその2つを試してみます。
コードをアップロードしてHerokuでビルド&デプロイする方法
やってみようと思ったことは上記公式リファレンスでカバーされていました。
ちなみにHeroku CLIコマンドのインストールは:
sudo snap install heroku --classic
heroku create
[1] コマンドでHeroku側のリモートGitリポジトリが heroku
という名前でaddされるので、そのリポジトリに git push heroku [ブランチ]
コマンドでpushすることでビルドとデプロイが行われるようです。
さて上記の通り git add
してみたのですが失敗してしまいました。ログを見ると冒頭次の出力がありました。
remote: -----> Java app detected remote: -----> Installing JDK 1.8... done remote: -----> Installing Maven 3.3.9... done remote: -----> Executing: mvn -DskipTests clean dependency:list install
今回はJava11で作っていたにもかかわらずJava8でビルドしようとしたためにエラーになっているようです。
Herokuが使用するJavaやMavenのバージョンを明示的にこちらで指定するには system.properties
ファイルをGit管理ファイルに含めれば良いようです。ルート直下、つまり pom.xml
と同じ階層に置いておけば良いようです。
java.runtime.version=11
(MavenはHerokuが対応しているバージョンのうち最新のものが使われているようなのでここでは改めて設定しませんでした。)
バージョンを明示的に指定していない場合、Javaのバージョンは再デプロイしたタイミングで更新されるようです(現在1.8のものが将来的に自動で11とかになるということだろうか…?)が、Mavenは最初に用いたバージョンを使い続けるようです[2]。
参考: Specifying a Maven version - Heroku Java Support
さて改めて git push
コマンドを実行してみると、今度はbuild成功し、ログ出力されている https://[app名].herokuapp.com/
にアクセスすると、デモで作成した出力が得られました。
ローカルでビルドした jar
をデプロイする
参考:
-
Customizing your deployment - Heroku Deploy War/Jar
-
63.2 Heroku - Spring Boot reference
jar
をデプロイする場合には、 Heroku Java CLI plugin を追加でインストールしておく必要があるようです。
heroku plugins:install java
また、Java11を使うためには上で行ったコードからでブロイする場合と同じように system.properties
ファイルを用意し、これをカレントディレクトリ( heroku
コマンドを実行しているディレクトリ)に置きます。
また、デプロイした jar
を実行するためのコマンドを Procfile
に書き、これもカレントディレクトリに置きます。
さて、デプロイした jar
がリッスンすべきポート番号はデプロイの度に変わるようで、アプリケーションには環境変数 PORT
でポート番号が知らされます。
そのポートをリッスンするできるように実行コマンドや設定ファイルを作っておかなければなりません。
(コードベースのSpringBootアプリケーションデプロイでは、これは自動で行ってくれているのでしょう)
今回はコマンドラインでポート指定することにしました。すなわち、 Procfile
には次のように書きました:
web: java -Dserver.port=$PORT -jar target/hello-heroku-0.0.1-SNAPSHOT.jar
これらの設定を行ったあと、デプロイします:
heroku deploy:jar target/hello-heroku-0.0.1-SNAPSHOT.jar