WinXP+tomcatだけで実現する簡単鯖

このマニュアルはWindows XPで安直にW2Ch鯖を構築したい人用に書いてみました。 普段自宅で使用しているPCを外出時に起動しておくだけで、自分専用のW2Ch鯖を利用できます。 ApacheやIISとtomcatの連携がよく分からない方向けのマニュアルです。

用意するもの

JDKjdk-6u7-windows-i586-p.exehttp://java.sun.com
tomcatapache-tomcat-5.5.17.exehttp://jakarta.apache.org
ffmpegffmpeg.rev6218.7zhttp://ffdshow.faireal.net/mirror/ffmpeg/
HTMLParserhtmlparser1_6_20060319.ziphttp://htmlparser.sourceforge.net/
PDFBoxPDFBox-0.7.2.ziphttp://www.pdfbox.org/index.html
crimsoncrimson-1.1.3-bin.ziphttp://xml.apache.org/crimson/

JDKのインストール

JDKというのはjavaの開発キットのことです。 javaで作成されたプログラムを動作させるだけのJREというものもありますが、tomcatの場合これは利用できません。 tomcatではjspをコンパイルする必要があるため、コンパイラを含むJDKが必須です。 JDKのインストールは簡単でjdk-6u7-windows-i586-p.exeをダブルクリックして、ガイダンスに従って操作してください。 基本的にデフォルト設定のままでOKです。 インストールが完了したらコマンドプロンプトから以下のコマンドを入力してみてください。 javaのバージョンが表示されるはずです。
	C:\>java -fullversion
	java full version "1.6.0-b09"
	

tomcatのインストール

インストールの前に以下のコマンドを実行してみます。 Windows XPをインストールしただけのマシンでは以下のような出力になります。 StateがLISTENINGになっているポートは135,445,1029,139です。 ここで8080,8005,8009のポートがLISTENINGになっている場合、 tomcatをインストールした後、使用するポートを調整する必要があります。
	C:\>netstat -na

	Active Connections
	
	  Proto  Local Address          Foreign Address        State
	  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
	  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
	  TCP    127.0.0.1:1029         0.0.0.0:0              LISTENING
	  TCP    192.168.153.136:139    0.0.0.0:0              LISTENING
	  TCP    192.168.153.136:445    192.168.153.1:1477     ESTABLISHED
	  UDP    0.0.0.0:445            *:*
	  UDP    0.0.0.0:500            *:*
	  UDP    0.0.0.0:1025           *:*
	  UDP    0.0.0.0:1038           *:*
	  UDP    0.0.0.0:4500           *:*
	  UDP    127.0.0.1:123          *:*
	  UDP    127.0.0.1:1900         *:*
	  UDP    192.168.153.136:123    *:*
	  UDP    192.168.153.136:137    *:*
	  UDP    192.168.153.136:138    *:*
	  UDP    192.168.153.136:1900   *:*
	
次にtomcatをインストールします。Windows版では、インストーラがついているので簡単です。 Choose ComponentsではNormalを選択し、Choose Install Locationではデフォルトが "C:\Program Files\Apache Software Foundation\Tomcat 5.5"なんて名前になっていますが、 スペースを含むフォルダを利用するとトラブルこともも多いので、C:\tomcatのようにスペース を含まない、フォルダに変更した方が良いでしょう。 次にConfigurationの項目ではadmin(管理者)のパスワードを入力しておきます。 Java Virtual Machineの項目ではおそらく正しいフォルダが選択されているはずなので、そのままInstallボタンを押します。 インストールが完了しtomcatの起動をチェツクして、インストーラを終了するとtomcatが自動的に起動します。 その後再びnetstat -naを実行すると以下のように8009,8080,8005がLISTENINGという状態になります。
	C:\>netstat -na

	Active Connections
	
	  Proto  Local Address          Foreign Address        State
	  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
	  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
	  TCP    0.0.0.0:8009           0.0.0.0:0              LISTENING
	  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING
	  TCP    127.0.0.1:1029         0.0.0.0:0              LISTENING
	  TCP    127.0.0.1:8005         0.0.0.0:0              LISTENING
	  TCP    192.168.153.136:139    0.0.0.0:0              LISTENING
	  TCP    192.168.153.136:445    192.168.153.1:1477     ESTABLISHED
	  UDP    0.0.0.0:445            *:*
	  UDP    0.0.0.0:500            *:*
	  UDP    0.0.0.0:1025           *:*
	
それぞれのポートの意味は以下のようになります。
8080HTTPサービスのポート。IE等のWebブラウザから直接アクセスできるポート。
8009AJP13サービスのポート。Apache等との連携時に使用する。
8005TOMCATの停止時に使用する。
試しにhttp://localhost:8080/をIE等のブラウザでアクセスしてみると、以下のようなページが表示されるはずです。

これがtomcatが動作している証拠です。ただし一旦PCを再起動すると、tomcatは自動的に起動してくれません。 自動的に起動するように設定するには、コントロールパネル->管理ツール->サービスを開くと、 その中にApache Tomcatというサービスがあるはずです。 このサービスのスタートアップの種類を手動から自動に変更します。


再起動した後tomcatが動作していることを確認してください。 これでtomcatのインストールは完了です。しかし楽になったものです。

W2Chのインストール

ここまでくればW2Chのインストールは簡単です。 先ずc:\tomcat\common\libの中に以下のファイルをコピーします。
	crimson-1.1.3-bin.zip中のcrimson.jar
	htmlparser1_6_20060319.zip中のhtmlparser.jar
	PDFBox-0.7.2.zip中のPDFBox-0.7.2.jar
	
7zでffmpeg.rev6218.7zを展開した内容を全てc:\usr\binにコピーします。 (このパスはw2chxxx.war中のWEB-INF/web.xmlに書いてあるので、変更したい場合はweb.xmlを編集してください。) 最後にw2chxxx.warをw2ch.warに名前を変更してc:\tomcat\webappsにコピーします。 tomcatが起動していれば、自動的にc:\tomcat\webapps\w2chというフォルダにアプリケーションが展開されます。 ここまでできたらhttp://localhost:8080/w2ch/をアクセスしてみます。以下のようにW2Chのダウンロードページが表示されるはずです。

いきなりサービスの公開

いままでの解説で分かったと思いますが、tomcat自体もhttpサーバの機能を持っています。 この機能はservletやjspのテスト時には便利なのですが、当然Apache等の機能,性能には及びません。 そのためapacheとtomcatを連携して使用するのが良いとされています。しかしこれは初心者には面倒かもしれません。 W2Ch鯖専用で、個人や数人程度で使うなら、tomcatのhttpを使用してしまう方法も良いかもしれません。 まず8080というポートを変更します。8080というポートは良くhttp proxyに使われるため、proxyを探している奴らがつつきにきます。 こういった方々に興味を持たれないようにしておいた方が安全です。設定の変更はc:\tomcat\conf\server.xmlの以下の部分のport="8080" の値を変更して、tomcatを再起動すればOKです。tomcatの再起動はコントロールパネル->管理ツール->サービスでできるようになっています。
	<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" 
		minSpareThreads="25" maxSpareThreads="75" enableLookups="false" 
		redirectPort="8443" acceptCount="100" connectionTimeout="20000" 
		disableUploadTimeout="true" />
	
8080をどのような値に変更するかというと、httpのデフォルトの80にしてURLのポート指定無しにすることもできますし (apache等が動いているとだめです。)、一般的なサービスが割り当てられていないポートに変更しておけば、 怖い人に興味を持たれることも少なくなります。個人用であれば後者の方が良いでしょう。 まずnetstat -naで現在LISTENINGになっているポートを除外します。 後は"TCP ポート 一覧"なんてキーワードで検索して、一般的に使用されていないポートを選択します。 とりあえず8080を8086なんて値に変更してtomcatを再起動すると、http://localhost:8086/w2ch/でW2Chの ページが表示されるはずです。これをF/Wやルータを調整しインターネットに公開すればhttp://<servername>:8086/w2ch/ というアドレスでW2Chが使用できるようになります。

ちょっとセキュリティ面を考えてみる

8080を自分しか知らないポートに変えて運用している場合は比較的安全かもしれませんが、 http://<servername>:<port>/の様にアクセスされるとtomcatのトップページが見えてしまいます。 特に80に変えて運用している場合は簡単に見つけられてしまいます。 tomcatであることがばれてもセキュリティホールのあるバージョンで無ければそれほど問題にはならないのですが、 そのページのリンクに管理用のURLであるhttp://<servername>:<port>/manager/statusや http://<servername>:<port>/manager/htmlのリンクが存在します。 これらのURLは管理者のパスワードでブロックされていますが、外から管理者用ツールがアクセスできるのは、 気持ちの良いものではありません。そこでこの管理者用のアプリを停止したいと思います。 これは簡単でC:\Tomcat\conf\Catalina\localhostにあるhost-manager.xmlとmanager.xmlを削除して、tomcatを再起動すればOKです。 当然いつでも戻せるようにバックアップは取っておいた方が良いです。 あとはC:\Tomcat\webapps\ROOT\index.jspを適当なトップページに変更しておけばOKでしょう。

注意事項

ApacheとTomcatを連携させることを推奨している理由は、Tomcatのドキュメントに以下のように書かれています。
	1.静的なページに関して Tomcat は Apache ほど速くありません。
	2.Tomcat は、Apache ほど 細かな設定ができません。
	3.Tomcat は、Apache ほど 頑強ではありません。
	4.Tomcat は、Apache のモジュール(例 Perl, PHP, その他)でしか提供していない機能に対する多くのサイトの要望に答えられないかもしれません。 
	
ということで最終的にはここを参考にして、Apacheと連携する方法をとったほうが良いと思います。