スプリングブートはマイクロサービスフレームワークであるため、その生産展開方法は可能な限りシンプルである必要があります。これは、従来のWebアプリケーションと大きな違いです。 Tomcat、JettyなどのWebコンテナを埋め込むことができ、アプリケーションをコンテナで指定した特定のフォームにパッケージ化する必要はなくなりました。
スプリングブートの場合、シンプルなJARパッケージにパッケージ化し、Java -Jarを直接使用することができます。これは非常にエレガントな方法ですが、次のような特定の問題ももたらします。アプリケーションを停止する方法は?過去には、アプリケーションは特定のコンテナに展開されていましたが、コンテナが提供するスクリプトはエレガントに廃止される可能性がありますが、コンテナが埋め込まれ、スクリプトがなくなっています。どうすればいいですか?直接的な殺害は方法ですが、それはあまりにも失礼に思え、多くの予期しない問題をもたらすことができます。
私たちは問題を考えることができるので、フレームメーカーもそうするので、彼らは私たちのために解決策を準備しましたか?はいがあります。以下で学んだソリューションをいくつか紹介します。
1.エンドポイントを使用します
Springbootの公式文書のパート4では、アプリケーションリリースの生産のために準備されたさまざまな機能が導入されています。その中で、アクチュエータのHTTPエンドポイントを通じて、開発者はアプリケーションを簡単に監視および管理できます。
指定されたスターターパッケージを紹介します。
「org.springframework.boot:spring-boot-starter-actuator:$ {springbootversion}」application.ymlで次の2つの構成を開き、HTTPリクエストを介してアプリケーションを停止する
管理:セキュリティ:有効:falseEndpoints:shutdown:enabled:true
操作コマンドは次のとおりです。
curl -x post http:// host:port/shutdown
しかし、この方法には非常に深刻な問題があります。つまり、誰でもアプリケーションの停止を制御できます。これは、生産アプリケーションには間違いなく容認できません。一部の人々は、リンクアドレスが単純すぎると考えるかもしれませんし、非維持者は、非常に複雑なアドレスを使用している場合、この問題を回避できるかどうかを簡単に推測できます。非常に良い、この提案は良いです。Springbootが提供する関連する構成を見てみましょう。
エンドポイント:シャットダウン:有効:true path: /xxx
構成が完了すると、上記のコマンドが使用できなくなりました。コマンドは次のように更新する必要があります。
curl -x post http:// host:port/xxx
もちろん、 /xxxは私がさりげなく設定したものだけで、アドレスを設定できます。セキュリティは少し高くなっていますが、このようなセキュリティレベルは、生産環境に適用することは依然として利用できません。それで、他の保護対策はありますか?はい、シャットダウンパスの変更に加えて、すべての管理操作に統一されたコンテキストを追加し、独立したポートを構成し、指定されたIPアクセスを制限することもできます(通常はネイティブマシンに限定)。構成は次のとおりです。
管理:セキュリティ:有効:falseポート:9001アドレス:127.0.0.1コンテキストパス: /admin
変更されたサービス中止コマンドは次のとおりです。
curl -x post http://127.0.0.1:9001/admin/xxx
これは実際には十分に安全です。システムのセキュリティをさらに確保するために、HTTP Basic Authのレイヤーを追加します。
セキュリティの依存関係を増やす:
「org.springframework.boot:spring-boot-starter-security:$ {springbootversion}」次のように構成ファイルを変更します。
エンドポイント:シャットダウン:enabled:enabled:true path: /xxxmanagement:security:enabled:enabled:true port:9001アドレス:127.0.0.1コンテキストパス: /adminsecurity:basic:enabled:true path: /admin user:name:root password:123456
構成が完了した後、最終的な中止コマンドは次のとおりです。
curl -x post -u root:123456 http://127.0.0.1:9001/admin/xxx
2。システムサービスとして登録します
Java -Jarを使用してSpringbootアプリケーションを実行することに加えて、init.DまたはSystemDを使用してLinux/UNIXシステムサービスとして簡単に登録できます。これにより、生産環境でスプリングブートアプリケーションを簡単にインストールおよび管理できます。
Mavenプロジェクトでは、「完全に実行可能な」JARを作成するには、次のプラグインを紹介する必要があります。
<プラグイン> <groupId> org.springframework.boot </groupid> <artifactid> spring-boot-maven-plugin </artifactid> <バージョン> 1.5.2.release </version> <configuration> true </executable> </configuration> </plugin>
Gradleプロジェクトでは、同等の構成は次のとおりです。
プラグイン{id 'org.springframework.boot'バージョン '1.5.2.release'} springboot {execute = true}構成が完了したら、./application-name.jarを介して構築されたアプリケーションを実行できます。
最後に、unix/linuxを使用して簡単に管理できるように、パッケージ化されたアプリケーションをinit.dサービスにインストールする必要があります。操作方法は非常に簡単です。アプリケーションをinit.dに単純にリンクする必要があります(Fundaは私自身のアプリケーション名であり、実験時に状況に応じて置き換える必要があります)。
ln -s /app/funda/funda.jar /etc/init.d/funda
リンクが正常に確立されているかどうかを確認してください
ls -l /etc/init.d/funda
サービスを開始すると、アプリケーションログはファイル/var/log/funda.logを表示できます
サービスのFunda Start
その他の一般的なコマンド
#アプリケーションを確認しているステータスサービスFUNDAステータスを確認します
質問の概要:
リンクが成功した後、アプリケーションを正常に開始することはできません。 Javaを見つけることができないように促されます。次のコマンドを使用して、JDK Javaコマンドを /sbin /Javaにリンクします。
ln -s/usr/local/jdk1.8.0_131/bin/java/sbin/java
参照リンク:
エンドポイント
HTTPを介した監視と管理
UNIX/Linuxサービス
Java#5690を見つけることができません
プロジェクトリンク:
Github:https://github.com/qchery/funda
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。