0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CATALINA_BASE環境変数を利用してTomcatを複数起動する方法

Last updated at Posted at 2024-11-03

1. はじめに

JavaのWebアプリ開発でServletエンジンとして Apache Tomcat が使われることが多いのではないでしょうか。一般的な書籍や研修等で簡単な使い方は教わりますが、同一ホスト上で複数のTomcatインスタンスを起動させる方法はあまり知られておらず、若手メンバがよく質問されるので今回はその方法について説明したいと思います。なおTomcatはサービスではなく、利用時にコマンドで起動させるZip版を対象とします。

2. 環境変数を定義する

Java開発ではJAVA_HOMEMAVEN_HOME等、XXX_HOMEというディレクトリを指定する環境変数がよく使われます。Tomcatの場合も同様でTomcatのインストールディレクトリはCATALINA_HOMEとなります。
複数Tomcatを起動させるポイントはCATALINA_HOMEに加えてCATALINA_BASEという別のTomcatインスタンス用の環境変数を定義することです。

変数 説明
JAVA_HOME C:¥tools¥corretto¥jdk17.0.12_7 JDKのインストールディレクトリパス
例はCorretto 17.0.12_7
CATALINA_HOME C:¥tools¥apache-tomcat-10.1.26 Tomcatのインストールディレクトリ
例はTomcat10.1.26
CATALINA_BASE C:¥tools¥apserver_2 2つ目のTomcat起動用のディレクトリ
例はC:¥tools¥apserver_2
このディレクトリに別Tomcatで必要なファイル等を格納する

3. ディレクトリ構成

Tomcatの実行に必要なファイル(bin,lib)はCATALINA_HOME配下のものが使われます。CATALINA_BASEは別Tomcatインスタンスの起動に必要なものだけ準備する構成になります。ディスク容量も節約できる素晴らしい構成ですね。

CATALINA_HOME
CATALINA_HOME
 |-- bin
 |-- conf
 |-- lib
 |-- logs
 |-- temp
 |-- webapps
 |-- work
CATALINA_BASE
CATALINA_BASE
 |-- conf # CATALINA_HOME/confをコピー
 |-- logs # 存在しない場合、自動で作成される
 |-- temp # 存在しない場合、自動で作成される
 |-- webapps # 実行させたいWebアプリを格納する
 |-- work # 存在しない場合、自動で作成される

4. 設定ファイルをコピー&修正する

複数Tomcatを起動させる上で考慮すべきことは、ポート番号やログファイル等のリソースの競合です。あるプログラムがリッスンしているポートを別のプログラムでリッスンしようとするとAddress already in useのエラーになります。ログファイルについてもオープンしてロックをしているので、他のアプリから同じログファイルに書き込むことはできません。

Tomcatではこれらの設定はconfディレクトリ内のファイルで設定しているため、CATALINA_HOME/confCATALINA_BASE/confにコピーしてリソース競合の箇所を別Tomcat用に変更します。

ポート番号で変更すべき箇所は80058080の2箇所、ApacheとTomcatを連携するためにAJP13を利用している場合は8009も加えて3箇所になります。

CATALINA_BASE/server.xml
<Server port="8005" shutdown="SHUTDOWN"><Server port="⭐️8005から被らない他のポート番号に変更" shutdown="SHUTDOWN">

<Connector port="8080" protocol="HTTP/1.1"

<Connector port="⭐️8080から被らない他のポート番号に変更" protocol="HTTP/1.1"

<Connector protocol="AJP/1.3"
           address="::1"
           port="8009"

<Connector protocol="AJP/1.3"
           address="::1"
           port="⭐️8009から被らない他のポート番号に変更"

(参考)
Tomcat毎にconfを修正するのはメンドウで同じファイルを使いたいという場合、Tomcatのポート番号を環境変数で定義・変更する方法を参照ください。Tomcatを起動させる際に環境変数で差分を定義できるので便利かと思います。

apserver2_startup.bat
@echo off
set JAVA_HOME=C:¥tools¥corretto¥jdk17.0.12_7
set CATALINA_HOME=C:¥tools¥apache-tomcat-10.1.26
set CATALINA_BASE=C:¥tools¥apserver_2

set SHUTDOWN_PORT=8006
set SERVER_PORT=8084
set AJP_PORT=8019

call %CATALINA_HOME%¥bin¥startup.bat

5. さいごに

今回は同一ホスト内で複数のTomcatインスタンスを起動させる方法について説明しました。わざわざTomcatを複数インストールして起動させようとしているメンバがいたので今回の記事としました。なお、複数のTomcatが起動できるようになると以下のケースで役立つのではないでしょうか。

  • システム移行の対応等で異なるバージョンの新旧Tomcatを起動させ、現新比較したい
  • クラスタやセッションレプリケーションを確かめたい
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?