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 Postgres:PostgreSQLの使用
- JawsDB:MySQLまたはMariaDBの使用
- Heroku Redis:Redisの使用
- MemCachier:Memcachedの使用
- Bonsai Elasticsearch:Elasticsearchの使用
- Okta:OAuth2/OIDC(オプション)の使用
アプリケーションをHerokuにデプロイするには、次のコマンドを実行します。
jhipster heroku
これにより、アプリケーションが「プロダクション」モードでパッケージ化され、データベースを持つHerokuアプリケーションが作成され、コードがアップロードされ、アプリケーションが起動されます。
アプリケーションがマイクロサービスの場合は、レジストリURLを指定するように求められることに注意してください。これを行う方法については、下にスクロールしてください。
アプリケーションは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
これは、このコマンドを実行するマシン上でジェネレータを実行したことを前提としています。 まだ作成していない場合は、の手順に従ってHerokuリモートを作成する必要があります。.
jarオプションを使用
実行可能なjarをデプロイすることを選択した場合、更新されたjarを作成し、新しいファイルをHerokuにデプロイする必要があります。
新しいJARの準備
アプリケーションがすでにデプロイされている場合は、次を使用して新しいデプロイを準備できます。
./mvnw package -Pprod -DskipTests
gradleを使用する場合は、次のように入力します。
./gradlew -Pprod bootJar -x test
本番環境へのプッシュ配信
これは、このコマンドを実行するマシン上でジェネレータを実行したことを前提としています。 まだインストールしていない場合は、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にデプロイできます。
レジストリがデプロイされたら、マイクロサービスまたはゲートウェイに対して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依存関 係(クライアントなど)を強制します
有料のアドオンを使用する場合は、公式のElastic Cloud統合を使用して、最新のElasticsearchバージョンと機能にアクセスできます。