(2020/5/4更新)
はじめに
今回はLinux(CentOS)上にTomcatを複数インストールし、それぞれ独立したインスタンスとして起動する方法を書いていきます。
ここではTomcatを2つ起動し、それに合わせてApacheも2つ起動した上でTomcatへのアクセスはApacheを介するよう設定するので、1つのサーバにApacheおよびTomcatのインスタンスが2つずつ起動している状態とします。
アクセスする時のイメージは下図です。
80番ポートでアクセスした場合は1つ目のApacheインスタンスを経由して1つ目のTomcatインスタンスが応答、8080番ポートへアクセスした場合は2つ目のApacheインスタンスを経由して2つ目のTomcatインスタンスが応答、といった感じです。
この記事では最終的にApache→Tomcatへの連携をするために、Apacheのインスタンスが2つ起動していることを前提としていますが、連携が必要ないならばTomcatのみのインストールでも大丈夫です。
Apacheのインスタンスを2つ起動する方法については、以下の記事を参考にしてください。
www.77-lifework.com
構成情報
・CentOS 7.7(1908)
・Apache 2.4.43
・Open JDK 11.0.7
・Tomcat 9.0.34
・ポート番号
インスタンス1:80
インスタンス2:8080
Open JDKのインストール
Tomcatを動作させるため、まずはJavaの動作環境としてOpen JDKをインストールしましょう。
以下コマンドを実行します。
yum -y install java-11-openjdk yum -y install java-11-openjdk-devel
上記を実行後、以下のコマンドでインストールされていることを確認しましょう。
java -version
また、Javaの環境変数も設定しておきましょう。
「/etc/profile」をテキストエディタで開き、以下を追記します。
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
追記後、以下を実行して環境変数を反映、確認しておきましょう。
source /etc/profile echo $JAVA_HOME
Tomcatのインストール
次にTomcatをインストールしていきます。
以下のページを開き、tar.gz形式を選択してダウンロードします。
基本的にその時点での最新バージョンで良いと思います。
以下、「tomcat-x.x.x」はインストールするバージョンに合わせて読み替えてください。
tomcat.apache.org
ダウンロードしたファイルをscp等でLinuxマシン上の「/tmp」に配置します。
(Linuxマシンで直接tomcatのページにアクセスしてダウンロードしても大丈夫です)
以下コマンドで解凍し、「tomcat-9.0.34」というディレクトリ名で「/opt」以下に配置しましょう。
cd /tmp tar -zxvf apache-tomcat-9.0.34.tar.gz cp -R apache-tomcat-9.0.34 /opt/tomcat-9.0.34
また、2つ目のインスタンス用として、解凍したディレクトリをもう1つ別名で配置します。
cp -R apache-tomcat-9.0.34 /opt/tomcat-9.0.34-ex
これで「/opt」に2つのTomcat用ディレクトリが存在する状態となりました。
ここから、Tomcatが使用するポート番号を変更していきます。
まずは1つ目のインスタンスについて、「/opt/tomcat-9.0.34/conf/server.xml」をエディタで開き、以下のように、8005、8080番ポートが記載されている箇所を探します。
これらをそれぞれ18005、8081番ポートへ変更します。
とくに、8080番ポートについては今回構築している環境の2つ目のApacheインスタンスで使用しているため、変更の必要があります。
指定するポート番号(18005、8081)については、他のプロセスと重複していないことをあらかじめ確認しておきましょう。
以下のコマンドで指定したポート番号が他のプロセスで使用されているか確認することができます。
lsof -i:ポート番号
また、TCP、UDPで使用されているポートは以下のコマンドでも確認できます。
ss -anut
18005、8081番ポートが他プロセスで使用されていないことを確認できたら、server.xmlを編集します。
8005→18005、8080→8081と変更します。
ここまで設定できたらTomcatの起動設定をしていきます。
まずは以下を実行して、Tomcat用のユーザを作成し、Tomcatインストールディレクトリの権限を変更しておきます。
useradd -s /sbin/nologin tomcat chown -R tomcat:tomcat /opt/tomcat-9.0.34
次に、Tomcatをサービスとして登録し、systemctlコマンドから起動・停止などといった制御をできるようにします。
「/etc/systemd/system」に「tomcat9.service」というファイルを作成し、中身を以下のように記述しましょう。
[Unit] Description=Apache Tomcat 9 After=syslog.target network.target [Service] User=tomcat Group=tomcat Type=oneshot PIDFile=/opt/tomcat-9.0.34/tomcat9.pid RemainAfterExit=yes ExecStart=/opt/tomcat-9.0.34/bin/startup.sh ExecStop=/opt/tomcat-9.0.34/bin/shutdown.sh ExecReStart=/opt/tomcat-9.0.34/bin/shutdown.sh;/opt/tomcat-9.0.34/bin/startup.sh [Install] WantedBy=multi-user.target
上記を保存した後、以下コマンドでTomcatを起動します。
systemctl start tomcat9
起動後、以下コマンドで状態を確認します。
systemctl status tomcat9
ブラウザから8081番ポートにアクセスすると、以下のようにTomcatの初期画面が表示されます。
これで1つ目のTomcatインスタンスのインストールが完了しました。
次に、2つ目のインスタンス設定を実施します。
基本的に流れは同じですが、使用するポート番号を他と重複しないように28005、8082と設定します。
「/opt/tomcat-9.0.34-ex/conf/server.xml」をエディタで開き、8005→28005、8080→8082と変更します。
上記が設定できたら、2つ目のインスタンスについても起動設定をしていきます。
プログラムディレクトリの権限を変更します。
chown -R tomcat:tomcat /opt/tomcat-9.0.34-ex
次に、2つ目のインスタンスをサービスとして登録します。
「/etc/systemd/system」に「tomcat9-ex.service」というファイルを作成し、中身を以下のように記述しましょう。
[Unit] Description=Apache Tomcat 9 ex After=syslog.target network.target [Service] User=tomcat Group=tomcat Type=oneshot PIDFile=/opt/tomcat-9.0.34-ex/tomcat9-ex.pid RemainAfterExit=yes ExecStart=/opt/tomcat-9.0.34-ex/bin/startup.sh ExecStop=/opt/tomcat-9.0.34-ex/bin/shutdown.sh ExecReStart=/opt/tomcat-9.0.34-ex/bin/shutdown.sh;/opt/tomcat-9.0.34-ex/bin/startup.sh [Install] WantedBy=multi-user.target
上記を保存し、以下コマンドで2つ目のTomcatを起動します。
systemctl start tomcat9-ex
ブラウザから8082番ポートにアクセスすると、2つ目のTomcatインスタンスが応答した画面が表示されます。
ここまでの設定によって、
・80番ポートへアクセス→1つ目のApacheインスタンスが応答
・8080番ポートへアクセス→2つ目のApacheインスタンスが応答
・8081番ポートへアクセス→1つ目のTomcatインスタンスが応答
・8082番ポートへアクセス→2つ目のTomcatインスタンスが応答
という状態になりました。
ApacheからTomcatへの通信転送設定
以下の記事を参考に設定していきます。
www.77-lifework.com
今回はApache、Tomcatのインスタンスを2つずつ起動しているので、それぞれに対して転送設定をします。
1つ目のインスタンスについて(80番ポートを使用)
Apacheの1つ目のインスタンスのインストールディレクトリを「/opt/httpd-2.4.43」とします。
まずは「/opt/httpd-2.4.43/conf/extra」ディレクトリの「httpd-proxy.conf」ファイルを編集し、Apacheの80番ポートで受けた通信を18009番ポートで転送するように設定します。
(これらのディレクトリやファイルが存在しない場合は新規に作成してください)
ProxyPass / ajp://localhost:18009/
このファイルをApacheに読み込ませるために、「/opt/httpd-2.4.43/conf」ディレクトリの「httpd.conf」を開き、以下を追記します。
Include conf/extra/httpd-proxy.conf
次に、Tomcatの設定をしていきます。
インストールディレクトリを「/opt/tomcat-9.0.34」とした場合に、「/opt/tomcat-9.0.34/conf」ディレクトリの「server.xml」を編集します。
ajpのConnector設定の記載箇所について、8009番ポートを18009番ポートへ変更しましょう。
このとき、「secretRequired="false"」の記載がなければ記載しておきます。
ここまで設定できたら一度ApacheとTomcatを再起動しておきましょう。
再起動後、ブラウザから80番ポートにアクセスすると、以下のように通信がApacheから転送されてTomcatの画面が表示されています。
2つ目のインスタンスについて(8080番ポートを使用)
次に、2つ目のインスタンスの設定です。基本的に1つ目のインスタンスと同様ですが、ポート番号が重複しないよう設定します。
Apacheのインストールディレクトリを「/opt/httpd-2.4.43-ex」とした場合、「/opt/httpd-2.4.43-ex/conf/extra」ディレクトリの「httpd-proxy.conf」に以下を追記します。2つ目のインスタンスのajpは28009番ポートを使用するよう設定します。
ProxyPass / ajp://localhost:28009/
また、「/opt/httpd-2.4.43-ex/conf」ディレクトリの「httpd.conf」に以下を記載します。
Include conf/extra/httpd-proxy.conf
Tomcat側も設定していきます。
インストールディレクトリを「/opt/tomcat-9.0.34-ex」とした場合に、「/opt/tomcat-9.0.34-ex/conf」ディレクトリの「server.xml」を編集します。
ajpのConnector設定の記載箇所について、8009番ポートを28009番ポートへ変更し、「secretRequired="false"」を記載します。
ApacheとTomcatを再起動後、ブラウザで8080番ポートにアクセスすると、以下のようにTomcatの画面が表示されます。