starzware

ITスキル

Tomcat Javaコンテナ

TIPS
インストール

* 適宜、sudoを付与
1.JDK
2.ダウンロード
cd /usr/local
wget https://downloads.apache.org/tomcat/tomcat-11/v11.0.xx/bin/apache-tomcat-11.0.xx.tar.gz
* ※xxはバージョン番号
2.展開
tar zxvf apache-tomcat-11.0.xx.tar.gz
3.フォルダ名変更
mv apache-tomcat-11.0.xx tomcat
4.Tomcat専用ユーザーを作成と所有者変更
useradd -r -m -U -d /usr/local/tomcat -s /bin/false tomcat
chown -R tomcat:tomcat /usr/local/tomcat
5.起動
systemctl start httpd
4.起動確認
systemctl status httpd
5.自動起動設定
systemctl enable httpd
6.停止
systemctl stop httpd
7.再起動(restart/reload)
systemctl restart httpd
systemctl reload httpd
8.設定確認
apachectl configtest
httpd -t
9.ロード中の追加モジュールの確認
httpd -M
設定ファイル

├── conf         設定ファイル
│   ├── server.xml
│   ├── web.xml
│   └── context.xml
ログ

アクセスログ
/usr/local/tomcat/logs/localhost_access_log.yyyy-MM-dd.txt
Tomcat本体のログ(起動・停止・内部エラー)
/usr/local/tomcat/logs/catalina.yyyy-MM-dd.log
localhostホストのログ(Webアプリのデプロイ、Servlet例外など)
/usr/local/tomcat/logs/localhost.yyyy-MM-dd.log
server.conf

<Server>
  <Service>
    <Connector />
    <Engine>
      <Host>
        <Context />
      </Host>
    </Engine>
  </Service>
</Server>

1. Server(最上位)
<Server port="8005" shutdown="SHUTDOWN"></Server>
Tomcat全体の親要素
シャットダウン制御

2.Service(論理単位)
<Service name="Catalina"></Service>
Connector(入口)とEngine(処理)をまとめる単位

3.Connector
<Connector port="8080" protocol="HTTP/1.1" />
クライアントとの通信口(HTTP受付)

4. Engine(リクエスト処理の中枢)
<Engine name="Catalina" defaultHost="localhost"></Engine>
リクエストをどのHostで処理するか決定

5.Host(仮想ホスト)
<Host name="localhost" appBase="webapps">
アプリの配置先管理
ドメイン単位の分離

6. Context(アプリ単位設定)
<Context path="/app" docBase="myapp" />
Webアプリ単位の設定

7. Resource(JNDI設定)
<Resource name="jdbc/MyDB"
          auth="Container"
          type="javax.sql.DataSource" />
DB接続プール設定(JNDI)
tomcat.service

[Unit]
Description=Apache Tomcat
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/java-21-openjdk"

ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh

Restart=always

[Install]
WantedBy=multi-user.target