Edited at

WildFlyにアプリケーションをデプロイする


はじめに

前の記事で、WildFly に Webアプリケーションをデプロイする方法は以下の3つあると書きました。

1. deploymentsフォルダ(ディレクトリ)に置いてデプロイする

2. 管理画面からデプロイする

3. 管理CLIでデプロイする

今回は、この辺りをもう少し詳しく書こうかと思います。


deploymentsディレクトリに置いてデプロイする

アプリケーション(warファイル)をdeploymentsディレクトリに置くと、一定間隔で deployments ディレクトリをスキャンするデプロイメントスキャナがアプリケーションをデプロイします。スキャン対象のアプリケーションはアーカイブ形式展開形式の2種類があります。

1.アーカイブ形式

zipで固められたWEBアプリケーションです。いわゆるwarやearファイルです。

2.展開形式

zipを展開したWEBアプリケーションです。展開したディレクトリを「xxx.war」のような名前にしたものです。

デプロイメントスキャナの設定はstandalone.xmlの下記にあります。

<subsystem xmlns="urn:jboss:domain:deployment-scanner:2.0">

<deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000" runtime-failure-causes-rollback="${jboss.deployment.scanner.rollback.on.failure:false}"/>
</subsystem>

管理画面から設定できるデプロイメントスキャナの設定項目は以下です。

項目名
説明
デフォルト値

Auto Deploy Exploded
展開形式のWEBアプリケーションに更新があった場合に再デプロイするかどうか
false

Auto Deploy Xml
XMLファイルに更新があった場合に再デプロイするかどうか
true

Auto Deploy Zipped
アーカイブ形式のWEBアプリケーションに更新があった場合に再デプロイするかどうか
true

Deployment Timeout
デプロイのタイムアウト、デプロイに600秒以上かかった場合はエラーになります。
600

Path
deploymentsディレクトリ名
deployments

Relative To
システムプロパティ{jboss.server.base.dir}のパス、デフォルトで「wildfly-15.0.0.Final/standalone」なので「Path」の設定と合わせて「wildfly-15.0.0.Final/standalone/deployments」になります。
jboss.server.base.dir

Runtime Failure Causes Rollback
ランタイムエラー発生時に全てのデプロメントをロールバックするかどうか、特定のアプリで必要?
${jboss.deployment.scanner.rollback.on.failure:false}

Scan Enabled
スキャンを有効にするかどうか
true

Scan Interval
スキャンの間隔
5000

つまりデフォルトの状態では、以下のような状態になっています。

1. アーカイブ形式のWEBアプリケーションは更新されればデプロイされる。

2. 展開形式のWEBアプリケーションを更新する場合はマーカーファイル xxx.war.dodeployを置く必要がある。


マーカーファイル

マーカーファイルは、ユーザーが作成してデプロイメントスキャナに指示を与えるものと、デプロイメントスキャナが現在の状況を示すために作成するものがあります。アプリケーション(warファイル)と同じディレクトリ wildfly-15.0.0.Final/standalone/deployments に置きます。ユーザーが作成する場合、ファイルの中身は空でいいです。

ユーザーが作成するマーカーファイル

名前
意味

xxx.war.dodeploy
xxx.warをデプロイする

xxx.war.skipdeploy
xxx.warのデプロイをスキップする

xxx.war.undeploy
xxx.warをアンデプロイする※なぜかマニュアルに書いてない

デプロイメントスキャナが作成するマーカーファイル

名前
意味

xxx.war.isdeploying
xxx.warがデプロイ中である

xxx.war.deployed
xxx.warのデプロイが完了した

xxx.war.failed
xxx.warのデプロイに失敗した

xxx.war.isundeploying
xxx.warがアンデプロイ中である

xxx.war.undeployed
xxx.warのアンデプロイが完了した


管理画面からデプロイする

WildFlyの管理画面を使ってアプリケーションをデプロイします。管理画面は凝った作りになっており、これをメインに使うことが想定されているようです(たぶん)。管理画面からデプロイした場合はどのような動きになるでしょう

画面の指示にしたがって行えば簡単にできると思います。


  1. Deployments メニューの左上にある(+)ボタンからUpload Deploymentを選択します。


  2. 点線の枠内に war ファイルをドラッグ&ドロップ、またはChoose a file or drag it hereリンクをクリックして war ファイルを選択してアップロードします。アップロード完了後Nextで次に進みます。


  3. NameRuntime Name を確認し、即時に有効にしたい場合はEnabledボタンをONにします。Runtime Nameがコンテキストルートになります。確認したらFinishボタンを押します。


  4. デプロイ完了


deploymentsディレクトリを覗いて見ましょう、あれ?何も無いです。

standalone.xml を開いてみると一番下に以下のようなタグが追加されています。

    <deployments>

<deployment name="helloworld.war" runtime-name="helloworld.war">
<content sha1="2be2e53cd283a40f626a947aa35bfbfb593893ec"/>
</deployment>
</deployments>

wildfly-15.0.0.Finalディレクトリ配下を探してみると、こんなファイルがみつかりました。

wildfly-15.0.0.Final/standalone/data/content/2b/e2e53cd283a40f626a947aa35bfbfb593893ec/content

拡張子を.zip に変更して、さっきアップロードしたwarと比較してみると、一致しました。こんなところにアップされていました。

次に進む前に管理画面からアプリケーションを削除します。

wildfly-15.0.0.Final/standalone/data/content/2b/e2e53cd283a40f626a947aa35bfbfb593893ec/content が無くなってstandalone.xml に追加されたタグも消えました。


管理CLIでデプロイする

wildfly-15.0.0.Final/bin/の下にある管理CLIであるjboss-cli.shを使用してアプリケーションをデプロイします。Windowsの場合はjboss-cli.batを使います。

jboss-cli.sh --connectでWildFlyに接続し、deploy [warの場所をフルパスで記述]コマンドを実行します。

#wildfly-15.0.0.Final/bin/jboss-cli.sh --connect

[standalone@localhost:9990 /] deploy /yourpath/helloworld.war

これでデプロイが完了しました。

standalone.xmlを開いてみると一番下に以下のようなタグが追加されています。

<deployments>

<deployment name="helloworld.war" runtime-name="helloworld.war">
<content sha1="2be2e53cd283a40f626a947aa35bfbfb593893ec"/>
</deployment>
</deployments>

contentファイルも出来ています。

wildfly-15.0.0.Final/standalone/data/content/2b/e2e53cd283a40f626a947aa35bfbfb593893ec/content

管理画面からデプロイした場合と同じ動きをするようです。ですので、どちらか好きなほうを使えば良いと思います。


結局どうやってデプロイするのがベスト?

ドキュメントには、プロダクトシステムでは、デプロイメントスキャナの替わりにマネージメントAPIを使用しましょう、と書かれています。

考え方として、開発中はデプロイメントスキャナによるデプロイを使用し、本番リリース後は管理画面または管理CLIを使用するような運用が想定されているようです。

8.2.2. Deploying Using the Deployment Scanner


Users are encouraged to use the WildFly management APIs to upload and deploy deployment content instead of relying on the deployment scanner that periodically scans the directory, particularly if running production systems.