以前、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】アドオンを追加し、テーブル操作を行う - 山崎屋の技術メモ
今日はここまで。でわ。