Tomcat Web アプリケーションのデプロイ
目次
はじめに
デプロイとは、Webアプリケーション(サードパーティのWARファイルまたは独自のWebアプリケーション)をTomcatサーバーにインストールするプロセスのことを指します。
Tomcatサーバー内では、いくつかの方法でWebアプリケーションのデプロイを行うことができます。
- 静的に:Tomcatを起動する前にWebアプリケーションが設定されます。
- 動的に:既にデプロイされているWebアプリケーションを直接操作する(*自動デプロイ*機能に依存する)か、TomcatマネージャWebアプリケーションを使用してリモートで行います。
Tomcatマネージャは、Webアプリケーションを対話的に(HTML GUI経由)、またはプログラム的に(URLベースのAPI経由)デプロイおよび管理するために使用できるWebアプリケーションです。Tomcat マネージャ
マネージャWebアプリケーションに依存するデプロイ方法はいくつかあります。Apache TomcatはApache Antビルドツール用のタスクを提供します。Apache Tomcat Maven Plugin プロジェクトはApache Mavenとの統合を提供します。また、コマンドラインから使用でき、Webアプリケーションのコンパイルと検証、およびWebアプリケーションリソース(WAR)ファイルへのパッケージ化などの追加機能を提供するクライアントデプロイヤと呼ばれるツールもあります。
インストール
静的デプロイメントでは、Tomcatによってすぐに提供されるため、インストールは必要ありません。Tomcatマネージャでのデプロイ機能にもインストールは必要ありませんが、Tomcat マネージャマニュアルに詳述されているように、いくつかの設定が必要です。ただし、Tomcatクライアントデプロイヤ(TCD)を使用する場合は、インストールが必要です。
TCDはTomcatコアディストリビューションに含まれていないため、ダウンロードエリアから個別にダウンロードする必要があります。ダウンロードファイルは通常、apache-tomcat-10.1.x-deployerというラベルが付いています。
TCDの前提条件は、Apache Ant 1.6.2以上とJavaのインストールです。環境では、Antのインストールルートを指すANT_HOME環境変数と、Javaのインストールを指すJAVA_HOME環境変数を定義する必要があります。さらに、オペレーティングシステムが提供するコマンドシェルからAntのantコマンドとJavaのjavacコンパイラコマンドを実行できることを確認する必要があります。
- TCDディストリビューションをダウンロードします。
- TCDパッケージは既存のTomcatインストールに展開する必要はありません。任意の場所に展開できます。
- Tomcat クライアントデプロイヤの使用を参照してください。
コンテキストについて
Webアプリケーションのデプロイについて説明する際には、コンテキストの概念を理解する必要があります。コンテキストとは、TomcatがWebアプリケーションと呼ぶものです。
Tomcat内でコンテキストを設定するには、コンテキスト記述子が必要です。コンテキスト記述子とは、コンテキストに関するTomcat関連の設定(リソースの命名やセッションマネージャの設定など)を含むXMLファイルです。以前のバージョンのTomcatでは、コンテキスト記述子の設定内容はTomcatのプライマリ設定ファイルserver.xmlに格納されることが多かったのですが、現在は推奨されていません(ただし、現在も機能します)。
コンテキスト記述子は、Tomcatがコンテキストを設定する方法を知るのに役立つだけでなく、TomcatマネージャやTCDなどの他のツールも、これらのコンテキスト記述子を使用して適切に機能することがよくあります。
コンテキスト記述子の場所は次のとおりです。
- $CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml
- $CATALINA_BASE/webapps/[webappname]/META-INF/context.xml
(1)のファイルは[webappname].xmlという名前ですが、(2)のファイルはcontext.xmlという名前です。コンテキストにコンテキスト記述子が提供されていない場合、Tomcatはデフォルト値を使用してコンテキストを設定します。
Tomcat起動時のデプロイ
TomcatマネージャまたはTCDを使用することに関心がない場合は、WebアプリケーションをTomcatに静的にデプロイしてから、Tomcatを起動する必要があります。このタイプのデプロイメントでWebアプリケーションをデプロイする場所は、ホストごとに指定されるappBase
と呼ばれます。いわゆる展開済みWebアプリケーション(非圧縮)をこの場所にコピーするか、圧縮されたWebアプリケーションリソース.WARファイルをコピーします。
ホスト(デフォルトのホストは「localhost」)のappBase
属性(デフォルトのappBaseは「$CATALINA_BASE/webapps」)で指定された場所に存在するWebアプリケーションは、ホストのdeployOnStartup
属性が「true」の場合にのみ、Tomcatの起動時にデプロイされます。
その場合、Tomcatの起動時には次のデプロイシーケンスが発生します。
- すべてのコンテキスト記述子が最初にデプロイされます。
- コンテキスト記述子によって参照されていない展開済みWebアプリケーションが次にデプロイされます。appBaseに関連する.WARファイルがあり、それが展開済みWebアプリケーションよりも新しい場合、展開済みディレクトリは削除され、Webアプリケーションは.WARから再デプロイされます。
- .WARファイルがデプロイされます。
実行中のTomcatサーバーへのデプロイ
実行中のTomcatサーバーにWebアプリケーションをデプロイすることも可能です。
ホストのautoDeploy
属性が「true」の場合、ホストは必要に応じて、たとえば新しい.WARがappBase
にドロップされた場合に、Webアプリケーションを動的にデプロイおよび更新しようとします。これには、デフォルトの設定であるバックグラウンド処理がホストで有効になっている必要があります。
autoDeploy
が「true」に設定され、Tomcatが実行されていると、次のことが可能になります。
- ホスト
appBase
にコピーされた.WARファイルのデプロイ。 - ホスト
appBase
にコピーされた展開済みWebアプリケーションのデプロイ。 - 新しい.WARが提供された場合に、.WARから既にデプロイされているWebアプリケーションの再デプロイ。この場合、展開済みWebアプリケーションは削除され、.WARが再度展開されます。
unpackWARs
属性が「false」に設定されている場合、ホストは.WARを展開しないように構成されているため、展開は行われません。その場合、Webアプリケーションは圧縮アーカイブとして単純に再デプロイされます。 - /WEB-INF/web.xmlファイル(またはWatchedResourceとして定義されているその他のリソース)が更新された場合のWebアプリケーションのリロード。
- Webアプリケーションがデプロイされたコンテキスト記述子ファイルが更新された場合のWebアプリケーションの再デプロイ。
- Webアプリケーションで使用されるグローバルまたはホストごとのコンテキスト記述子ファイルが更新された場合、依存Webアプリケーションの再デプロイ。
- コンテキスト記述子ファイル(以前デプロイされたWebアプリケーションのコンテキストパスに対応するファイル名を持つ)が
$CATALINA_BASE/conf/[enginename]/[hostname]/
ディレクトリに追加された場合のWebアプリケーションの再デプロイ。 - ドキュメントベース(docBase)が削除された場合のWebアプリケーションのアンデプロイ。Windowsでは、アンチロッキング機能(コンテキスト設定を参照)が有効になっていることを前提としています。有効になっていない場合、実行中のWebアプリケーションのリソースを削除することはできません。
Webアプリケーションのリロードは、ローダーでも構成できます。その場合、ロードされたクラスに変更がないか追跡されます。
Tomcatマネージャを使用したデプロイ
Tomcatマネージャについては、独自の マニュアルページで説明されています。
クライアントデプロイヤパッケージを使用したデプロイ
最後に、Tomcatクライアントデプロイヤを使用してWebアプリケーションをデプロイできます。これは、Webアプリケーションを検証、コンパイル、.WARに圧縮し、本番または開発用Tomcatサーバーにデプロイするために使用できるパッケージです。この機能はTomcatマネージャを使用するため、ターゲットTomcatサーバーは実行されている必要があります。
ユーザーは、TCDを使用するためにApache Antに精通していることを前提としています。Apache Antはスクリプト型のビルドツールです。TCDには、使用するビルドスクリプトがプリパッケージされています。Apache Antの簡単な理解のみが必要です(このページの上部にあるインストール手順と、オペレーティングシステムのコマンドシェルと環境変数の設定に関する知識)。
TCDには、Antタスク、デプロイメント前のJSPコンパイルのためのJasperページコンパイラ、およびWebアプリケーションコンテキスト記述子を検証するタスクが含まれています。バリデータタスク(クラスorg.apache.catalina.ant.ValidatorTask
)は、展開済みWebアプリケーションのベースパスという1つのパラメータのみを許可します。
TCDは、展開済みWebアプリケーションを入力として使用します(下記のプロパティのリストを参照)。デプロイヤを使用してプログラムでデプロイされるWebアプリケーションには、/META-INF/context.xml
にコンテキスト記述子を含めることができます。
TCDには、次のターゲットを含むすぐに使用できるAntスクリプトが含まれています。
-
compile
(デフォルト):Webアプリケーションをコンパイルして検証します。スタンドアロンで使用でき、実行中のTomcatサーバーは必要ありません。コンパイルされたアプリケーションは、関連するTomcat X.Y.Zサーバーリリースでのみ実行され、Jasperによって生成されたコードはランタイムコンポーネントに依存するため、他のTomcatリリースで動作する保証はありません。また、このターゲットは、Webアプリケーションの/WEB-INF/classes
フォルダにあるJavaソースファイルも自動的にコンパイルします。 -
deploy
:Webアプリケーション(コンパイル済みかどうかにかかわらず)をTomcatサーバーにデプロイします。 undeploy
:Webアプリケーションをアンデプロイします。start
:Webアプリケーションを開始します。reload
:Webアプリケーションをリロードします。stop
:Webアプリケーションを停止します。
デプロイメントを設定するには、TCDインストールディレクトリのルートにdeployer.properties
という名前のファイルを作成します。このファイルに、次の名前と値のペアを1行ずつ追加します。
さらに、ターゲットTomcatマネージャ(TCDが使用する)にユーザーが設定されていることを確認する必要があります。設定されていない場合、TCDはTomcatマネージャで認証されず、デプロイメントは失敗します。これを行うには、Tomcatマネージャのページを参照してください。
-
build
:使用されるbuildフォルダは、デフォルトで${build}/webapp/${path}
です(${build}
は、デフォルトで${basedir}/build
を指します)。compile
ターゲットの実行が終了した後、Webアプリケーションの.WARファイルは${build}/webapp/${path}.war
に配置されます。 -
webapp
:コンパイルおよび検証される展開済みWebアプリケーションを含むディレクトリ。デフォルトでは、フォルダはmyapp
です。 -
path
:Webアプリケーションのデプロイされたコンテキストパス。デフォルトは/myapp
です。 -
url
:実行中のTomcatサーバーのTomcatマネージャWebアプリケーションへの絶対URL。Webアプリケーションのデプロイとアンデプロイに使用されます。デフォルトでは、デプロイヤはhttp://localhost:8080/manager/text
で実行されているTomcatインスタンスにアクセスしようとします。 -
username
:Tomcatマネージャのユーザー名(ユーザーにはmanager-scriptのロールが必要です)。 password
:Tomcatマネージャのパスワード。