Redmineをwar化 (3) Tomcat上で動作させる

Updated: / Reading time: 3 minutes

前回、Redmine+JRubyをwar化しました。その過程でTomcat上で動作確認を行いましたが、その手順を詳細に説明します。

なお、ページ下部からTomcat同梱版のRedmine-warをダウンロードできます。

前提

以下の環境で作業しました。

  • Windows 7 64bit
    • 32bitでも問題ありません。
  • Java SDK 1.6.0_34
    • Java SDK 1.6か1.7をあらかじめインストールしてください。
    • JAVA_HOME環境変数を設定してください。

Tomcat上で動作させる手順

Tomcatをセットアップ

Tomcatをダウンロードするため、Apache Tomcatにアクセスします。

左メニューにTomcatのバージョンがいくつか並んでいますが、現時点の最新を使用するため、DownloadのTomcat 7.0をクリックします。

いくつかリンクがありますが、[Binary Distributions]→[Core]→[zip]をクリックして、Tomcatのzipファイルをダウンロードします。このzipファイルを適当な場所で展開すれば、Tomcatのセットアップは終わりです。以降、展開先を%CATALINA_HOME%と表記します。

redmine-warをセットアップ

セットアップと言っても、やることは簡単で、redmine.war%CATALINA_HOME%\webappsにコピーするだけです。

note: warファイルの名前がURLのパスとなるため、redmine.warの場合はにアクセスすることになります。例えばとしたい場合、bts.warにリネームします。

Tomcatを起動、Redmineにアクセス

%CATALINA_HOME%\bin\startup.bat(Linuxの場合はstartup.sh)を実行します。初回はwarファイルの展開に時間がかかります(1~3分程度)。以下のように、コマンドプロンプトに”Server startup”と表示されたら、起動完了です。

2012/10/16 18:55:25 org.apache.catalina.startup.Catalina start
情報: Server startup in 69189 ms

Webブラウザでにアクセスします。

Redmineのトップページが表示されたら成功です! Yeah!

note: 例えばWindowsの場合、startup.batを実行してコマンドプロンプトが一瞬だけ表示されて消えてしまう場合、Tomcatの起動に失敗しています。原因は様々考えられますが、まずはログを見ます。ログは%CATALINA_HOME%\logsに出力されます。Tomcatが標準出力に出力するログは、catalina.yyyy-mm-dd.logに出力されます(yyyy-mm-ddはログ出力年月日)。これを開いてエラーを見ます(Java例外の読み方に関する知識が必要になります)。よくあるエラーは、以下のように”Address already in use”と表示されるものです。

致命的: Failed to initialize end point associated with ProtocolHandler ["http-bio-8080"]
java.net.BindException: Address already in use: JVM_Bind <null>:8080
 at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:406)
 at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:610)
 at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:429)
 at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:119)
 at org.apache.catalina.connector.Connector.initInternal(Connector.java:981)
 at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
 at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
 at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
 at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:814)
 at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
 at org.apache.catalina.startup.Catalina.load(Catalina.java:633)
 at org.apache.catalina.startup.Catalina.load(Catalina.java:658)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450)

上記は「8080番ポートが既に使用されている」というもので、OSにインストールされている何らかのミドルウェアが8080番ポートを使用済みということを表しています。この場合、Tomcatのポート番号を変更することで、エラーを解消することができます。

Tomcatのポート番号は、%CATALINA_HOME%\conf\server.xmlに記述されていますので、これを開きます(XMLの知識が必要になります)。テキストを、既に使用済みと言われてしまった”8080”で検索すると、以下のような記述が見つかります。 ```

```

このport="8080"という記述がポート番号の設定ですので、例えばport="18080"のように修正します。修正が終わったら、再びstartup.batを実行して、Tomcatの起動を試みます。

なお、Tomcatは複数のポート番号を使用するため(8005, 8009, 8080)、何回か設定の変更が必要になるかもしれません。

Tomcat同梱版Redmine-war

上記のようなセットアップを行うのも面倒なので、Tomcatを同梱したRedmine-warを作成しました。以下のページからダウンロードできます。

使い方は簡単で、ダウンロードして展開してstartup.batを実行するだけです。でアクセスできます。

ファイルの内容は、上記の手順でセットアップした内容に加え、以下を行いました。

  • webapps内の余分なファイルを削除。
  • bin内の*.shファイルに実行権限を付与。
  • redmine.warwebappsに展開済み。