「小悪魔女子大生のサーバエンジニア日記」 | Home | Grails: ServletContextをサービス内で使う
2011/02/02 2:59 | 印刷

JavaのWebアプリケーションをIDEなどで開発する場合、warでデプロイするとプロジェクト名.warというwarファイルができます。これをTomcatに配置する際、ドメインの直下であるルートコンテキスト、つまり「http://yourDomain.com/*」でアクセスできるようにする方法の整理。

一番簡単なのは、warファイルをROOT.warとしてTomcatのwebappsにコピーする方法。
しかしこれでは配布先でアプリケーション名が不明になるし、そもそも毎回リネームするのも面倒です。

ベストな方法。
通常ドメインに対し1アプリケーションという感じが多いですが、Tomcatの定義ファイル「server.xml」で指定したフォルダにwarを配置するのではなく、各ドメインごとにコンテキスト定義ファイルに書く方法を取ればwarファイルのファイル名が何であってもルートに配備できます。
例えばwarファイルが「yourApp.war」であった場合を考えます。

server.xml

<Host name="yourDmain.com" appBase="webapps">
<Alias>yourDmain.com</Alias>
</Host>

こんな感じにしておいて、appBaseに定義した$CATALINA_HOME/webappsフォルダは空にしておきます。

で、このドメインに関するコンテキストを定義するファイルを以下のように作成します。
$CATALINA_HOME/conf/Catalina/yourDmain.com/ROOT.xml
を新規作成し、
ROOT.xml
<Context docBase="/home/yourDmain.com/yourApp.war">
</Context>

コンテキスト名を指定する場合はdocBaseに加えて「path="/yourApp"」のように書きますがルートの場合「path=""」を省略できます。

デフォルトのwebappsフォルダは「$CATALINA_HOME/webapps」でLinuxの場合なら「/usr/local/tomcat6/webapps」みたいな感じの場所ですが、マルチドメインでホスティングする場合はファイルがごちゃごちゃになります。パーティションサイズに余裕があるhomeなどに各ドメインごとにアプリケーションやデータをまとめると後々の管理が楽なのでそうしてます。

このcontext名.xmlには、DBなどのリソース定義やログファイルも指定出来るので固有の設定情報をここで書くようにしています。
また、warファイルの中のMETA-INF/context.xmlでも同様のコンテキスト定義を書けるのですが、上記設定はこれよりも優先されるはずです(心配なら HostのdeployXMLをfalseに)。なのでMETA-INF/context.xmlはテスト環境用で実運用ではTomcat側で定義するという使い分けもできます。

ちなみにルートコンテキストという言い方は正しいかわかりません。ドキュメントでは「The default web application」となっていました。

以上覚え書き。(Tomcat5.5, Tomcat6.0)

参考になりました。

>一番簡単なのは、warファイルをROOT.warとしてTomcatのwebappsにコピーする方法。

の方法を採用しました。
mavenを使用すれば
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<configuration>
<server>localhost</server>
<path>/ROOT</path>
</configuration>
</plugin>

で ROOTとしてデプロイしてくれました。
おお、tomcat-maven-plugin 便利ですね。
私はantでビルドして手動でデプロイなもので。
情報ありがとうございます!

コメント追加

タイトル
名前
E-mail
Webサイト
本文
情報保存 する  しない
  • 情報保存をすると次回からお名前等を入力する手間が省けます。
  • E-mailは公開されません - このエントリーの新規コメント通知が必要なら記入します。