Tomcat10 (RaspberryPiOS Bullseye)

2024/4/28


インストール

Tomcat10をインストールする。
cd ~/Download
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.23/bin/apache-tomcat-10.1.23.tar.gz
tar xf apache-tomcat-10.1.23.tar.gz
mv apache-tomcat-10.1.23 /usr/tomcat
mkdir -p /usr/tomcat/webapps/ROOT/WEB-INF/classes
useradd -M -d /usr/tomcat tomcat
chown -R tomcat:tomcat /usr/tomcat/

#Tomcatが動的に生成するファイルのパーミッションを750にする。
echo '#!/bin/sh' > /usr/tomcat/bin/setenv.sh 
echo "UMASK=0022" >> /usr/tomcat/bin/setenv.sh 
chmod 750 /usr/tomcat/bin/setenv.sh ;chown tomcat:tomcat /usr/tomcat/bin/setenv.sh
/usr/tomcat/bin/startup.sh;#tomcatを起動/停止できることを確認,/usr/tomcat/logsも確認
/usr/tomcat/bin/shutdown.sh;#
chown -R tomcat:tomcat /usr/tomcat/;#logの所有者をtomcatに変更
startup.shでTomcatが起動し、shutdown.shでTomcatが停止することを確認する。
systemctlのためにtomcat.serviceをつくる。起動セッションにtomcatを追加する。
#cat /usr/lib/systemd/system/tomcat.service
#tomcat.service
# 新規作成
 [Unit]
Description=Apache Tomcat
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/tomcat/bin/startup.sh
ExecStop=/usr/tomcat/bin/shutdown.sh
RemainAfterExit=yes
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target
systemctlからTomcatを起動、停止、再起動できることを確認する。
systemctl start tomcat;systemctl status tomcat;
systemctl stop tomcat;systemctl status tomcat;
systemctl start tomcat;
systemctl enable tomcat;#起動セッションにtomcatを追加
Tomcatトップページは見えるが、examples他が見えない。
content.xml中に接続先を127.0.0.1に限定する記述がある。これをコメントアウトする。
./examples/META-INF/context.xmlを編集する。
<Context>
  <CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
                   sameSiteCookies="strict" />
<!--
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
</Context>

Hello JSP

examplesの動作を確認したので、hello.jspをつくる。
cat /usr/tomcat/webapps/ROOT/hello.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>Hello JSP</title>
</head>
<%
  String msg = "Hello, JSP !!!" ;
%>
<body>
  <h1><%= msg %></h1>
</body>
</html>

Tomcatをapacheと連携させる

ここまではポート8080経由で直接Tomcatにアクセスしたが、apache2経由でTomcatにアクセスする。
デフォルトではproxyが無効化しているので、/etc/apache2/mods-available/proxy.confを修正する。
ProxyRequests Off
<Proxy *>
   AddDefaultCharset off
   Order deny,allow
   Deny from all
   Allow from 192.168.xx.0/255.255.255.0
#   Require all denied
#   #Require local
</Proxy>

# Enable/disable the handling of HTTP/1.1 "Via:" headers.
# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
# Set to one of: Off | On | Full | Block
#ProxyVia Off
ProxyVia On
/etc/apache2/mods-available/proxy_ajp.confをつくる。
pwgen 16 -n 1
xxxxxxxxxxxxxxxx

cat /etc/apache2/mods-available/proxy_ajp.conf
<Location /tomcat/>
  ProxyPass  ajp://localhost:8009/ secret=xxxxxxxxxxxxxxxx
</Location>

<Location /hello/>
  ProxyPass  ajp://localhost:8009/hello.jsp secret=xxxxxxxxxxxxxxxx
</Location>
proxy.conf,proxy_ajp.confを有効にする。
a2enconf proxy.conf
a2enconf proxy_ajp.conf
/usr/tomcat/conf/server.xmlを修正する。
    <Connector protocol="AJP/1.3"
               address="127.0.0.1"
               port="8009"
               redirectPort="8443"
               maxParameterCount="1000"
               secret="xxxxxxxxxxxxxxxx"
               />

JDBCドライバ

JDBCドライバをTomcatにコピーする。
cp /usr/share/java/postgresql.jar /usr/tomcat/lib/

[参考]
Tomcat9.0.30(CentOS8 1905)