【Linux】【Tomcat】 単一Tomcat で複数のインスタンスを動かす ~その2~

■ はじめに

http://blogs.yahoo.co.jp/dk521123/36706243.html
で、Tomcatを複数インスタンス起動できるように構築する手順を記したが
CATALINA_HOME、CATALINA_BASE を理解した上で構築すると
無駄なファイルなく、構築できるので、メモしておく

補足

 * Ubuntuの場合は、tomcatX-instance-create コマンドで簡単にできるらしい

■ 関連する環境変数

CATALINA_HOME

 * Tomcat の実行に必要なファイル(bin/lib)のディレクト

CATALINA_BASE

 * Tomcatインスタンスディレクトリ
 * 定義するCATALINA_BASEディレクトリ配下には、以下のディレクトリが必要
~~~~~~
 + conf
 + temp
 + webapps
 + work
 + logs
~~~~~~

■ 構築環境

 * OS : CentOS7
 * Java : JDK1.8
 * Tomcat : Tomcat 8.5.11

ディレクトリ構成

/usr
 + local
    + tomcat       <= CATALINA_HOME
       + bin
       + lib
       + instance1 <= CATALINA_BASE 1
          + conf
          + temp
          + webapps
          + work
          + logs
       + instance2 <= CATALINA_BASE 2
          + conf
          + temp
          + webapps
          + work
          + logs

使用ポート

`インスタンス`意味`使用ポート`備考
instance1シャットダウンポート18005
instance1HTTPポート18080
instance1AJPポート18009
instance1リダイレクトポート18443
instance2シャットダウンポート28005
instance2HTTPポート28080
instance2AJPポート28009
instance2リダイレクトポート28443

■ 構築手順

前提条件

 * JDKはインストールされているものとする

[1] ダウンロード/インストール

[1-1] 以下のサイトからTomcatをダウンロードする(今回は「apache-tomcat-8.5.11.tar.gz」)
http://tomcat.apache.org/download-80.cgi
[1-2] 手順[1-1]を解凍し、インストールする

tar -xzvf ~/apache-tomcat-8.5.11.tar.gz
sudo mv ~/apache-tomcat-8.5.11 /usr/local/tomcat

[1-3] (ひとまず)Tomcatを開始する
~~~~
sudo /usr/local/tomcat/bin/startup.sh
~~~~

【出力結果】
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

[1-4] 以下のコマンドでHTMLが表示されたらOK
     (GUIであれば、ブラウザで「http://localhost:8080」アクセスするでもOK)
~~~~
curl http://localhost:8080

# 問題なければ停止
sudo /usr/local/tomcat/bin/shutdown.sh
~~~~

[2] ディレクトリの配置と設定の変更

[2-1] 上記「 ディレクトリ構成」に合うようにディレクトリを配置する
~~~~
sudo mkdir /usr/local/tomcat/instance1

sudo mv /usr/local/tomcat/conf /usr/local/tomcat/instance1/conf
sudo mv /usr/local/tomcat/temp /usr/local/tomcat/instance1/temp
sudo mv /usr/local/tomcat/webapps /usr/local/tomcat/instance1/webapps
sudo mv /usr/local/tomcat/work /usr/local/tomcat/instance1/work
sudo mv /usr/local/tomcat/logs /usr/local/tomcat/instance1/logs

sudo cp -R /usr/local/tomcat/instance1 /usr/local/tomcat/instance2
~~~~

[2-2] server.xml を修正

# sudo vi /usr/local/tomcat/instance1/conf/server.xml
#
# ※ 以下は「instance1」の手順。
(i) シャットダウンポート
【変更前】
<Server port="8005" shutdown="SHUTDOWN">

【変更後】
<Server port="18005" shutdown="SHUTDOWN">
(ii) HTTPポート
【変更前】
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

【変更後】
    <Connector port="18080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="18443" />
(iii) シャットダウンポート
【変更前】
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

【変更後】
    <!-- Define an AJP 1.3 Connector on port 18009 -->
    <Connector port="18009" protocol="AJP/1.3" redirectPort="18443" />

[2-3] 「instance1」の[2-2]のポート変更を、「instance2」用に上記「使用ポート」に合うように修正する

[3] Tomcat用のユーザ作成

ユーザ作成については、以下の関連記事を参照のこと
https://blogs.yahoo.co.jp/dk521123/35141953.html
[3-1] Tomcat を動かすための専用ユーザ tomcat を追加
~~~~
# ユーザ作成(ログインをしないユーザは「/sbin/nologin」がわりあてられる)
sudo useradd -s /sbin/nologin tomcat

# 所有者変更
sudo chown -R tomcat:tomcat /usr/local/tomcat
~~~~

[4] サービス作成および自動起動登録

systemdを使って、サービス作成する(systemdについては、以下の関連記事を参照のこと。)
https://blogs.yahoo.co.jp/dk521123/37022877.html
[4-1] 以下のコマンドで、【tomcat_instance1.service】の内容を保存し、権限付与する
~~~~
sudo vi /etc/systemd/system/tomcat_instance1.service
sudo chmod 755 /etc/systemd/system/tomcat_instance1.service
~~~~

~【tomcat_instance1.service】~~~
[Unit]
Description=Apache Tomcat 8
After=network.target

[Service]
# !!ポイント!! 必ずダブルクォーテーションマーク「"」で囲む
Environment="CATALINA_HOME=/usr/local/tomcat"
Environment="CATALINA_BASE=/usr/local/tomcat/instance1"

User=tomcat
Group=tomcat
Type=oneshot
PIDFile=/usr/local/tomcat/tomcat.pid
RemainAfterExit=yes
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
ExecReStart=/usr/local/tomcat/bin/shutdown.sh;/usr/local/tomcat/bin/startup.sh

[Install]
WantedBy=multi-user.target
~~~~~~~~~~~~

[4-2] 以下のコマンドで、自動起動登録
~~~~~~~~~~~~
systemctl enable tomcat_instance1

# 確認(「enabled」が表示されたらOK)
systemctl is-enabled tomcat_instance1
~~~~~~~~~~~~

[4-3] 以下のコマンドで、開始・停止できるか確認する
~~~~~~~~~~~~
# 開始
systemctl start tomcat_instance1

# 停止
systemctl stop tomcat_instance1

# サービスの確認 
sudo systemctl list-unit-files --type=service | grep tomcat
~~~~~~~~~~~~

[4-4] [4-1]~[4-3]の手順の「instance1」を「instance2」に置き換えて繰り返す。


関連記事

Linux】【TomcatTomcat 8.5 のインストール

http://blogs.yahoo.co.jp/dk521123/36706185.html

Windows】【Tomcat】 単一Tomcat で複数のインスタンスを動かす

http://blogs.yahoo.co.jp/dk521123/33610584.html

Linux】【Tomcat】 単一Tomcat で複数のインスタンスを動かす ~その1~

http://blogs.yahoo.co.jp/dk521123/36706243.html