Red Hat Training
A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform
第7章 アプリケーションのデプロイ
JBoss EAP には、管理者向けと開発者向けのアプリケーションデプロイメントおよび設定オプションが多くあります。管理者は、管理コンソールのグラフィカルインターフェースや管理 CLI のコマンドラインインターフェースを使用して本番環境のアプリケーションデプロイメントを管理できます。開発者は、設定可能なファイルシステムのデプロイメントスキャナー、HTTP API、Red Hat JBoss Developer Studio などの IDE、および Maven などを含む、多くのテストオプションをアプリケーションのデプロイメントで使用できます。
アプリケーションをデプロイするときにデプロイメント記述子の検証を有効にするには、org.jboss.metadata.parser.validate
システムプロパティーを true
に設定します。これには、以下の方法の 1 つを使用します。
サーバー起動時
$ EAP_HOME/bin/standalone.sh -Dorg.jboss.metadata.parser.validate=true
以下の管理 CLI コマンドでサーバー設定に追加
/system-property=org.jboss.metadata.parser.validate:add(value=true)
7.1. 管理 CLI を使用したアプリケーションのデプロイ
管理 CLI を使用してアプリケーションをデプロイすると、単一のコマンドラインインターフェースでデプロイメントスクリプトを作成および実行できます。このスクリプト機能を使用して、特定のアプリケーションデプロイメントおよび管理シナリオを設定できます。スタンドアロンサーバーとして稼働している場合は単一サーバーのデプロイメント状態を管理でき、管理対象ドメインで稼働している場合はサーバーのネットワーク全体のデプロイメントを管理できます。
7.1.1. 管理 CLI を使用したアプリケーションのスタンドアロンサーバーへのデプロイ
アプリケーションのデプロイ
管理 CLI で deploy
コマンドを使用し、アプリケーションデプロイメントへのパスを指定します。
deploy /path/to/test-application.war
正常にデプロイされると、管理 CLI には何も出力されませんが、サーバーログにデプロイメントメッセージが記録されます。
WFLYSRV0027: Starting deployment of "test-application.war" (runtime-name: "test-application.war") WFLYUT0021: Registered web context: /test-application WFLYSRV0010: Deployed "test-application.war" (runtime-name : "test-application.war")
また、ワイルドカード (*
) を使用すると、無効化されたアプリケーションをすべて再デプロイできます。
deploy --name=*
アプリケーションのアンデプロイ
管理 CLI で undeploy
コマンドを使用し、デプロイメント名を指定すると、デプロイメントのコンテンツが削除されます。アンデプロイ時にデプロイメントのコンテンツを保持する場合は、「アプリケーションの無効化」を参照してください。
undeploy test-application.war
正常にアンデプロイされると、管理 CLI には何も出力されませんが、サーバーログにアンデプロイメントメッセージが記録されます。
WFLYUT0022: Unregistered web context: /test-application WFLYSRV0028: Stopped deployment test-application.war (runtime-name: test-application.war) in 62ms WFLYSRV0009: Undeployed "test-application.war" (runtime-name: "test-application.war")
また、ワイルドカード (*
) を使用するとすべてのデプロイメントをアンデプロイできます。
undeploy *
アプリケーションの無効化
リポジトリーからデプロイメントのコンテンツを削除せずにアプリケーションをアンデプロイします。これは、管理コンソールからデプロイメントを無効化することと同じです。
undeploy test-application.war --keep-content
また、ワイルドカード (*
) を使用するとすべてのデプロイメントを無効にできます。
undeploy * --keep-content
デプロイメントの一覧表示
管理 CLI で deployment-info
コマンドを使用して、デプロイメントの情報を表示します。
deployment-info
出力には、ランタイム名、状態、有効であるかどうかなど、各デプロイメントの詳細が表示されます。
NAME RUNTIME-NAME PERSISTENT ENABLED STATUS helloworld.war helloworld.war true true OK test-application.war test-application.war true true OK
--name
引数を使用すると、名前でデプロイメントの表示を絞り込むこともできます。
7.1.2. 管理 CLI を使用した管理対象ドメインでのアプリケーションのデプロイ
アプリケーションのデプロイ
管理 CLI で deploy
コマンドを使用し、アプリケーションデプロイメントへのパスを指定します。また、アプリケーションをデプロイするサーバーグループを指定する必要があります。
すべてのサーバーグループにアプリケーションをデプロイする場合
deploy /path/to/test-application.war --all-server-groups
特定のサーバーグループにアプリケーションをデプロイする場合
deploy /path/to/test-application.war --server-groups=main-server-group,other-server-group
正常にデプロイされると、管理 CLI には何も出力されませんが、サーバーログに各サーバーのデプロイメントメッセージが記録されます。
[Server:server-one] WFLYSRV0027: Starting deployment of "test-application.war" (runtime-name: "test-application.war") [Server:server-one] WFLYUT0021: Registered web context: /test-application [Server:server-one] WFLYSRV0010: Deployed "test-application.war" (runtime-name : "test-application.war")
また、ワイルドカード (*
) を使用すると、無効化されたアプリケーションをすべて再デプロイできます。
deploy --name=* --all-server-groups
アプリケーションのアンデプロイ
管理 CLI で undeploy
コマンドを使用し、デプロイメント名を指定します。また、アプリケーションをアンデプロイするサーバーグループを指定する必要もあります。特定のサーバーグループからのアンデプロイについては、「アプリケーションの無効化」を参照してください。
すべてのサーバーグループからアプリケーションをアンデプロイします。
undeploy test-application.war --all-relevant-server-groups
正常にアンデプロイされると、管理 CLI には何も出力されませんが、サーバーログに各サーバーのアンデプロイメントメッセージが記録されます。
[Server:server-one] WFLYUT0022: Unregistered web context: /test-application [Server:server-one] WFLYSRV0028: Stopped deployment test-application.war (runtime-name: test-application.war) in 74ms [Server:server-one] WFLYSRV0009: Undeployed "test-application.war" (runtime-name: "test-application.war")
また、ワイルドカード (*
) を使用するとすべてのデプロイメントをアンデプロイできます。
undeploy * --all-relevant-server-groups
アプリケーションの無効化
特定のサーバーグループからアプリケーションをアンデプロイします。そのデプロイメントの他のサーバーグループのコンテンツをリポジトリーに保持する必要があるため、--keep-content
パラメーターが必要になります。これは、管理コンソールからデプロイメントを無効化することと同じです。
undeploy test-application.war --server-groups=other-server-group --keep-content
また、ワイルドカード (*
) を使用するとすべてのデプロイメントを無効にできます。
undeploy * --server-groups=other-server-group --keep-content
デプロイメントの一覧表示
管理 CLI で deployment-info
コマンドを使用して、デプロイメントの情報を表示します。デプロイメント名またはサーバーグループでデプロイメント情報を絞り込むことができます。
以下のコマンドは、名前を指定してデプロイメント情報を表示します。
deployment-info --name=helloworld.war
出力には、デプロイメントと各サーバーグループでの状態が表示されます。
NAME RUNTIME-NAME helloworld.war helloworld.war SERVER-GROUP STATE main-server-group enabled other-server-group added
以下のコマンドは、サーバーグループを指定してデプロイメント情報を表示します。
deployment-info --server-group=other-server-group
出力には、デプロイメントと、指定のサーバーグループに対する状態が表示されます。
NAME RUNTIME-NAME STATE helloworld.war helloworld.war added test-application.war test-application.war enabled
deploy -l
コマンドを使用して、ドメインのデプロイメントをすべて表示することもできます。
7.2. 管理コンソールを使用したアプリケーションのデプロイ
管理コンソールを使用してアプリケーションをデプロイすると、使用が簡単なグラフィカルインターフェースを利用することができます。サーバーまたはサーバーグループにデプロイされたアプリケーションを一目で確認できるほか、必要に応じてアプリケーションを有効または無効にしたり、アプリケーションをコンテンツリポジトリーから削除したりすることができます。
7.2.1. 管理コンソールを使用したアプリケーションのスタンドアロンサーバーへのデプロイ
JBoss EAP 管理コンソールの Deployments タブからデプロイメントを表示および管理できます。
アプリケーションのデプロイ
追加ボタンをクリックし、新規 Deployment ウィザードを使用してアプリケーションをデプロイします。新規デプロイメントのアップロード または 未管理のデプロイメント作成 を選択してアプリケーションをデプロイできます。デプロイメントはデフォルトで有効になっています。
新規デプロイメントのアップロード
サーバーのコンテンツリポジトリーにコピーされ、JBoss EAP によって管理されるアプリケーションをアップロードします。
未管理のデプロイメント作成
デプロイメントの場所を指定します。このデプロイメントはサーバーのコンテンツリポジトリーにはコピーされず、JBoss EAP によって管理されません。
アプリケーションのアンデプロイ
デプロイメントを選択し、削除オプションを選択してアプリケーションをアンデプロイします。これにより、デプロイメントがアンデプロイされ、コンテンツリポジトリーから削除されます。
アプリケーションの無効化
デプロイメントを選択し、無効オプションを選択してアプリケーションを無効にします。これにより、デプロイメントがアンデプロイされますが、コンテンツリポジトリーから削除されません。
アプリケーションの置換
デプロイメントを選択し、置換オプションを選択します。元のバージョンと同じ名前を持つ新しいバージョンのデプロイメントを選択し、Finish をクリックします。これにより、元のバージョンのデプロイメントがアンデプロイおよび削除され、新しいバージョンがデプロイされます。
7.2.2. 管理コンソールを使用した管理対象ドメインでのアプリケーションのデプロイ
JBoss EAP 管理コンソールの Deployments タブではデプロイメントを表示および管理できます。
Content Repository
管理されるデプロイメントと管理されないデプロイメントはすべて Content Repository セクションで表示されます。ここで、デプロイメントを追加したり、デプロイメントをサーバーグループに割り当てることができます。
未割り当てのコンテンツ
サーバーグループに割り当てられていないデプロイメントは未割り当てのコンテンツ セクションにリストされます。ここで、デプロイメントをサーバーグループに追加したり、削除したりすることができます。
Server Groups
1 つまたは複数のサーバーグループに割り当てられたデプロイメントは Server Groups セクションにリストされます。ここで、デプロイメントを直接サーバーグループに追加したり、有効にしたりすることができます。
アプリケーションのデプロイ
- Content Repository で 追加ボタンをクリックします。
- 新規デプロイメントのアップロード または 未管理のデプロイメント作成 を選択し、アプリケーションをデプロイします。
プロンプトに従ってアプリケーションをデプロイします。
デプロイメントを有効にするには、デプロイメントをサーバーグループに割り当てる必要があります。
また、Server Groups でデプロイメントを追加すると、デプロイメントの追加、サーバーグループへの割り当て、および有効化を同時に行うことができます。
アプリケーションのサーバーグループへの割り当て
- 未割り当てのコンテンツ でデプロイメントを選択し、割り当てボタンをクリックします。
- このデプロイメントを割り当てるサーバーグループを 1 つ以上選択します。
- 選択したサーバーグループのデプロイメントを有効にするオプションを任意で選択することもできます。
アプリケーションのサーバーグループ割り当ての解除
- Server Groups で適切なサーバーグループを選択します。
- サーバーグループの割り当てを解除するデプロイメントを選択し、 割り当ての解除 をクリックします。
また、Content Repository でデプロイメントの 割り当ての解除 を選択すると、複数のサーバーグループへの割り当てを同時に解除することができます。
アプリケーションのアンデプロイ
- それでもデプロイメントがサーバーグループに割り当てられている場合は、デプロイメントの割り当てを解除します。
- Content Repository でデプロイメントを選択し、削除 を選択します。
これにより、デプロイメントがアンデプロイされ、コンテンツリポジトリーから削除されます。
アプリケーションの無効化
- Server Groups で適切なサーバーグループを選択します。
- 無効にするデプロイメントを選択し、無効 を選択します。
これにより、デプロイメントがアンデプロイされますが、コンテンツリポジトリーから削除されません。
アプリケーションの置換
- Content Repository からデプロイメントを選択し、置換ボタンをクリックします。
- 元のバージョンと同じ名前を持つ新しいバージョンのデプロイメントを選択し、完了 をクリックします。
これにより、元のバージョンのデプロイメントがアンデプロイおよび削除され、新しいバージョンがデプロイされます。
7.3. デプロイメントスキャナーを使用したアプリケーションのデプロイ
デプロイメントスキャナーは、デプロイするアプリケーションのデプロイメントディレクトリーを監視します。デフォルトでは、デプロイメントスキャナーは 5 秒ごとに EAP_HOME/standalone/deployments/
をスキャンし、変更を確認します。デプロイメントの状態を示し、アンデプロイや再デプロイなどのデプロイメントに対するアクションをトリガーするため、マーカーファイルが使用されます。
本番環境では、アプリケーションのデプロイメントに管理コンソールまたは管理 CLI の使用が推奨されますが、デプロイメントスキャナーは開発者の便宜を図るために提供されます。これにより、ペースの早い開発サイクルに適した方法でアプリケーションを構築およびテストできます。デプロイメントスキャナーは、他のデプロイメント方法と併用しないでください。
デプロイメントスキャナーは JBoss EAP をスタンドアロンサーバーとして実行している場合のみ利用できます。
7.3.1. デプロイメントスキャナーを使用したアプリケーションのスタンドアロンサーバーへのデプロイ
デプロイメントスキャナーを設定して XML 、zip 形式、および展開形式のコンテンツの自動デプロイメントを有効または無効にすることができます。自動デプロイメントが無効の場合、マーカーファイルを手作業で作成してデプロイメントのアクションをトリガーする必要があります。利用できるマーカーファイルタイプやそれらの目的に関する詳細は、「デプロイメントスキャナーのマーカーファイル」の項を参照してください。
デフォルトでは、XML および zip 形式のコンテンツの自動デプロイメントは有効になっています。各コンテンツタイプの自動デプロイメントの設定に関する詳細は「デプロイメントスキャナーの設定」を参照してください。
デプロイメントスキャナーを使用したデプロイメントは開発者の便宜を図るために提供され、本番環境での使用は推奨されません。デプロイメントスキャナーは他のデプロイメント方法と併用しないでください。
アプリケーションのデプロイ
コンテンツをデプロイメントフォルダーにコピーします。
$ cp /path/to/test-application.war EAP_HOME/standalone/deployments/
自動デプロイメントが有効の場合、このファイルは自動的に選択され、デプロイされます。さらに、.deployed
マーカーファイルが作成されます。自動デプロイメントが無効の場合、.dodeploy
マーカーファイルを手作業で追加し、デプロイメントをトリガーする必要があります。
$ touch EAP_HOME/standalone/deployments/test-application.war.dodeploy
アプリケーションのアンデプロイ
.deployed
マーカーファイルを削除して、アンデプロイメントをトリガーします。
$ rm EAP_HOME/standalone/deployments/test-application.war.deployed
自動デプロイメントが有効な場合、アンデプロイメントをトリガーする test-application.war
ファイルを削除することもできます。これは、展開形式のデプロイメントには適用されないことに注意してください。
アプリケーションの再デプロイ
.dodeploy
マーカーファイルを作成し、再デプロイを開始します。
$ touch EAP_HOME/standalone/deployments/test-application.war.dodeploy
7.3.2. デプロイメントスキャナーの設定
デプロイメントスキャナーは管理コンソールまたは管理 CLI を使用して設定できます。スキャンの間隔、デプロイメントフォルダーの場所、特定のアプリケーションファイルタイプの自動デプロイメントなど、デプロイメントスキャナーの動作を設定できます。また、デプロイメントスキャナーを完全に無効にすることもできます。
利用できるデプロイメントスキャナー属性の詳細は、「デプロイメントスキャナーの属性」の項を参照してください。
以下の管理 CLI コマンドを使用してデフォルトのデプロイメントスキャナーを設定します。
デプロイメントスキャナーの無効化
/subsystem=deployment-scanner/scanner=default:write-attribute(name=scan-enabled,value=false)
default
デプロイメントスキャナーが無効になります。
スキャン間隔の変更
/subsystem=deployment-scanner/scanner=default:write-attribute(name=scan-interval,value=10000)
スキャンの間隔が 5000
ミリ秒 (5 秒) から 10000
ミリ秒 (10 秒) に変更されます。
デプロイメントフォルダーの変更
/subsystem=deployment-scanner/scanner=default:write-attribute(name=path,value=/path/to/deployments)
デプロイメントフォルダーの場所がデフォルトの EAP_HOME/standalone/deployments
から /path/to/deployments
に変更されます。
relative-to
属性が指定されていない場合、path
の値は絶対パスになります。relative-to
属性が指定されている場合は相対パスになります。
展開形式のコンテンツの自動デプロイメントの有効化
/subsystem=deployment-scanner/scanner=default:write-attribute(name=auto-deploy-exploded,value=true)
デフォルトで無効になっている展開形式のコンテンツの自動デプロイメントを有効にします。
zip 形式のコンテンツの自動デプロイメントの無効化
/subsystem=deployment-scanner/scanner=default:write-attribute(name=auto-deploy-zipped,value=false)
デフォルトで有効になっている zip 形式のコンテンツの自動デプロイメントを無効にします。
XML コンテンツの自動デプロイメントの無効化
/subsystem=deployment-scanner/scanner=default:write-attribute(name=auto-deploy-xml,value=false)
デフォルトで有効になっている XML コンテンツの自動デプロイメントを無効にします。
7.3.3. カスタムデプロイメントスキャナーの定義
新しいデプロイメントスキャナーを追加するには、管理 CLI を使用するか、管理コンソールの Configuration タブから Deployment Scanners サブシステムに移動します。デプロイメントを確認するためにスキャンする新しいディレクトリーを定義します。デフォルトのデプロイメントスキャナーは EAP_HOME/standalone/deployments
を監視します。既存のデプロイメントスキャナーの設定に関する詳細は「デプロイメントスキャナーの設定」を参照してください。
以下の管理 CLI コマンドは、EAP_HOME/standalone/new_deployment_dir
を 5 秒ごとにチェックしてデプロイメントを確認する新しいデプロイメントスキャナーを追加します。
/subsystem=deployment-scanner/scanner=new-scanner:add(path=new_deployment_dir,relative-to=jboss.server.base.dir,scan-interval=5000)
指定のディレクトリーがすでに存在しないと、このコマンドに失敗し、エラーが発生します。
新しいデプロイメントスキャナーが定義され、デプロイメントを確認するために指定のディレクトリーが監視されます。
7.4. Maven を使用したアプリケーションのデプロイ
Apache Maven を使用してアプリケーションをデプロイすると、JBoss EAP へのデプロイメントを簡単に既存の開発ワークフローに取り入れることができます。
アプリケーションをアプリケーションサーバーにデプロイおよびアンデプロイする簡単な操作を提供する WildFly Maven Plugin を使用すると、Maven を使用してアプリケーションを JBoss EAP にデプロイできます。
7.4.1. Maven を使用したアプリケーションのスタンドアロンサーバーへのデプロイ
以下の手順では、Maven を使用して JBoss EAP の helloworld
クイックスタートをスタンドアロンサーバーにデプロイおよびアンデプロイする方法を示します。
JBoss EAP クイックスタートの詳細は、JBoss EAP『スタートガイド』の「クイックスタートサンプルの使用」を参照してください。
アプリケーションのデプロイ
Maven pom.xml
ファイルで WildFly Maven Plugin を初期化します。これは、JBoss EAP クイックスタートの pom.xml
ファイルで設定されているはずです。
<plugin> <groupId>org.wildfly.plugins</groupId> <artifactId>wildfly-maven-plugin</artifactId> <version>${version.wildfly.maven.plugin}</version> </plugin>
helloworld
クイックスタートディレクトリーで以下の Maven コマンドを実行します。
$ mvn clean install wildfly:deploy
デプロイする Maven コマンドの実行後、ターミナルウインドウにはデプロイメントの成功を表す以下の出力が表示されます。
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.981 s [INFO] Finished at: 2015-12-23T15:06:13-05:00 [INFO] Final Memory: 21M/231M [INFO] ------------------------------------------------------------------------
アクティブなサーバーインスタンスのサーバーログでデプロイメントの成功を確認することもできます。
WFLYSRV0027: Starting deployment of "helloworld.war" (runtime-name: "helloworld.war") WFLYUT0021: Registered web context: /helloworld WFLYSRV0010: Deployed "helloworld.war" (runtime-name : "helloworld.war")
アプリケーションのアンデプロイ
helloworld
クイックスタートディレクトリーで以下の Maven コマンドを実行します。
$ mvn wildfly:undeploy
アンデプロイする Maven コマンドの実行後、ターミナルウインドウにはアンデプロイメントの成功を表す以下の出力が表示されます。
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.237 s [INFO] Finished at: 2015-12-23T15:09:10-05:00 [INFO] Final Memory: 10M/183M [INFO] ------------------------------------------------------------------------
アクティブなサーバーインスタンスのサーバーログでアンデプロイメントの成功を確認することもできます。
WFLYUT0022: Unregistered web context: /helloworld WFLYSRV0028: Stopped deployment helloworld.war (runtime-name: helloworld.war) in 27ms WFLYSRV0009: Undeployed "helloworld.war" (runtime-name: "helloworld.war")
7.4.2. Maven を使用した管理対象ドメインでのアプリケーションのデプロイ
以下の手順では、Maven を使用して管理対象ドメインで JBoss EAP の helloworld
クイックスタートをデプロイおよびアンデプロイする方法を示します。
JBoss EAP クイックスタートの詳細は、JBoss EAP『スタートガイド』の「クイックスタートサンプルの使用」を参照してください。
アプリケーションのデプロイ
管理対象ドメインでアプリケーションをデプロイする場合、アプリケーションをデプロイするサーバーグループを指定する必要があります。これは、Maven の pom.xml
ファイルで設定されます。
pom.xml
の以下の設定は WildFly Maven Plugin を初期化し、main-server-group
をアプリケーションがデプロイされるサーバーグループとして指定します。
<plugin> <groupId>org.wildfly.plugins</groupId> <artifactId>wildfly-maven-plugin</artifactId> <version>${version.wildfly.maven.plugin}</version> <configuration> <domain> <server-groups> <server-group>main-server-group</server-group> </server-groups> </domain> </configuration> </plugin>
helloworld
クイックスタートディレクトリーで以下の Maven コマンドを実行します。
$ mvn clean install wildfly:deploy
デプロイする Maven コマンドの実行後、ターミナルウインドウにはデプロイメントの成功を表す以下の出力が表示されます。
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4.005 s [INFO] Finished at: 2016-09-02T14:36:17-04:00 [INFO] Final Memory: 21M/226M [INFO] ------------------------------------------------------------------------
アクティブなサーバーインスタンスのサーバーログでデプロイメントの成功を確認することもできます。
WFLYSRV0027: Starting deployment of "helloworld.war" (runtime-name: "helloworld.war") WFLYUT0021: Registered web context: /helloworld WFLYSRV0010: Deployed "helloworld.war" (runtime-name : "helloworld.war")
アプリケーションのアンデプロイ
helloworld
クイックスタートディレクトリーで以下の Maven コマンドを実行します。
$ mvn wildfly:undeploy
アンデプロイする Maven コマンドの実行後、ターミナルウインドウにはアンデプロイメントの成功を表す以下の出力が表示されます。
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.750 s [INFO] Finished at: 2016-09-02T14:45:10-04:00 [INFO] Final Memory: 10M/184M [INFO] ------------------------------------------------------------------------
アクティブなサーバーインスタンスのサーバーログでアンデプロイメントの成功を確認することもできます。
WFLYUT0022: Unregistered web context: /helloworld WFLYSRV0028: Stopped deployment helloworld.war (runtime-name: helloworld.war) in 106ms WFLYSRV0009: Undeployed "helloworld.war" (runtime-name: "helloworld.war")
7.5. HTTP API を使用したアプリケーションのデプロイ
HTTP API を使用してアプリケーションを JBoss EAP にデプロイするには、curl
コマンドを使用します。HTTP API の使用に関する詳細は、「HTTP API」を参照してください。
7.5.1. HTTP API を使用したアプリケーションのスタンドアロンサーバーへのデプロイ
デフォルトでは、HTTP API は http://HOST:PORT/management
でアクセスできます (例: http://localhost:9990/management
)。
アプリケーションのデプロイ
$ curl --digest -L -D - http://HOST:PORT/management --header "Content-Type: application/json" -u USER:PASSWORD -d '{"operation" : "composite", "address" : [], "steps" : [{"operation" : "add", "address" : {"deployment" : "test-application.war"}, "content" : [{"url" : "file:/path/to/test-application.war"}]},{"operation" : "deploy", "address" : {"deployment" : "test-application.war"}}],"json.pretty":1}'
アプリケーションのアンデプロイ
$ curl --digest -L -D - http://HOST:PORT/management --header "Content-Type: application/json" -u USER:PASSWORD -d '{"operation" : "composite", "address" : [], "steps" : [{"operation" : "undeploy", "address" : {"deployment" : "test-application.war"}},{"operation" : "remove", "address" : {"deployment" : "test-application.war"}}],"json.pretty":1}'
JSON リクエストをプログラムで生成する方法の詳細は、この Red Hat ナレッジベースの記事を参照してください。
7.5.2. HTTP API を使用した管理対象ドメインでのアプリケーションのデプロイ
デフォルトでは、HTTP API は http://HOST:PORT/management
でアクセスできます (例: http://localhost:9990/management
)。
アプリケーションのデプロイ
デプロイメントをコンテンツリポジトリーに追加します。
$ curl --digest -L -D - http://HOST:PORT/management --header "Content-Type: application/json" -u USER:PASSWORD -d '{"operation" : "add", "address" : {"deployment" : "test-application.war"}, "content" : [{"url" : "file:/path/to/test-application.war"}],"json.pretty":1}'
デプロイメントを指定のサーバーグループに追加します。
$ curl --digest -L -D - http://HOST:PORT/management --header "Content-Type: application/json" -u USER:PASSWORD -d '{"operation" : "add", "address" : {"server-group" : "main-server-group","deployment":"test-application.war"},"json.pretty":1}'
サーバーグループにアプリケーションをデプロイします。
$ curl --digest -L -D - http://HOST:PORT/management --header "Content-Type: application/json" -u USER:PASSWORD -d '{"operation" : "deploy", "address" : {"server-group" : "main-server-group","deployment":"test-application.war"},"json.pretty":1}'
アプリケーションのアンデプロイ
割り当てられたサーバーグループすべてからデプロイメントを削除します。
$ curl --digest -L -D - http://HOST:PORT/management --header "Content-Type: application/json" -u USER:PASSWORD -d '{"operation" : "remove", "address" : {"server-group" : "main-server-group","deployment":"test-application.war"},"json.pretty":1}'
コンテンツリポジトリーからデプロイメントを削除します。
$ curl --digest -L -D - http://HOST:PORT/management --header "Content-Type: application/json" -u USER:PASSWORD -d '{"operation" : "remove", "address" : {"deployment" : "test-application.war"}, "json.pretty":1}'
7.6. デプロイメントの動作のカスタマイズ
7.6.1. デプロイメントコンテンツのカスタムディレクトリーの定義
JBoss EAP では、デプロイされたコンテンツを格納する場所をカスタマイズし、定義できます。
スタンドアロンサーバーでのカスタムディレクトリーの定義
デフォルトでは、スタンドアロンサーバーのデプロイされたコンテンツは EAP_HOME/standalone/data/content
ディレクトリーに格納されます。この場所を変更するには、サーバーの起動時に -Djboss.server.deploy.dir
引数を渡します。
$ EAP_HOME/bin/standalone.sh -Djboss.server.deploy.dir=/path/to/new_deployed_content
選択する場所は JBoss EAP インスタンスすべてで一意になる必要があります。
jboss.server.deploy.dir
プロパティーは、管理コンソールまたは管理 CLI を使用してデプロイされたコンテンツの格納に使用されるディレクトリーを指定します。デプロイメントスキャナーによって監視されるカスタムデプロイメントディレクトリーを定義する場合は、「デプロイメントスキャナーの設定」を参照してください。
管理対象ドメインでのカスタムディレクトリーの定義
デフォルトでは、管理対象ドメインのデプロイされたコンテンツは EAP_HOME/standalone/data/content
ディレクトリーに格納されます。この場所を変更するには、ドメインの起動時に -Djboss.domain.deployment.dir
引数を渡します。
$ EAP_HOME/bin/domain.sh -Djboss.domain.deployment.dir=/path/to/new_deployed_content
選択する場所は JBoss EAP インスタンスすべてで一意になる必要があります。
7.6.2. デプロイメント順序の制御
JBoss EAP では、サーバー起動時にアプリケーションがデプロイされる順序を細かく制御できます。複数の EAR ファイルに存在するアプリケーションのデプロイメント順序を徹底することができ、再起動後の順序を永続化することもできます。
jboss-all.xml
デプロイメント記述子を使用してトップレベルのデプロイメント間で依存関係を宣言できます。
たとえば、 最初にデプロイされた framework.ear
に依存する app.ear
がある場合、以下のように app.ear/META-INF/jboss-all.xml
ファイルを作成できます。
<jboss umlns="urn:jboss:1.0"> <jboss-deployment-dependencies xmlns="urn:jboss:deployment-dependencies:1.0"> <dependency name="framework.ear" /> </jboss-deployment-dependencies> </jboss>
デプロイメントのランタイム名を jboss-all.xml
ファイルの依存名として使用することができます。
これにより、app.ear
の前に framework.ear
がデプロイされます。
jboss-all.xml
ファイルや他のデプロイメント記述子では、宣言しないとサーバーが検出しない依存関係を宣言できますが、これは厳格な順序付け機能ではありません。JBoss EAP は、デプロイメント記述子で指定されたすべての依存関係はデプロイ済みで利用可能であると仮定します。不足している依存関係がある場合、JBoss EAP はそれらの依存関係を自動的にデプロイせず、デプロイメントは失敗します。
7.6.3. デプロイメントコンテンツのオーバーライド
A deployment overlay can be used to overlay content into an existing deployment without physically modifying the contents of the deployment archive. It allows you to override deployment descriptors, library JAR files, classes, JSP pages, and other files at runtime without rebuilding the archive.
これは、異なる設定が必要な異なる環境にデプロイメントを適応する必要がある場合に便利です。たとえば、アプリケーションのライフサイクルに従って開発からテスト、ステージ、および実稼働とデプロイメントを移動する場合、目的の環境に応じてデプロイメント記述子の交換、アプリケーションのブランディングを変更するための静的 Web リソースの変更、JAR ライブラリーの別バージョンへの置き換えなどを行う可能性があります。また、方針やセキュリティーの制限によりアーカイブを変更できない、設定変更が必要なインストールにも便利な機能です。
デプロイメントオーバーレイを定義する場合、デプロイメントアーカイブのファイルを置き換える、ファイルシステム上のファイルを定義します。さらに、デプロイメントオーバーレイの影響を受けるデプロイメントを指定する必要もあります。変更を有効にするには、影響を受けるデプロイメントを再デプロイする必要があります。
deployment-overlay add
管理 CLI コマンドを使用してデプロイメントオーバーレイを追加します。
deployment-overlay add --name=new-deployment-overlay --content=WEB-INF/web.xml=/path/to/other/web.xml --deployments=test-application.war --redeploy-affected
管理対象ドメインでは、--server-groups
を使用して該当するサーバーグループを指定するか、--all-server-groups
を使用してすべてのサーバーグループを指定します。
作成後、既存のオーバーレイへのコンテンツの追加、オーバーレイのデプロイメントへのリンク、またはオーバーレイの削除を行うことができます。使用方法の詳細を表示するには deployment-overlay --help
を実行してください。
パラメーター
name
- デプロイメントオーバーレイの名前。
content
-
ファイルシステム上のファイルをアーカイブの置き換えるファイルにマップするカンマ区切りリスト。各エントリーの形式は
ARCHIVE_PATH=FILESYSTEM_PATH
です。 deployments
- このオーバーレイがリンクされるデプロイメントのカンマ区切りリスト。
redeploy-affected
- 影響を受けるデプロイメントをすべて再デプロイします。
7.6.4. ロールアウト計画の使用
ロールアウト計画
管理対象ドメインでは、ドメインまたはホストレベルのリソースで目的となる操作は複数のサーバーに影響する可能性があります。このような操作には、サーバーに適用される操作の順序を説明するロールアウト計画や、一部のサーバーで実行に失敗した場合に操作を元に戻すかどうかを指示するポリシーなどが含まれます。指定されたロールアウト計画がない場合、デフォルトのロールアウト計画 が使用されます。
以下は 5 つのサーバーグループが関係するロールアウト計画の例になります。操作は順次 (in-series
) または同時 (concurrent-groups
) にサーバーグループへ適用することができます。構文の詳細は「ロールアウト計画の構文」を参照してください。
{"my-rollout-plan" => {"rollout-plan" => { "in-series" => [ {"concurrent-groups" => { "group-A" => { "max-failure-percentage" => "20", "rolling-to-servers" => "true" }, "group-B" => undefined }}, {"server-group" => {"group-C" => { "rolling-to-servers" => "false", "max-failed-servers" => "1" }}}, {"concurrent-groups" => { "group-D" => { "max-failure-percentage" => "20", "rolling-to-servers" => "true" }, "group-E" => undefined }} ], "rollback-across-groups" => "true" }}}
上記の例を見ると、3 つの段階を経てドメインのサーバーに操作が適用されることが分かります。あるサーバーグループのポリシーによってサーバーグループ全体で操作のロールバックが引き起こされると、他のサーバーグループもすべてロールバックされます。
- サーバーグループ group-A と group-B には同時に操作が適用されます。 group-A のサーバーには操作が順次適用され、group-B のすべてのサーバーは操作を同時に処理します。group-A で操作の適用に失敗したサーバーが 20 % を超えると、グループ全体でロールバックが実行されます。group-B で操作を適用できなかったサーバーがあると、このグループ全体でロールバックが実行されます。
- group-A と group-B のすべてのサーバーが完了すると、group-C のサーバーに操作が適用されます。これらのサーバーは操作を同時に処理します。group-C では操作を適用できなかったサーバーが 2 台以上あると、グループ全体でロールバックが実行されます。
- group-C のすべてのサーバーが完了すると、操作が group-D と group-E に同時に適用されます。group-D のサーバーには操作が順次適用され、group-E のすべてのサーバーは操作を同時に処理します。 group-D で操作の適用に失敗したサーバーが 20 % を超えると、グループ全体でロールバックが実行されます。group-E で操作を適用できなかったサーバーがあると、このグループ全体でロールバックが実行されます。
ロールアウト計画の構文
ロールアウト計画は以下のいずれかの方法で指定できます。
-
deploy
コマンド操作ヘッダーでロールアウト計画を定義します。詳細は「ロールアウト計画を使用したデプロイ」を参照してください。 -
rollout-plan
コマンドを使用してロールアウト計画を保存し、deploy
コマンド操作ヘッダーでプラン名を参照します。詳細は「保存したロールアウト計画を使用したデプロイ」を参照してください。
上記の方法で最初に使用するコマンドは異なりますが、どちらも rollout
操作ヘッダーを使用してロールアウト計画を定義します。以下の構文を使用します。
rollout (id=PLAN_NAME | SERVER_GROUP_LIST) [rollback-across-groups]
-
PLAN_NAME
は、rollout-plan
コマンドを使用して保存されたロールアウト計画の名前です。 SERVER_GROUP_LIST
はサーバーグループのリストです。各サーバーグループで操作を順次実行する場合はコンマ (,
) を使用して複数のサーバーグループを区切ります。各サーバーグループで同時に操作を実行する場合はキャレット (^
) を区切り文字として使用します。各サーバーグループでは、以下のポリシーをかっこで囲んで設定します。複数のポリシーはコンマで区切ります。
-
rolling-to-servers
: ブール値。true
に設定すると、操作はグループの各サーバーに順次適用されます。false
に設定した場合、または指定がない場合は、操作はグループのサーバーに同時に適用されます。 -
max-failed-servers
: 整数値。グループにおける操作の適用に失敗したサーバーの最大数で、失敗したサーバーの台数がこの値を超えるとグループのすべてのサーバーが元に戻されます。指定がない場合のデフォルト値は0
で、操作の適用に失敗したサーバーが 1 台でもあるとグループ全体でロールバックが引き起こされます。 max-failure-percentage
:0
から100
までの整数値。グループにおける操作の適用に失敗したサーバー合計数の最大率 (パーセント) で、失敗したサーバーの率がこの値を超えるとグループのすべてのサーバーが元に戻されます。指定がない場合のデフォルト値は0
で、操作の適用に失敗したサーバーが 1 台でもあるとグループ全体でロールバックが引き起こされます。注記max-failed-servers
とmax-failure-percentage
の両方がゼロ以外の値に設定された場合、max-failure-percentage
が優先されます。
-
-
rollback-across-groups
: ブール値。1 つのサーバーグループのサーバーすべてで操作をロールバックする必要があると、すべてのサーバーグループでロールバックの実行を引き起こすかどうかを指定します。デフォルトはfalse
です。
ロールアウト計画を使用したデプロイ
ロールアウト計画の完全詳細を直接 deploy
コマンドに提供するには、rollout
設定を headers
引数に渡します。形式の詳細は「ロールアウト計画の構文」を参照してください。
以下の管理 CLI コマンドは、順次のデプロイメントに rolling-to-servers=true
を指定するデプロイメント計画を使用して、アプリケーションを main-server-group
サーバーグループにデプロイします。
deploy /path/to/test-application.war --server-groups=main-server-group --headers={rollout main-server-group(rolling-to-servers=true)}
保存したロールアウト計画を使用したデプロイ
ロールアウト計画は複雑になることがあるため、ロールアウト計画の詳細を保存するオプションがあります。これにより、毎回ロールアウト計画の完全詳細を必要とせずに、ロールアウト計画を使用するときにロールアウト計画の名前を参照することができます。
rollout-plan
管理 CLI コマンドを使用してロールアウト計画を保存します。形式の詳細は「ロールアウト計画の構文」を参照してください。rollout-plan add --name=my-rollout-plan --content={rollout main-server-group(rolling-to-servers=false,max-failed-servers=1),other-server-group(rolling-to-servers=true,max-failure-percentage=20) rollback-across-groups=true}
これにより、以下のデプロイメント計画が作成されます。
"rollout-plan" => { "in-series" => [ {"server-group" => {"main-server-group" => { "rolling-to-servers" => false, "max-failed-servers" => 1 }}}, {"server-group" => {"other-server-group" => { "rolling-to-servers" => true, "max-failure-percentage" => 20 }}} ], "rollback-across-groups" => true }
アプリケーションのデプロイ時に保存されたロールアウト計画名を指定します。
以下の管理 CLI コマンドは、保存されたロールアウト計画
my-rollout-plan
を使用してすべてのサーバーグループにアプリケーションをデプロイします。deploy /path/to/test-application.war --all-server-groups --headers={rollout id=my-rollout-plan}
保存されたロールアウト計画の削除
削除するロールアウト計画の名前を指定して rollout-plan
管理 CLI コマンドを使用すると、保存されたロールアウト計画を削除できます。
rollout-plan remove --name=my-rollout-plan
デフォルトのロールアウト計画
複数のサーバーに影響する操作はすべてロールアウト計画を使用して実行されます。操作リクエストにロールアウト計画が指定されていない場合は、デフォルトのロールアウト計画が生成されます。計画には以下の特徴があります。
- ハイレベルなフェーズは 1 つのみです。操作に影響するすべてのサーバーグループには同時に操作が適用されます。
- 各サーバーグループ内では、操作がすべてのサーバーに同時に適用されます。
- サーバーグループのいずれかのサーバーに操作を適用できないと、グループ全体でロールバックが実行されます。
- あるサーバーグループに操作を適用できないと、他のすべてのサーバーグループでロールバックが実行されます。
7.7. 展開形式のデプロイメントの管理
JBoss EAP 7.1 以前では、ファイルシステム上のファイルを操作するのが展開形式のデプロイメントを管理する唯一の方法でした。JBoss EAP 7.1 では、管理インターフェースを使用して展開形式のデプロイメントを管理できるようになりました。これにより、新しいバージョンのアプリケーションをデプロイしなくても、展開形式のアプリケーションのコンテンツを変更できるようになりました。
JavaScript や CSS ファイルなど、デプロイメントの静的ファイルが更新されると、即座に更新が反映されます。Java クラスなどの他のファイルが変更された場合は、変更の反映にアプリケーションの再デプロイが必要になることがあります。
最初に、空のデプロイメント を使用するか、既存のアーカイブデプロイメントを展開した後、コンテンツを追加または削除します。
「デプロイメントのコンテンツの表示」を参照してデプロイメントのファイルを閲覧するか、ファイルのコンテンツを読み取ります。
空の展開形式のデプロイメントを作成
必要時にコンテンツを追加できる空の展開形式のデプロイメントを作成できます。以下の管理 CLI コマンドを使用して空の展開形式のデプロイメントを作成します。
/deployment=DEPLOYMENT_NAME.war:add(content=[{empty=true}])
empty=true
オプションは、空のデプロイメントの作成を確認するために必要です。
既存のアーカイブデプロイメントの展開
既存のアーカイブデプロイメントを展開してコンテンツを更新できます。展開する前にデプロイメントを無効化する必要があります。以下の管理 CLI コマンドを使用してデプロイメントを展開します。
/deployment=ARCHIVE_DEPLOYMENT_NAME.ear:explode
これで、このデプロイメントのコンテンツを追加または削除できるようになります。
管理コンソールから既存のアーカイブデプロイメントを展開することもできます。Deployments タブからデプロイメントを選択し、ドロップダウンメニューで Explode を選択します。
展開形式のデプロイメントへのコンテンツの追加
デプロイメントにコンテンツを追加するには、add-content
管理 CLI 操作を使用します。コンテンツを追加するデプロイメントの場所へのパスを指定し、アップロードするコンテンツを提供します。アップロードするコンテンツは、ローカルファイルストリーム、URL、JBoss EAP コンテンツリポジトリーにすでに存在するコンテンツのハッシュ、またはコンテンツのバイトアレイとして提供できます。以下の管理 CLI コマンドは、input-stream-index
オプションを使用してローカルファイルのコンテンツをデプロイメントにアップロードします。
/deployment=DEPLOYMENT_NAME.war:add-content(content=[{target-path=/path/to/FILE_IN_DEPLOYMENT, input-stream-index=/path/to/LOCAL_FILE_TO_UPLOAD}]
add-content
操作を使用してコンテンツをデプロイメントに追加するとき、デプロイメントのコンテンツはデフォルトで上書きされます。この挙動を変更するには、overwrite
オプションを false
に設定します。
展開形式のデプロイメントのコンテンツの削除
デプロイメントからコンテンツを削除するには、remove-content
管理 CLI 操作を使用し、デプロイメントの削除するコンテンツへのパスを指定します。
/deployment=DEPLOYMENT_NAME.war:remove-content(paths=[/path/to/FILE_1, /path/to/FILE_2])
7.8. デプロイメントのコンテンツの表示
JBoss EAP の管理インターフェースを使用すると、管理されたデプロイメントのファイルに関する情報を閲覧 し、ファイルの内容を読み取る ことができます。
7.8.1. デプロイメントのファイルの閲覧
管理されたデプロイメントのファイルやディレクトリーを閲覧するには、browse-content
操作を使用します。引数を指定しないと、デプロイメント構造全体が返されます。特定のディレクトリーへのパスを指定するには、path
引数を使用します。
また、管理コンソールからデプロイメントの内容を閲覧することもできます。Deployments タブに移動してデプロイメントを選択し、ドロップダウンメニューで Browse Content を選択します。
/deployment=helloworld.war:browse-content(path=META-INF/)
上記は、helloworld.war
デプロイメントの META-INF/
ディレクトリーにあるファイルとディレクトリーを表示します。
{ "outcome" => "success", "result" => [ { "path" => "MANIFEST.MF", "directory" => false, "file-size" => 827L }, { "path" => "maven/org.jboss.eap.quickstarts/helloworld/pom.properties", "directory" => false, "file-size" => 106L }, { "path" => "maven/org.jboss.eap.quickstarts/helloworld/pom.xml", "directory" => false, "file-size" => 2713L }, { "path" => "maven/org.jboss.eap.quickstarts/helloworld/", "directory" => true }, { "path" => "maven/org.jboss.eap.quickstarts/", "directory" => true }, { "path" => "maven/", "directory" => true }, { "path" => "INDEX.LIST", "directory" => false, "file-size" => 251L } ] }
以下の引数を browse-content
操作に指定することもできます。
- archive
- アーカイブファイルのみを返すかどうか。
- depth
- 返すファイルの深さを指定します。
7.8.2. デプロイメントコンテンツの読み取り
管理されたデプロイメントでファイルの内容を読み取るには、read-content
操作を使用します。引数を指定しないと、デプロイメント全体が返されます。特定のファイルへのパスを指定するには path
引数を使用します。
/deployment=helloworld.war:read-content(path=META-INF/MANIFEST.MF)
上記は、管理 CLI に表示 または ファイルシステムに保存 できるファイルストリームを返します。
{ "outcome" => "success", "result" => {"uuid" => "24ba8e06-21bd-4505-b4d4-bdfb16451b95"}, "response-headers" => {"attached-streams" => [{ "uuid" => "24ba8e06-21bd-4505-b4d4-bdfb16451b95", "mime-type" => "text/plain" }]} }
7.8.2.1. ファイルの内容の表示
attachment display
コマンドを使用して MANIFEST.MF
ファイルの内容を読み取ります。
attachment display --operation=/deployment=helloworld.war:read-content(path=META-INF/MANIFEST.MF)
上記は、helloworld.war
デプロイメントからの MANIFEST.MF
ファイルの内容を管理 CLI に表示します。
ATTACHMENT db9e83f5-de8e-4cdb-818e-6b177c16012d: Manifest-Version: 1.0 Implementation-Title: JBoss EAP Quickstart: helloworld Implementation-Version: 7.1.0.GA Java-Version: 1.8.0_131 Built-By: username Scm-Connection: scm:git:git@github.com:jboss/jboss-parent-pom.git/quic kstart-parent/helloworld Specification-Vendor: JBoss by Red Hat ...
7.8.2.2. ファイルの内容の保存
attachment save
コマンドを使用して、MANIFEST.MF
ファイルの内容をファイルシステムに保存します。
attachment save --operation=/deployment=helloworld.war:read-content(path=META-INF/MANIFEST.MF) --file=/path/to/MANIFEST.MF
上記は、helloworld.war
デプロイメントからの MANIFEST.MF
ファイルを path/to/MANIFEST.MF
のファイルシステムに保存します。--file
引数を使用してファイルパスを指定しないと、一意な添付 ID を使用してファイル名が付けられ、管理 CLI の作業ディレクトリー (デフォルトは EAP_HOME/bin/
) に保存されます。