山崎屋の技術メモ

IT業界で働く中で、気になること、メモしておきたいことを書いていきます。

Spring boot で作ったアプリを Heroku にデプロイして全世界に公開

以前、Heroku にユーザ登録した記事を書きました。
www.shookuro.com


では、実際に Spring boot で作成した Web アプリを Heroku にデプロイして公開してみたいと思います。

アプリは "Hello! Spring Boot!!" という文字列を表示するだけの簡単なものです。
作り方は以前の記事を参考にしてください。
yyama1556.hateblo.jp

では、さっそくやってみます。

Git 管理下に置く

まず、Git の設定。

コマンドプロンプトでプロジェクトのルートフォルダに移動し、[ git init ]で ソースを GIT で管理させます。

そのあと [ git add --all ]で git のインデックスに登録。

その後、[ git commit -m "web app" ] のようにコミットします。

コマンドの入出力の例です。

C:\Users\yyama>cd C:\workspace\demo

C:\workspace\demo>git init
Initialized empty Git repository in C:/workspace/demo/.git/

C:\workspace\demo>git add --all

C:\workspace\demo>git commit -m "web app"
[master (root-commit) e2d7aaa] web app
 10 files changed, 486 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 .mvn/wrapper/maven-wrapper.jar
 create mode 100644 .mvn/wrapper/maven-wrapper.properties
 create mode 100644 mvnw
 create mode 100644 mvnw.cmd
 create mode 100644 pom.xml
 create mode 100644 src/main/java/org/yyama/demo/DemoApplication.java
 create mode 100644 src/main/java/org/yyama/demo/DemoController.java
 create mode 100644 src/main/resources/application.properties
 create mode 100644 src/test/java/org/yyama/demo/DemoApplicationTests.java

Heroku のセットアップ

では、Heroku のほうのセットアップに移ります。

[ heroku create ] と入力し、Heroku 側でアプリケーションを受け入れられるようにします。出力にあるように[ https://fast-taiga-15372.herokuapp.com/ ]がこのアプリへの URL になります。

C:\workspace\demo>heroku create
Creating app... done, fast-taiga-15372
https://fast-taiga-15372.herokuapp.com/ | https://git.heroku.com/fast-taiga-15372.git

この時点で Heroku の自分のダッシュボードには、アプリが表示されるようになります。

続いてコマンドプロンプトで [ git push heroku master ]と入力すると、ずらずらとログが吐かれてビルドとデプロイが行われます。

C:\workspace\demo>git push heroku master
Counting objects: 26, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (17/17), done.
Writing objects: 100% (26/26), 46.71 KiB | 0 bytes/s, done.
Total 26 (delta 0), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Java app detected
remote: -----> Installing OpenJDK 1.8... done
remote: -----> Executing: ./mvnw -DskipTests clean dependency:list install
remote:        /tmp/build_a5c941b997d2cd319183cfbb0da9e662
remote:        Downloading https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip
remote:        ..................................................................................................................................................................................................................................................................................................................................................................................................................................................
remote:        Unzipping /tmp/build_a5c941b997d2cd319183cfbb0da9e662/.m2/wrapper/dists/apache-maven-3.5.0-bin/6ps54u5pnnbbpr6ds9rppcc7iv/apache-maven-3.5.0-bin.zip to /tmp/build_a5c941b997d2cd319183cfbb0da9e662/.m2/wrapper/dists/apache-maven-3.5.0-bin/6ps54u5pnnbbpr6ds9rppcc7iv
remote:        Set executable permissions for: /tmp/build_a5c941b997d2cd319183cfbb0da9e662/.m2/wrapper/dists/apache-maven-3.5.0-bin/6ps54u5pnnbbpr6ds9rppcc7iv/apache-maven-3.5.0/bin/mvn
remote:        [INFO] Scanning for projects...

~~~ (略) ~~~

remote:        [INFO] ------------------------------------------------------------------------
remote: -----> Discovering process types
remote:        Procfile declares types     -> (none)
remote:        Default types for buildpack -> web
remote:
remote: -----> Compressing...
remote:        Done: 60.7M
remote: -----> Launching...
remote:        Released v3
remote:        https://fast-taiga-15372.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/fast-taiga-15372.git
 * [new branch]      master -> master

では、[ https://fast-taiga-15372.herokuapp.com/ ]にアクセスしてみます。


Heroku 向けの設定なども非常に簡単でした。
これでアプリが全世界に公開できました。

エラーが出た場合

git push すると heroku 側でビルドが自動で行われますが、次のようなエラーが出ることがあります。

remote:        [INFO] ------------------------------------------------------------------------
remote:        [INFO] BUILD FAILURE
remote:        [INFO] ------------------------------------------------------------------------
remote:        [INFO] Total time:  2.002 s
remote:        [INFO] Finished at: 2022-04-29T06:02:06Z
remote:        [INFO] ------------------------------------------------------------------------
remote:        [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project master-mainte: Fatal error compiling: invalid target release: 11 -> [Help 1]
remote:        [ERROR]
remote:        [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
remote:        [ERROR] Re-run Maven using the -X switch to enable full debug logging.
remote:        [ERROR]
remote:        [ERROR] For more information about the errors and possible solutions, please read the following articles:
remote:        [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
remote:
remote:  !     ERROR: Failed to build app with Maven
remote:        We're sorry this build is failing! If you can't find the issue in application code,
remote:        please submit a ticket so we can help: https://help.heroku.com/
remote:
remote:  !     Push rejected, failed to compile Java app.
remote:
remote:  !     Push failed
remote: Verifying deploy...
remote:
remote: !       Push rejected to master-mainte-template.
remote:
To https://git.heroku.com/master-mainte-template.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/master-mainte-template.git'

原因はよくわかっていませんが、私の場合テキストファイル「system.properties」をプロジェクトのルートディレクトリに作成することで解決しました。
ファイルの内容は以下のようにしました。

java.runtime.version=11

参考
アクティベーションHeroku の Java サポート | Heroku Dev Center
java - Fatal error compiling: invalid target release: 11 during pushing to heroku - Stack Overflow

アプリ名の変更

最後にアプリ名を変更してみましょう。

コマンドプロンプトで、「heroku rename アプリ名」と入力します。するとアプリの名前や アプリの URL、および Heroku の git リモートアドレスが自動で変更できます。ここではアプリ名は「hello-heroku-yyama」としました。これでアプリの URL は
https://hello-heroku-yyama.herokuapp.com/ に変更されました。しばらく置いておくのでアクセスしてみてください。


アプリ名はグローバルで一意な必要があるみたいで、誰かがすでに使用している場合「Name is already taken」と怒られます。

次回は Heroku の PostgreSql を使用してみます。
【Heroku Postgresql】アドオンを追加し、テーブル操作を行う - 山崎屋の技術メモ

今日はここまで。でわ。