メインコンテンツまでスキップ

JHipsterレジストリ(非推奨-代わりにConsulを使用してください)

概観

JHipsterレジストリは、JHipsterチームによって提供されるランタイムアプリケーションです。JHipsterジェネレータと同様に、Apache 2ライセンスのオープンソースアプリケーションであり、ソースコードはjhipster/jhipster-registryのJHipster組織の下のGitHubで入手できます。

JHipsterレジストリの主な目的は次の3つです。

  • Eurekaサーバとなり、アプリケーションのディスカバリサーバを提供します。このサーバは、利用可能なアプリケーションインスタンスの動的リストを維持および配布し、その後、マイクロサービスがHTTP要求のルーティングとロードバランシングを行うために使用されます。
  • Spring Cloud Configサーバとなり、すべてのアプリケーションにランタイムコンフィギュレーションを提供します。
  • 管理サーバとなり、アプリケーションを監視および管理するためのダッシュボードを具備します。

これらの機能はすべて、最新のAngularベースのユーザインタフェースを備えた単一の便利なアプリケーションにパッケージ化されています。

概要

  1. 導入
  2. Eurekaによるサービスディスカバリ
  3. Spring Cloud Configによるアプリケーション設定
  4. 管理ダッシュボード
  5. JHipsterレジストリのセキュリティ保護

導入

Springプロファイル

JHipsterレジストリは、通常のJHipsterdevおよびprodSpringプロファイルと、Spring Cloud Configの標準のcompositeを使用します(公式ドキュメントを参照してください)。

その結果、次のようになります。

  • devプロファイルを使用すると、devおよびcompositeプロファイルを使用してJHipsterレジストリが実行されます。devプロファイルは、ファイルシステムからSpring Cloud構成をロードし、src/main/resources/config/bootstrap.ymlファイルで定義された実行ディレクトリに関連するcentral-configディレクトリを検索します。
  • prodプロファイルを使用すると、prodおよびcompositeプロファイルを使用してJHipsterレジストリが実行されます。prodプロファイルは、GitリポジトリからSpring Cloud構成をロードします。これはデフォルトではhttps://github.com/jhipster/jhipster-registry-sample-configです。実際の使用では、このリポジトリは、src/main/resources/config/bootstrap-prod.ymlファイルで再構成するか、spring.cloud.config.server.compositeSpringプロパティを再構成することによって変更する必要があります。

JHipsterレジストリが実行されたら、Configuration > Cloud Configメニューで設定を確認できます。ログインできない場合は、JWT署名キーが正しく設定されていない可能性があります。これは、設定が適切でないことを示しています。

事前にパッケージ化されたJARファイルの使用

JHipsterレジストリは、リリースページにある実行可能なJARファイルとして利用できます。

JARファイルをダウンロードし、使用したいプロファイルを用いた通常のJHipsterアプリケーションとして実行します(プロファイルに関する前のセクションを参照してください)。たとえば、central-configディレクトリに格納されているSpring Cloud Config設定を使用して実行するには、次のようにします。

java -jar jhipster-registry-<version>.jar --spring.security.user.password=admin --jhipster.security.authentication.jwt.secret=my-secret-key-which-should-be-changed-in-production-and-be-base64-encoded --spring.cloud.config.server.composite.0.type=native --spring.cloud.config.server.composite.0.search-locations=file:./central-config

起動時に、JHIPSTER_SECURITY_AUTHENTICATION_JWT_SECRET環境変数を使用するか、上記のような引数を使用して、レジストリにJWTシークレットキーを提供することが重要であることに注意してください。別の方法としてこの値を、(レジストリを含みすべてのアプリケーションによって起動時にロードされる)集中化された構成ソースのapplication.ymlファイルにも設定できます。

JHipster 5.3.0以降、新しいjhipster.security.authentication.jwt.base64-secretプロパティが追加されました。これはより安全ですが、 あなたがまだ古いリリースを使用している可能性があるため、このドキュメントではjhipster.security.authentication.jwt.secretを使用しています。これらのプロパティの詳細については、セキュリティドキュメントを参照してください。

同様に、prodプロファイルを使用してレジストリを実行するには、次のように引数を設定に合わせて調整します。

java -jar jhipster-registry-<version>.jar --spring.profiles.active=prod --spring.security.user.password=admin --jhipster.security.authentication.jwt.secret=my-secret-key-which-should-be-changed-in-production-and-be-base64-encoded --spring.cloud.config.server.composite.0.type=git --spring.cloud.config.server.composite.0.uri=https://github.com/jhipster/jhipster-registry-sample-config

java -jar jhipster-registry-<version>.jar --spring.profiles.active=prod --spring.security.user.password=admin --jhipster.security.authentication.jwt.secret=my-secret-key-which-should-be-changed-in-production-and-be-base64-encoded --spring.cloud.config.server.composite.0.type=git --spring.cloud.config.server.composite.0.uri=https://github.com/jhipster/jhipster-registry --spring.cloud.config.server.composite.0.search-paths=central-config

ソースからの構築

JHipsterレジストリは、jhipster/jhipster-registryから直接クローン/フォーク/ダウンロードできます。JHipsterレジストリもJHipsterによって生成されたアプリケーションであるため、他のJHipsterアプリケーションと同様に実行できます。

  • (Javaサーバとしては)./mvnwを、(フロントエンドの管理には)npm startを使用して開発環境で実行します。デフォルトではdevプロファイルが使用され、http://127.0.0.1:8761/で使用可能です。 -./mvnw -Pprod packageを使用してプロダクション環境でパッケージ化し、通常のJHipster実行可能JARファイルを生成します。その後、devまたはprodSpringプロファイルを使用してJARファイルを実行できます。例:java-jar jhipster-registry-<version>.jar --spring.profiles.active=prod

devおよびcompositeプロファイルを使用するには、設定にcentral-configディレクトリが必要なので、java -jar jhipster-registry-<version>.jar --spring.profiles.active=devを実行する場合は、そのディレクトリを設定する必要があることに注意してください。

Dockerの使用

DockerイメージからJHipsterレジストリを実行したい場合は、Docker Hubのjhipster/jhipster-registryで入手できます。このイメージを実行するためのdocker-composeファイルは、各マイクロサービスのsrc/main/dockerディレクトリ内にすでに存在します。

  • docker-compose -f src/main/docker/jhipster-registry.yml upを実行して、JHipsterレジストリを起動します。これはDockerホストのポート8761で使用できるので、マシンで実行する場合はhttp://127.0.0.1:8761/となります。

JHipsterレジストリをDocker Composeで使用する方法の詳細については、Docker Composeのドキュメントを参照してください。

クラウドでの実行

JHipsterレジストリインスタンスはクラウドで実行できます。これは本番環境では必須ですが開発環境でも役立ちます(ラップトップで実行する必要がなくなります)。

JHipsterレジストリをHerokuにデプロイする方法については、"プロダクション環境下でのマイクロサービス"のドキュメントを参照してください。

Eurekaによるサービスディスカバリ

Service discovery with Eureka

JHipsterレジストリはNetflix Eurekaサーバであり、すべてのアプリケーションにサービスディスカバリを提供します。

  • これはマイクロサービスアーキテクチャにとって非常に有用です。これにより、ゲートウェイはどのマイクロサービスが利用可能で、どのインスタンスが起動しているかを知ることができます。
  • モノリスを含むすべてのアプリケーションにとっては、Hazelcast分散キャッシュを自動的にスケーリングできる方法となります。Hazelcastキャッシュドキュメントを参照してください。

Spring Cloud Configを使用したアプリケーション設定

Application configuration with Spring Cloud Config

JHipsterレジストリはSpring Config Serverです。アプリケーションが起動されると、最初にJHipsterレジストリに接続して設定を取得します。これはゲートウェイとマイクロサービスの両方に当てはまります。

この設定は、JHipsterのapplication-*.ymlファイルにあるようなSpring Boot設定ですが、中央サーバに格納されるため、管理が容易です。

起動時に、ゲートウェイとマイクロサービスアプリはレジストリの設定サーバにクエリを行い、ローカルプロパティをそこで定義されたもので上書きします。

2種類の設定ソースを利用できます(spring.cloud.config.server.compositeプロパティで定義されています)。

  • native設定。開発(JHipsterのdevプロファイルを使用)でデフォルトで使用され、ローカルファイルシステムを使用します。
  • Git設定。プロダクション(JHipsterのprodプロファイルを使用)でデフォルトで使用され、Gitサーバに保存されます。これにより、通常のGitツールを使用して設定のタグ付け、ブランチ、ロールバックが可能になり、このユースケースでは非常に強力です。

一元化された設定を管理するには、設定ソースにappname-profile.ymlファイルを追加する必要があります。ここで、appnameprofileは、設定するサービスのアプリケーション名と現在のプロファイルに対応します。 たとえば、gateway-prod.ymlファイルにプロパティを追加すると、それらのプロパティはprodプロファイルで起動されたgatewayという名前のアプリケーションに対してのみ設定されます。さらに、application[-dev|prod].ymlで定義されたプロパティは、すべてのアプリケーションに対して設定されます。

GatewayルートはSpring Bootを使用して設定されるため、Spring Config Serverを使用しての管理もできます。たとえば、アプリケーションapp1-v1v1ブランチの/app1のURLにマップし、アプリケーションapp1-v2v2ブランチの/app1のURLにマップできます。これは、エンドユーザがダウンタイムを発生させることなくマイクロサービスをアップグレードするための良い方法です。

暗号化された構成値の使用

JHipsterレジストリには、構成値の暗号化と復号化を可能にする固有のconfiguration > encryptionページがあります。

構成値(データベース・パスワードなど)を暗号化するには、次の手順を実行する必要があります。

  • JCEをダウンロードし、ダウンロードしたファイルの指示に従ってインストールします(これは、Oracle JDKを使用している場合にのみ必要です)。
  • bootstrap.ymlapplication.ymlではありません)にencrypt.keyプロパティを設定するか、対称鍵パスフレーズでENCRYPT_KEY環境変数を使用します。

すべてが正しく設定されていれば、特定のConfiguration > Encryptionページを使用できるはずです。また、/config/encryptおよび/config/decryptエンドポイントにPOSTリクエストを送信し、リクエストのbodyに操作したいテキストを含めることができます。

例:curl localhost:8761/config/encrypt -d mypassword

暗号化テキストは、*.yml設定ファイル内にpassword= '{cipher}myciphertextafterencryotion'の形式で配置する必要があり、クライアントに送信する前に設定サーバによって復号化されます。これにより、設定ファイル(Gitに保存されているか、ファイルシステムに「ネイティブに」保存されている)にはプレーンテキストの値が含まれなくなります。

詳細については、Spring Cloud Configの暗号化と復号化についてのドキュメントを参照してください。

管理ダッシュボード

JHipsterレジストリは、すべてのアプリケーションタイプに使用される管理ダッシュボードを提供します。アプリケーションがEurekaサーバに登録されるとすぐに、ダッシュボードで使用可能になります。

アプリケーションから機密情報にアクセスするために、JHipsterレジストリはJWTトークンを使用します(これが、JHipsterレジストリがJWTを使用するアプリケーションに対してのみ機能する理由です)。リクエストの署名に使用されるJWTキーは、アプリケーションとJHipsterレジストリで同じである必要があります:デフォルトでは、JHipsterレジストリはSpring Cloud Configを介してアプリケーションを設定するため、すべてのアプリケーションに同じキーを送信するため、これはすぐに使用できるはずです。

メトリクスダッシュボード

メトリクスダッシュボードは、Micrometerを使用して、アプリケーションパフォーマンスの詳細なビューを提供します。

次のメトリクスが表示されます。

  • JVM
  • HTTPリクエスト
  • キャッシュの使用状況
  • データベース接続プール

JVMスレッド・メトリクスの横にある展開ボタンをクリックすると、実行中のアプリケーションのスタック・トレースが表示されます。これは、ブロックされているスレッドを見つけるのに非常に役立ちます。

注意:JHipsterレジストリをDropwizardメトリクスではなくMicrometerからのメトリクスを監視するように変更したので、バージョン5.7.2以前で生成されたすべてのJHipsterアプリケーションをMicrometerに移行して、JHipsterレジストリで監視する必要があります。アプリケーションを移行しない場合は、JHipsterレジストリv4.0.6以前を使用してください。

アプリケーションを移行するには、JHipsterアップグレード・サブジェネレーターを使用できます。

ヘルスダッシュボード

ヘルスダッシュボードは、Spring Boot Actuatorのヘルスエンドポイントを使用して、アプリケーションのさまざまな部分のヘルス情報を提供します。 多くのヘルスチェックは、Spring Boot Actuatorによってすぐに使用できる状態で提供され、アプリケーション固有のヘルスチェックを追加できます。

設定ダッシュボード

設定ダッシュボードは、Spring Boot Actuatorの設定エンドポイントを使用して、現在のアプリケーションのSpring設定の完全なビューを提供します。

ログダッシュボード

ログダッシュボードを使用すると、実行中のアプリケーションのLogback設定を実行時に管理できます。 Javaパッケージのログ・レベルを変更するには、ボタンをクリックします。これは、開発環境と本番環境の両方で非常に便利です。

JHipsterレジストリの保護

JHipsterレジストリはデフォルトで保護されています。通常のJHipsterアプリケーションで使用される通常の"admin/admin"ログインおよびパスワードを使用してログインできます。

アプリケーションも同じ"admin"ユーザを使用してJHipsterレジストリに接続しますが、HTTP Basic認証を使用します。マイクロサービスがレジストリにアクセスできず、"401 authentication error"メッセージが表示される場合は、それらのアプリケーションの設定が間違っていることが理由です。

JHipsterレジストリを保護するには、次の手順を実行します。

  • デフォルトの"admin"パスワードを変更する必要があります。このパスワードは標準のSpring Bootプロパティspring.security.user.passwordを使用して設定されるため、通常のSpring Bootメカニズムを使用して変更できます。プロジェクトのapplication-*.ymlファイルを変更するか、SPRING_SECURITY_USER_PASSWORD環境変数を追加できます。Docker Composeサブジェネレータは環境変数で設定する方法を使用します。
  • あなたのアプリケーションはHTTPを使用してレジストリに接続するので、その接続チャネルを保護することは非常に重要です。それを行う方法はたくさんありますが、おそらく最も簡単なのはHTTPSを使用することです。