Tomcatウェブアプリケーションのデプロイ

目次

はじめに

デプロイメントとは、ウェブアプリケーション(サードパーティのWARファイルまたは独自のカスタムウェブアプリケーションのいずれか)をTomcatサーバーにインストールするプロセスの用語です。

ウェブアプリケーションのデプロイメントは、Tomcatサーバー内でいくつかの方法で実行できます。

  • 静的に:ウェブアプリケーションはTomcatの起動前にセットアップされます。
  • 動的に:すでにデプロイされているウェブアプリケーションを直接操作するか(自動デプロイメント機能に依存)、Tomcat Managerウェブアプリケーションを使用してリモートから操作します。

Tomcat Managerは、ウェブアプリケーションをデプロイおよび管理するために、インタラクティブに(HTML GUI経由で)またはプログラム的に(URLベースのAPI経由で)使用できるウェブアプリケーションです。

Managerウェブアプリケーションに依存するデプロイメントを実行する方法はいくつかあります。Apache TomcatはApache Antビルドツール用のタスクを提供しています。Apache Tomcat Maven PluginプロジェクトはApache Mavenとの統合を提供します。また、コマンドラインから使用でき、ウェブアプリケーションのコンパイルと検証、およびウェブアプリケーションをWebアプリケーションリソース(WAR)ファイルにパッケージ化するなどの追加機能を提供するClient Deployerというツールもあります。

インストール

Tomcatによって標準で提供されているため、ウェブアプリケーションの静的デプロイメントにはインストールは不要です。Tomcat Managerによるデプロイメント機能についてもインストールは不要ですが、Tomcat Managerマニュアルで詳述されているように、いくつかの設定が必要です。ただし、Tomcat Client Deployer (TCD) を使用したい場合はインストールが必要です。

TCDはTomcatコアディストリビューションには含まれていないため、ダウンロードエリアから別途ダウンロードする必要があります。ダウンロードファイルは通常apache-tomcat-11.0.x-deployerという名前です。

TCDには、Apache Ant 1.6.2以上とJavaのインストールが必要です。環境変数ANT_HOMEをAntインストールのルートに、JAVA_HOMEをJavaインストールに設定する必要があります。さらに、オペレーティングシステムが提供するコマンドシェルからAntのantコマンドとJavaのjavacコンパイラコマンドが実行できることを確認してください。

  1. TCDディストリビューションをダウンロードする
  2. TCDパッケージは既存のTomcatインストールに抽出する必要はなく、任意の場所に抽出できます。
  3. Tomcat Client Deployerの使用を読む

コンテキストについて一言

ウェブアプリケーションのデプロイについて話す上で、コンテキストの概念を理解する必要があります。コンテキストとは、Tomcatがウェブアプリケーションと呼ぶものです。

Tomcat内でコンテキストを設定するには、コンテキストディスクリプタが必要です。コンテキストディスクリプタとは、命名リソースやセッションマネージャーの設定など、コンテキストに関するTomcat関連の設定を含む単なるXMLファイルです。以前のバージョンのTomcatでは、コンテキストディスクリプタの設定内容はTomcatの主要な設定ファイルであるserver.xml内に保存されることが多かったですが、現在は推奨されていません(ただし、現時点ではまだ機能します)。

コンテキストディスクリプタは、Tomcatがコンテキストを構成する方法を理解するのに役立つだけでなく、Tomcat ManagerやTCDなどの他のツールも、その役割を適切に実行するためにこれらのコンテキストディスクリプタをよく使用します。

コンテキストディスクリプタの場所は以下の通りです。

  1. $CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml
  2. $CATALINA_BASE/webapps/[webappname]/META-INF/context.xml

(1) のファイルは [webappname].xml という名前ですが、(2) のファイルは context.xml という名前です。コンテキストのコンテキストディスクリプタが提供されていない場合、Tomcatはデフォルト値を使用してコンテキストを設定します。

Tomcat起動時のデプロイ

Tomcat ManagerまたはTCDを使用することに興味がない場合、ウェブアプリケーションを静的にTomcatにデプロイし、その後Tomcatを起動する必要があります。この種類のデプロイメントでウェブアプリケーションをデプロイする場所は、ホストごとに指定されるappBaseと呼ばれます。この場所に、いわゆる展開されたウェブアプリケーション、つまり非圧縮のものをコピーするか、圧縮されたウェブアプリケーションリソースである.WARファイルをコピーします。

ホスト(デフォルトのホストは「localhost」)のappBase属性(デフォルトのappBaseは「$CATALINA_BASE/webapps」)で指定された場所にあるウェブアプリケーションは、ホストのdeployOnStartup属性が「true」の場合にのみTomcat起動時にデプロイされます。

その場合、Tomcat起動時に以下のデプロイシーケンスが発生します。

  1. まず、すべてのコンテキストディスクリプタがデプロイされます。
  2. 次に、どのコンテキストディスクリプタからも参照されていない展開されたウェブアプリケーションがデプロイされます。それらがappBaseに .WAR ファイルを持っており、それが展開されたウェブアプリケーションよりも新しい場合、展開されたディレクトリは削除され、ウェブアプリケーションは .WAR から再デプロイされます。
  3. .WARファイルがデプロイされます。

稼働中のTomcatサーバーへのデプロイ

稼働中のTomcatサーバーにウェブアプリケーションをデプロイすることも可能です。

ホストのautoDeploy属性が「true」の場合、ホストは必要に応じて動的にウェブアプリケーションをデプロイおよび更新しようとします。例えば、新しい.WARファイルがappBaseに置かれた場合などです。これが機能するためには、ホストでバックグラウンド処理が有効になっている必要がありますが、これはデフォルト設定です。

autoDeployが「true」に設定され、Tomcatが稼働している場合、以下のことが可能です。

  • ホストのappBaseにコピーされた.WARファイルのデプロイ。
  • ホストのappBaseにコピーされた展開済みウェブアプリケーションのデプロイ。
  • 新しい.WARファイルが提供された場合に、すでに.WARからデプロイされているウェブアプリケーションの再デプロイ。この場合、展開されたウェブアプリケーションは削除され、.WARが再度展開されます。ホストがunpackWARs属性を「false」に設定して.WARが展開されないように構成されている場合、展開は行われず、ウェブアプリケーションは単に圧縮アーカイブとして再デプロイされることに注意してください。
  • /WEB-INF/web.xmlファイル(またはWatchedResourceとして定義されたその他のリソース)が更新された場合のウェブアプリケーションのリロード。
  • ウェブアプリケーションがデプロイされたコンテキストディスクリプタファイルが更新された場合のウェブアプリケーションの再デプロイ。
  • ウェブアプリケーションが使用するグローバルまたはホストごとのコンテキストディスクリプタファイルが更新された場合の、依存するウェブアプリケーションの再デプロイ。
  • コンテキストディスクリプタファイル(以前にデプロイされたウェブアプリケーションのコンテキストパスに対応するファイル名を持つ)が$CATALINA_BASE/conf/[enginename]/[hostname]/ディレクトリに追加された場合のウェブアプリケーションの再デプロイ。
  • ウェブアプリケーションのドキュメントベース(docBase)が削除された場合のウェブアプリケーションのアンデプロイ。Windowsでは、これはアンチロック機能(コンテキスト設定を参照)が有効になっていることを前提としています。有効になっていない場合、稼働中のウェブアプリケーションのリソースを削除することはできません。

ウェブアプリケーションのリロードはローダーでも設定でき、その場合、ロードされたクラスの変更が追跡されます。

Tomcat Managerを使用したデプロイ

Tomcat Managerについては、専用のマニュアルページで説明されています。

クライアントデプロイヤパッケージを使用したデプロイ

最後に、Tomcat Client Deployerを使用してウェブアプリケーションのデプロイメントを実行できます。これは、ウェブアプリケーションを検証、コンパイル、.WARへの圧縮、および本番または開発のTomcatサーバーへのデプロイに使用できるパッケージです。この機能はTomcat Managerを使用するため、ターゲットのTomcatサーバーは稼働している必要があります。

TCDを使用する際には、ユーザーがApache Antに精通していることが前提とされます。Apache Antはスクリプトベースのビルドツールです。TCDには、すぐに使用できるビルドスクリプトが同梱されています。Apache Antについては、このページの冒頭で説明したインストールと、オペレーティングシステムのコマンドシェルを使用して環境変数を設定する方法を少し理解していれば十分です。

TCDには、Antタスク、デプロイ前のJSPコンパイル用のJasperページコンパイラ、およびウェブアプリケーションのコンテキストディスクリプタを検証するタスクが含まれています。バリデータタスク(クラス org.apache.catalina.ant.ValidatorTask)は、展開されたウェブアプリケーションのベースパスという1つのパラメータのみを受け入れます。

TCDは入力として展開されたウェブアプリケーションを使用します(以下のプロパティリストを参照)。デプロイヤーでプログラム的にデプロイされるウェブアプリケーションは、/META-INF/context.xmlにコンテキストディスクリプタを含めることができます。

TCDには、以下のターゲットを持つすぐに使えるAntスクリプトが含まれています。

  • compile (デフォルト): ウェブアプリケーションをコンパイルおよび検証します。これは単独で使用でき、稼働中のTomcatサーバーは必要ありません。コンパイルされたアプリケーションは、関連するTomcat X.Y.Zサーバーリリースでのみ動作し、Jasperによって生成されたコードがそのランタイムコンポーネントに依存するため、他のTomcatリリースでの動作は保証されません。また、このターゲットはウェブアプリケーションの/WEB-INF/classesフォルダにあるJavaソースファイルも自動的にコンパイルすることにも注意してください。
  • deploy: ウェブアプリケーション(コンパイル済みか否かにかかわらず)をTomcatサーバーにデプロイします。
  • undeploy: ウェブアプリケーションをアンデプロイします。
  • start: ウェブアプリケーションを開始します。
  • reload: ウェブアプリケーションをリロードします。
  • stop: ウェブアプリケーションを停止します。

デプロイメントを設定するには、TCDインストールディレクトリのルートにdeployer.propertiesというファイルを作成します。このファイルには、以下のname=valueペアを各行に追加します。

さらに、TCDが使用するターゲットのTomcat Managerにユーザーが設定されていることを確認する必要があります。そうでない場合、TCDはTomcat Managerと認証できず、デプロイメントが失敗します。これを行うには、Tomcat Managerのページを参照してください。

  • build: 使用されるビルドフォルダは、デフォルトで${build}/webapp/${path}です(${build}は、デフォルトで${basedir}/buildを指します)。compileターゲットの実行終了後、ウェブアプリケーションの.WARは${build}/webapp/${path}.warに配置されます。
  • webapp: コンパイルおよび検証される展開済みウェブアプリケーションを含むディレクトリ。デフォルトでは、フォルダはmyappです。
  • path: ウェブアプリケーションのデプロイされるコンテキストパス。デフォルトでは/myappです。
  • url: 稼働中のTomcatサーバーのTomcat Managerウェブアプリケーションへの絶対URL。ウェブアプリケーションのデプロイおよびアンデプロイに使用されます。デフォルトでは、デプロイヤーはlocalhostで稼働しているTomcatインスタンスにhttps://:8080/manager/textでアクセスしようとします。
  • username: Tomcat Managerのユーザー名(ユーザーはmanager-scriptのロールを持っている必要があります)。
  • password: Tomcat Managerのパスワード。