Skip to main content

Herokuへのデプロイ

このサブジェネレータを使用すると、JHipsterアプリケーションをHerokuクラウドにデプロイできます。

サブジェネレータの実行

サブジェネレータを実行する前に、Heroku CLIをインストールする必要があります。

また、Herokuアカウントの作成を実行し、次のコマンドを実行してCLIでログインする必要があります。

**$ heroku login**
Enter your Heroku credentials.
Email: YOUR_EMAIL
Password (typing will be hidden): YOUR_PASSWORD
Authentication successful.

2022年11月より、Herokuは完全に無料のプランを提供しなくなりました。 これは、適切に認証されたHerokuアカウントが必要であることを意味します。 そして、最小限のdynoオプションと最小サイズのPostgresを使用してアプリケーションをデプロイする場合、費用は月額約12ドルになります。

Herokuサブジェネレータは、選択した構成に一致するアドオンを使用したfree dynosを使用してアプリケーションを作成します。

次のアドオンをサポートしています。

アプリケーションをHerokuにデプロイするには、次のコマンドを実行します。

jhipster heroku

これにより、アプリケーションが「プロダクション」モードでパッケージ化され、データベースを持つHerokuアプリケーションが作成され、コードがアップロードされ、アプリケーションが起動されます。

note

アプリケーションがマイクロサービスの場合は、レジストリURLを指定するように求められることに注意してください。これを行う方法については、下にスクロールしてください。

warning

アプリケーションは90秒以内に起動する必要があります。起動しない場合はシャットダウンされます。 プラットフォームの負荷によっては、90秒未満での開始は保証されません。

Javaバージョンの変更

Herokuサブジェネレータの実行時にJavaバージョンを選択できます。 デフォルトでは、Java 11です。 Heroku公式ドキュメントでサポートされているJavaバージョンにすべて記載されています。

Javaのバージョンを例えば後で11から14に変更したい場合は、プロジェクトのルートフォルダのsystem.propertiesで変更する必要があります。

java.runtime.version=14

アプリケーションを再デプロイすると、Java 14が使用されます。

アプリケーションの導入

デフォルトでは、アプリケーションはgit経由でデプロイされます。 これは、コードをプッシュすると、Herokuがそれをビルドしてサーバにデプロイすることを意味します。 コードを他のサーバーにプッシュできない場合、またはプッシュしたくない場合は、jarオプションを使用して実行可能なjarをデプロイできます。 Herokuはdockerイメージのデプロイもサポートしていますが、サブジェネレータはまだこのオプションをサポートしていません。

展開したアプリケーションの更新

gitオプションの使用

git経由でデプロイする場合、herokuと呼ばれる新しいリモートが作成されています。 新しいコードをデプロイするには、変更をherokuリモートにプッシュする必要があります。

git push heroku master
info

これは、このコマンドを実行するマシン上でジェネレータを実行したことを前提としています。 まだ作成していない場合は、の手順に従ってHerokuリモートを作成する必要があります。.

jarオプションを使用

実行可能なjarをデプロイすることを選択した場合、更新されたjarを作成し、新しいファイルをHerokuにデプロイする必要があります。

新しいJARの準備

アプリケーションがすでにデプロイされている場合は、次を使用して新しいデプロイを準備できます。

./mvnw package -Pprod -DskipTests

gradleを使用する場合は、次のように入力します。

./gradlew -Pprod bootJar -x test
本番環境へのプッシュ配信
info

これは、このコマンドを実行するマシン上でジェネレータを実行したことを前提としています。 まだインストールしていない場合は、Heroku Java CLIのインストール手順に従う必要があります。

本番にプッシュするには、次のように入力します。

heroku deploy:jar target/*.jar

gradleを使用する場合は、次のように入力します。

heroku deploy:jar build/libs/*jar

HerokuへのDockerのデプロイ

アプリをDockerコンテナとしてHerokuにデプロイもできます。これは動作しますが、Herokuのセットアップや設定は行われないため、手動で行う必要があります。このドキュメントでは、すでにjhipster herokuを実行してアプリをデプロイしていることを前提としているため、このプロセスが実行する統合とアドオンのプロビジョニングを活用しています。

:v6.10.2より前のバージョンのJHipsterを使用している場合は、src/main/resources/config/application-heroku.ymlに次の内容を追加する必要があります。

server:
port: ${PORT:8080}

Dockerイメージをビルドします。

./mvnw package -Pprod verify jib:dockerBuild

Gradleを使用している場合は、次のように入力します。

./gradlew -Pprod bootJar jibDockerBuild

Docker Composeを使ってローカルでテストができます。

docker-compose -f src/main/docker/app.yml up

すべてが動作することを確認したら、Herokuで新しいアプリを作成し、それをリモートとして追加します。

heroku apps:create
git remote add docker https://git.heroku.com/<your-new-app>.git

次に、以下のコマンドを実行して、JHipsterアプリをDockerイメージとしてデプロイします。<...>プレースホルダをHerokuアプリ名に置き換えてください。アプリ名がわからない場合は、heroku appsを実行してください。

heroku container:login
docker tag space registry.heroku.com/<heroku-app>/web
docker push registry.heroku.com/<heroku-app>/web

次に例を示します。

heroku container:login
docker tag space registry.heroku.com/fast-peak-70014/web
docker push registry.heroku.com/fast-peak-70014/web

この時点で、すでに設定したPostgreSQLとOktaのアドオンを使用できます。最初に展開したherokuリモートからアドオンの識別子を取得するには、次のコマンドを実行します。

heroku addons --remote heroku

その後、これらのインスタンスを新しいアプリケーションにアタッチできます。

heroku addons:attach <postgresql-addon-name> --remote docker
heroku addons:attach <okta-addon-name> --remote docker

アプリケーションのデプロイにjhipster herokuを使用すると、データベースが適切に構成されます。ただし、Dockerコンテナとしてデプロイする場合は、そのようなことはありません。そのため、DockerコンテナがPostgreSQLと通信できるように、いくつかの設定変数を設定する必要があります。まず、次のコマンドを実行してPostgreSQL URLを取得します。

heroku config:get DATABASE_URL --remote docker

このコマンドは、次の構文で値を取得します。

postgres://username:password@address

次に、application-heroku.ymlにあるキーと一致するようにデータベース環境変数を設定します。

heroku config:set JDBC_DATABASE_URL=jdbc:postgresql://<address> --remote docker
heroku config:set JDBC_DATABASE_USERNAME=<username> --remote docker
heroku config:set JDBC_DATABASE_PASSWORD=<password> --remote docker

使用するJavaメモリの最大量を設定し、Springプロファイルを指定します。

heroku config:set JAVA_OPTS=-Xmx256m
heroku config:set SPRING_PROFILES_ACTIVE=prod,heroku

次のコマンドを実行してブラウザを開き、アプリケーションに移動します。

heroku open --remote docker

あなたのアプリのURLをコピーして、あなたのOkta開発者アカウントにログインします。Applications > Web > General に移動して、ログインおよびログアウトリダイレクトURIにURLを追加します。ログインリダイレクトURIが/login/oauth2/code/oidcで終わることを確認してください。

これで、コンテナを解放してアプリを起動できるようになります。

heroku container:release web --remote docker

ログを監視して、コンテナが正常に起動したかどうかを確認できます。

heroku logs --tail --remote docker

これで、アプリを開き、サインインリンクをクリックして、認証できるはずです!

heroku open --remote docker

:Oktaアドオンが提供するadminアカウントを使用してJHipsterアプリにログインはできません。そのアカウントでログインしていないことを確認するために、新しいプライベートウィンドウを使用してログインすることをお勧めします。

Docker化されたJHipsterアプリをsecurityheaders.comでテストすると、Aのスコアが出ます!

マイクロサービスのデプロイ

JHipsterマイクロサービスには、JHipsterでマイクロサービスを実行するドキュメントで説明されているように、ConsulまたはJHipsterレジストリが必要です。次のボタンをクリックすると、JHipsterレジストリをHerokuにデプロイできます。

Herokuにデプロイ

レジストリがデプロイされたら、マイクロサービスまたはゲートウェイに対してjhipster herokuコマンドを実行できます。HerokuサブジェネレータはレジストリのURLを要求します。このURLはhttps://[appname].herokuapp.comのような形式になります。

Herokuで実行されるレジストリには、次のようないくつかの制限があります。

  • レジストリはネイティブ設定でのみ動作します(Git設定では動作しません)。
  • レジストリサービスは、冗長性を提供する複数のdynosにスケールアップできません。複数のアプリケーションをデプロイする必要があります(つまり、ボタンを複数回クリックする必要があります)。これは、Eurekaがインスタンス間のメモリ内状態を同期するために個別のURLを必要とするためです。

HerokuのJHipsterレジストリでセキュリティを使用する

JHipsterレジストリに自動的に生成されたadminパスワードを取得するには、次のように入力します。

heroku config:get JHIPSTER_PASSWORD

このパスワードを使用するには、次のコマンドを実行して、レジストリの資格情報を使用するように、すべてのマイクロサービスとゲートウェイを更新します。

heroku config:set JHIPSTER_REGISTRY_URL="https://admin:[password]@[appname].herokuapp.com"

トラブルシューティング

Liquibaseの変更ログが適用されているときにアプリケーションがHerokuによって停止された場合、データベースはLiquibaseによって「ロック済み」とマークされます。ロックテーブルを手動でクリーンアップする必要があります。Postgresでは、ローカルPostgresクライアントがインストールされていることを確認し、次のコマンドを実行します。

heroku pg:psql -c "update databasechangeloglock set locked=false;"

Herokuのデフォルトのブートタイムアウト制限は90秒です。アプリがこれより長くかかる場合、Herokuはプロセスを停止し、データベースがロック状態のままになる可能性があります。問題が解決しない場合は、Herokuサポートに連絡して、アプリのブート制限を延長するよう依頼してください。

Elasticsearchの使用

無料サンドボックスプランのBonsai usedアドオンは、Elasticsearch 7.10.xのみをサポートします。 これにより、使用しているSpring DataとJHipsterのバージョンによっては、いくつかの非互換性が生じる可能性がります。 JHipsterは、Herokuにデプロイするとき、bonsaiと互換性のあるElasticsearch依存関係(クライアントなど)を強制します

warning

有料のアドオンを使用する場合は、公式のElastic Cloud統合を使用して、最新のElasticsearchバージョンと機能にアクセスできます。

詳細情報