#はじめに
前の記事で、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 |
つまりデフォルトの状態では、以下のような状態になっています。
- アーカイブ形式のWEBアプリケーションは更新されればデプロイされる。
- 展開形式の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の管理画面を使ってアプリケーションをデプロイします。管理画面は凝った作りになっており、これをメインに使うことが想定されているようです(たぶん)。管理画面からデプロイした場合はどのような動きになるでしょう
画面の指示にしたがって行えば簡単にできると思います。
-
Deployments
メニューの左上にある(+)
ボタンからUpload Deployment
を選択します。
- 点線の枠内に war ファイルをドラッグ&ドロップ、または
Choose a file or drag it here
リンクをクリックして war ファイルを選択してアップロードします。アップロード完了後Next
で次に進みます。
-
Name
、Runtime Name
を確認し、即時に有効にしたい場合はEnabled
ボタンをON
にします。Runtime Name
がコンテキストルートになります。確認したらFinish
ボタンを押します。
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.