misc.log

日常茶飯事とお仕事と

Debian: tomcat起動までのメモ(2)

本日依頼されていた作業中に調べたことをメモっておきます。http://www.backyrd.net/entry/20131003/1380765021 の続きです。

ロックファイル置き場が無い

tomcatの起動状態を判定するロックファイルの置き場所として、CentOS用に書かれた起動スクリプト(/etc/rc.d/tomcat)では /var/lock/subsys/ が指定されていたのですが、これがDebianでは無いようです。

/var/lock まではあるのですが subsys ディレクトリがありません。仕方ないので作りました(笑)。これでいいのかどうかはちょっと不安なのですが、とりあえず動いています。

本件についてはこの辺をちらっと見ながら作業しました。

/var/lock/subsysが存在しない場合にエラーになる / SourceForge - UltraMonkey-L7
http://sourceforge.jp/ticket/browse.php?tid=31641&group_id=1951

catalina.shのJAVA_HOMEパス指定変更

/usr/local/tomcat/bin/catalina.sh に記載されていた環境変数 JAVA_HOME ですが、引き渡された時点で記載されていたパスは実機に存在しませんでした。はて、何を設定するか……ということで、下記のコマンドで表示されるJREの導入パスを転記したところ、うまくいったようです。

update-alternatives --config java

作業対象機では「/usr/lib/jvm/java-6-sun/jre/」がJREのパスでした(実際には、この先にさらに bin/javaディレクトリなどがあります)。

上記コマンドで表示されるパスのもう1つは「/usr/bin/gij-4.4」だったのですが、こちらを設定するとtomcatのstopコマンド実行時にパスが無いとのエラーが発生しました*1

本件に関して調べた際に参考したのは以下のサイト。

How to determine JAVA_HOME on Debian/Ubuntu? - serverFault
http://serverfault.com/questions/143786/how-to-determine-java-home-on-debian-ubuntu
DebianJava 7をインストールする - うつろなるパソコン技術ノート
http://www.net-phantom.jp/uturo1/2012/03/debianjava7.html

Tomcat単体での動作確認

Tomcatが導入し終わった時点で、

  • Apacheは立ち上げず
  • Tomcatだけ立ち上げる(/etc/init.d/tomcat startコマンド)

という状態で、「http:./localhost:8080/」を開くと、Tomcatのキャラクターである猫の絵が左上に配置されたトップページが開きます。また、サンプルのJSPサーブレットはさらに「~:8080/jsp-examples」「~:8080/servlets-examples」を開くと表示されます。というところで導入成功。

Tomcat自動起動設定

作業開始時に参考にされていたサイト(CentOS用)では、chkconfigコマンドで自動起動の設定を行うように記載されていましたが、このコマンドはDebianにはありません。Debianでは以下のコマンドで自動起動設定を行うようです。

update-rc.d tomcat defaults

自動起動解除は、~ tomcat remove、でいけます。上記のコマンドを実行すると、/etc/rc0やrc1といったディレクトリに起動するスクリプトへのシンボリックリンクが生成されます。なので、設定がうまくいったかどうかは、とりあえずであれば

ls /etc/rc*

などで表示されるディレクトリ内一覧に、指定したプロセスの名前が入っているかどうか、などでも見られます(ちなみに、S19tomcat、のように冒頭にS、続いて2桁数値という名前になっています)。

Apache2とTomcatの連携設定 - Mod利用設定

WebサーバーとしてはApache、アプリ関連はTomcatといった棲み分けを行うには、基本的な外向けの窓口をApacheとする必要があり、それにはApacheからTomcatを呼び出せる連携設定を行う必要があります。この設定には、プロキシーMod「mod_proxy_ajp」を利用します。このmodを利用する設定は、以下のコマンドで実行できます。

a2enmod proxy_ajp

今の作業には不要ですが、登録解除するには

a2dismod proxy_ajp

を実行します。このa2enmodが何をしているかというと、/etc/apache2/mod-enabled ディレクトリにmod実物へのシンボリックリンクを生成しているようです。手で設定してもいけますが、上記のコマンドを使った方が簡単で確実です。

Apache2とTomcatの連携設定 - URLによるTomcatの呼び出し設定

稼働させるサイトの設定ファイルに、どのようなアドレスでのアクセスがあればTomcatに処理を任せるかを設定します。具体的には以下の手順で設定を追加します。

  1. Apache2をapachectl stopコマンドで停止する。
  2. Tomcatを/etc/init.d/tomcat stopコマンドで停止する。
  3. サイト「Default」をa2dissite defaultコマンドで登録解除する。
  4. /etc/sites-available/default ファイルに後述の記述を追記する。
  5. サイト「Default」をa2ensite defaultコマンドで登録する。
  6. Tomcatを/etc/init.d/tomcat startコマンドで開始する。
  7. Apache2をapachectl startコマンドで開始する。
   <IfModule mod_proxy_ajp.c>
       <Location /tomcat/>
       ProxyPass ajp://localhost:8009/
       </Location>
    </IfModule>

TomcatとApache2の起動順に注意する必要があります。Tomcatが先です。上記手順で設定を行うと、http://localhost/tomcat/ を開くことで、Tomcat単体での動作確認で表示されたページが開きます。

ポート8009が指定されているのは、このポートがTomcatの連携接続用ポートとして/usr/local/tomcat/conf/server.xmlに指定されているためです。

上記の設定でTomcatのポート8080は使わなくなるので、/usr/local/tomcat/conf/server.xmlに記載された8080に関する記述はコメントアウトした方が良いかも知れません。

Tomcatハンドブック 第2版

Tomcatハンドブック 第2版

*1:/usr/bin/gij-4.4指定時のエラー: パスがない、というより、/usr/bin/gij-4.4/bin/java を探しに行ってエラー、というのが実際です。~/gij-4.4はディレクトリではないので、そもそもパス指定としておかしいです。