Mac OS XでTomcat (Java ServletとJSP)

'03.1.27 ('03.6.16更新)

なんだか他人に思えないTomcatです。えっと、Javaサーバです。インストールして使ってみましょう。難しくないですが、Apacheとの連携はちょっと手間かも。

(OS X 10.2.3で動作確認しました。Javaのバージョンは1.3.1。Tomcatは4.1.18。Apacheは1.3.27)
(自己責任で行ってください)


Tomcatって何?

Java Servlet と Java Server Pages (JSP) を実行するサーバです。Apacheに比べると遅いですが、Webサーバの機能もあります。Tomcat自体Javaで書かれています。WebDAV機能もあります。

Tomcatのインストール

まずはTomcat本体のインストール。バイナリを使います。JavaだからOS X用でなくても大丈夫。

ダウンロードして展開

本家」の「The Jakarta Site - Binary Downloads」からバイナリをダウンロードし、tarで展開するだけ。インストール先は/usr/local。StuffIt Expanderではちゃんと展開されないことがあるので注意。

「jakarta-tomcat-4.1.18.tar.gz」をダウンロード。「 jakarta-tomcat-4.1.18-LE-jdk14.tar.gz」はJava1.4用で、OS X 10.2.4までは1.3.1だからそのままでは使えない。10.2.3と10.2.4はJava 1.4.1 Updateをインストールすれば使えます。ダウンロードサイトによっては、ファイル名の頭に「jakarta-」が付かないファイルのこともあります。

% sudo mv jakarta-tomcat-4.1.18.tar.gz /usr/local
% cd /usr/local
% sudo tar zxvf jakarta-tomcat-4.1.18.tar.gz

ディレクトリ名を書き換えてもいいのですが、下記のようにリンクしておくと、複数のバージョンを置いておく時に便利。以降の説明でもtomcatディレクトリとして書きますので、リンクしない人は説明を置き換えてください。

% sudo ln -s jakarta-tomcat-4.1.18 tomcat

オーナーを変える

とりあえず、オーナーを管理者である自分にします。今後、設定ファイルを書き換えたり、ファイルを作ったりするときに便利です。root権限が無くともTomcatの起動ができるようになります。Tomcat専用ユーザを作ってもいいですね。

% sudo chown -R username:staff jakarta-tomcat-4.1.18

JAVA_HOMEの登録

シェルにJavaのホームディレクトリを登録します。Tomcatの起動と終了に使うシェルスクリプトの中で使います。/Users/username/.cshrc (自分のホームディレクトリにある) に下記を追加。.tcshrcがあると.cshrcが無視されるので.tcshrcに追記します。どちらも無ければ作ります。

setenv JAVA_HOME /Library/Java/Home

Homeの後ろに改行を忘れずに。ターミナルでは新しいウィンドウから有効になります。

Tomcatの起動

Tomcatに付属のスクリプトを使って起動します。

% /usr/local/tomcat/bin/startup.sh

止める時は

% /usr/local/tomcat/bin/shutdown.sh

トップページ表示

「http://127.0.0.1:8080/」で少し待たされて、ちっともかわいくない猫が。

Tomcat表紙

サンプルのServletとJSPが動けば成功です。

Cocoonを使うためにTomcatをインストールした人は、次はCocoonのインストール

ポート番号を変える

デフォルトで8080ですが、たとえば80に変えたい場合 /usr/local/tomcat/conf/server.xml の92行目辺り

    <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
               port="8080" minProcessors="5" maxProcessors="75"

「port="8080"」を「port="80"」としてポート番号を変えられます。Apacheと連携する場合は必要ないですけど。ただし、80などIANAで予約済みのポートを使うと、root権限でないとTomcatが起動できなくなります (sudo使えばいいんですが)。

Apacheとの連携

Tomcat単独で使う場合には必要ありませんが、ApacheをメインのWebサーバとして使う場合は、特定のディレクトリでのみTomcatが動いてJavaが実行されるようにします。そのためにApacheへコネクタ・モジュールをインストールします。ここではmod_webappを使います。

Tomcat 4.0.1の時からのOS X用バイナリ (v1.0) が配付されていますが、最新版 (v1.2) のバイナリは無いのでソースからビルドすることにします。v1.0を使っても連携は出来ます。

(Apache2では試していませんが、mod_webappでは動かないかもしれません。mod_jk2, coyote等他のコネクタを使う方法もあります)
(OS X 10.1.5でビルドするにはautoconf 2.52以降のインストールが必要です)

APRをダウンロードして展開

ビルドにはAPR (Apache Portable Runtime) が必要なので先に展開します。これはプラットフォーム間の差異を補正し、簡単なインストールを実現するものです。

http://apr.apache.org/」の「Index of /dist/apr」から最新版「apr-0.9.1.tar.gz」をダウンロード。

% tar zxvf apr-0.9.1.tar.gz
% cd apr-0.9.1
% ./buildconf
% cd ../

モジュールをダウンロードしてmakeまで

The Jakarta Site - Source Downloads」から「jakarta-tomcat-connectors-4.1.18-src.tar.gz」をダウンロード。(ブラウザでダウンロードすると名前が短くなることがあるので注意)

makeまで一気に行ってみましょう。APRの場所は相対パスで書いたので注意。

% tar zxvf jakarta-tomcat-connectors-4.1.18-src.tar.gz
% cd jakarta-tomcat-connectors-4.1.18-src/webapp
% ./support/buildconf.sh
% ./configure --with-apxs=/usr/sbin/apxs --with-apr=../../apr-0.9.1
% make

--enable-java=DIRオプションはつけない。つけるとtomcat-warp.jarをビルドすることになりますが、他のツールのインストールが必要になってかなり面倒です。Tomcatに付属のtomcat-warp.jarでも動くので良しとします。

mod_webapp.soをコピー

apache-1.3ディレクトリにできた、mod_webapp.soを/usr/libexec/httpd/にコピー

% sudo cp apache-1.3/mod_webapp.so /usr/libexec/httpd

httpd.confの設定

/etc/httpd/httpd.confに以下の設定をします。

# ServerNameを指定しないと動かない。実際に呼び出すサーバ名を書く。
ServerName 127.0.0.1

# 以下は書き加え。
LoadModule webapp_module libexec/httpd/mod_webapp.so

AddModule mod_webapp.c

<IfModule mod_webapp.c>
    WebAppConnection warpConnection warp localhost:8008
    WebAppDeploy examples warpConnection /examples/
</IfModule>

/usr/local/tomcat/webapps/examplesにリダイレクトされます。

server.xmlの設定

/usr/local/tomcat/conf/server.xmlの最後の方、以下の<!---->を消してコメントアウトされてる部分を読み込まれるようにします。(Tomcat 4.1になってコメントアウトされるようになった)

  <!-- Define an Apache-Connector Service -->
<!-- ←消す
  <Service name="Tomcat-Apache">

    <Connector className="org.apache.catalina.connector.warp.WarpConnector"
     port="8008" minProcessors="5" maxProcessors="75"
     enableLookups="true" appBase="webapps"
     acceptCount="10" debug="0"/>

    <Engine className="org.apache.catalina.connector.warp.WarpEngine"
     name="Apache" debug="0">

      <Logger className="org.apache.catalina.logger.FileLogger"
              prefix="apache_log." suffix=".txt"
              timestamp="true"/>

      <Realm className="org.apache.catalina.realm.MemoryRealm" />

    </Engine>

  </Service>
--> ←消す

</Server>

ポート8080からの直接呼び出しを止める場合、下記をコメントアウトします。92行目辺り。

    <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
<!-- ←書く
    <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
               port="8080" minProcessors="5" maxProcessors="75"
               enableLookups="true" redirectPort="8443"
               acceptCount="100" debug="0" connectionTimeout="20000"
               useURIValidationHack="false" disableUploadTimeout="true" />
--> ←書く

再起動

まずTomcatを再起動してからApacheの再起動。

% /usr/local/tomcat/bin/shutdown.sh
% /usr/local/tomcat/bin/startup.sh
% sudo apachectl restart

アプリケーションのページ表示

「http://127.0.0.1/examples/」にアクセス。

Apacheと連携したTomcat

サンプルが動けば成功です。

カスタマイズ

自分用のディレクトリを作ってみましょう。

自分用ディレクトリを作る

/usr/local/tomcat/webappsに、たとえば「mine」ディレクトリを作ります。

% cd /usr/local/tomcat/webapps
% mkdir mine

server.xmlの設定追加

280行目辺り、<!-- Tomcat Examples Context -->の上くらいに入れます。わかりづらいですが、<Host name="localhost"...></Host>に挟まれた部分です。下記はプログラム開発用にreloadable="true"ですが、実運用ではreloadable="false"にします。"true"はファイルが変更される度に更新される代わりに遅くなります。"false"だと変更後再起動が必要です。

<!-- mine -->
<Context path="/mine" docBase="mine" debug="0" reloadable="true"/>

httpd.confの設定追加

Apacheと連携してる場合httpd.confの設定に1行追加。実運用ならexamplesディレクトリは非公開にします。

<IfModule mod_webapp.c>
    WebAppConnection warpConnection warp localhost:8008
    # WebAppDeploy examples warpConnection /examples/
    WebAppDeploy mine warpConnection /mine/
</IfModule>

ここも再起動

まずTomcatを再起動してからApacheの再起動。

% /usr/local/tomcat/bin/shutdown.sh
% /usr/local/tomcat/bin/startup.sh
% sudo apachectl restart

Administration Tool

Tomcatには、server.xml等の設定ファイルの内容をGUIで設定できるツールが付属しています。(以前は別配布でした)

http://127.0.0.1:8080/からアクセスするので、ポート8080からの呼び出しを止めてあるなら戻します。

tomcat-users.xmlの設定

ユーザを追加します。デフォルトで書いてあるユーザは、消さなくても使えないので危険じゃないと思いますが、消してもいいです。

<tomcat-users>
  <user name="tomcat" password="tomcat" roles="tomcat" />
  <user name="role1"  password="tomcat" roles="role1"  />
  <user name="both"   password="tomcat" roles="tomcat,role1" />
  <user username="admin" password="hogehoge" roles="admin"/>
</tomcat-users>

admin.xmlの設定

ローカルからのアクセスに制限するため、「-->」を移動して、<Valve className= ... />を有効にします。

  <!-- Uncomment this Valve to limit access to the Admin app to localhost
   for obvious security reasons. Allow may be a comma-separated list of
   hosts (or even regular expressions). --> ←書く
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
    allow="127.0.0.1"/>
  --> ←消す

Tomcatを再起動

Tomcatを再起動します。

% /usr/local/tomcat/bin/shutdown.sh
% /usr/local/tomcat/bin/startup.sh

ログイン

http://127.0.0.1:8080/にアクセスし、左の「Tomcat Administration」リンクをクリックして認証画面に行きます。ユーザー名とパスワードを入力しログイン。下記の画面が現れます。

Administration_Tool画面

TomcatでWebDAV

Tomcatをインストールしただけで使えます。

アクセスする

「http://127.0.0.1:8080/webdav/」がホームディレクトリになります。Finderの「移動」の「サーバへ接続...」からアクセスしてみましょう。

デフォルトでは、安全のため読むだけで書き込みできません。

Apacheと連携したなら、httpd.confに以下を追加して

WebAppDeploy webdav warpConnection /webdav/

「http://127.0.0.1/webdav/」ですね。

書き込み可能にする

webdav/WEB-INF/web.xmlの以下の<!---->を消すと、書き込みも出来るようになります。

<!-- ←消す
    <init-param>
      <param-name>readonly</param-name>
      <param-value>false</param-value>
    </init-param>
--> ←消す

日本語ファイル名

例に因って、OS X同士なら大丈夫ですが、他機種とのやりとりでは化けそうです。Apacheと連携した場合は、OS X同士でも使えない感じです。Apache使うならmod_davでいいんですけどね。
参照:Mac OS XでWebDAVサーバ

使用上の注意

参考文献

謝辞

このページのためにお世話になった方々です。ありがとうございます。