Apache Tomcat 10 installieren auf Rocky Linux 8

(1) Java installieren
dnf install java-17-openjdk -y

(2) tomcat Benutzer anlegen
mkdir /opt/tomcat
groupadd tomcat
useradd -g tomcat -c „Tomcat User“ –d /opt/tomcat -s /sbin/nologin tomcat

(3) Tomcat herunterladen und entpacken
wget https://downloads.apache.org/tomcat/tomcat-10/v10.0.16/bin/apache-tomcat-10.0.16.tar.gz
tar xzf apache-tomcat-10.0.16.tar.gz -C /opt/tomcat –strip-components=1
chown -R tomcat: /opt/tomcat/

(4) Tomcat Admin Benutzerrolle definieren
nano /opt/tomcat/conf/tomcat-users.xml

....
<role rolename="manager-gui"/>
<user username="admin" password="password" roles="manager-gui,admin-gui"/>
</tomcat-users>

(5) Tomcat für den remote Zugriff konfigurieren
nano /opt/tomcat/webapps/manager/META-INF/context.xml

remove :

  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

nano /opt/tomcat/webapps/host-manager/META-INF/context.xml

remove:

  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

(6) Eine Steuerdatei (Unit File) für systemd anlegen für Apache Tomcat
Ermitteln des JAVA-Pfad mit sudo alternatives –list | grep ^java und Verwendung in der Unit-Datei als JAVA_HOME Umgebungsvariable

nano /etc/systemd/system/tomcat.service

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

[Service]
Type=forking
User=tomcat
Group=tomcat

Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.2.0.8-4.el8_5.x86_64
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat

ExecStart=/opt/tomcat/bin/catalina.sh start
ExecStop=/opt/tomcat/bin/catalina.sh stop

RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target

systemctl daemon-reload

systemctl start tomcat

systemctl enable tomcat

systemctl status tomcat

● tomcat.service - Apache Tomcat Server 10
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2022-02-07 17:16:13 CET; 36s ago
 Main PID: 49244 (java)
    Tasks: 30 (limit: 4770)
   Memory: 105.7M
   CGroup: /system.slice/tomcat.service
           └─49244 /usr/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org>

Feb 07 17:16:13 Rocky8 systemd[1]: Starting Apache Tomcat Server 10...
Feb 07 17:16:13 Rocky8 systemd[1]: Started Apache Tomcat Server 10.

(7) Firewall freischalten für den Port 8080
Standardmäßig wird die öffentliche Zone (public) verwendet. Andernfalls mit dem Parameter –zone=internal wie hier die interne Zone spezifizieren.

sudo firewall-cmd --add-port=8080/tcp --permanent
success
sudo firewall-cmd --reload
Success
sudo firewall-cmd --info-zone=public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources:
  services: cockpit dhcpv6-client ssh
  ports: 8080/tcp
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
Startseite des Tomcat, Aufruf mit http:/<servername>:8080

Jetzt ist unser Tomcat über explizite Angabe des Ports 8080 erreichbar. Das kann man so machen. muss man aber nicht. Schöner ist es, die Kommunikation auf Port 80 umzulegen.

sudo iptables -t nat -A PREROUTING -p tcp --dport  80 -j REDIRECT --to-ports 8080

sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8080

sudo iptables-save

Anzeige der definierten iptables Einträge:

sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8080

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8080

Abspeichern/Backup der iptables-Konfiguration:

sudo iptables-save
sudo iptables-save -c > /etc/iptables.rules

für ein späteres Restore mit folgendem Aufruf:

sudo iptables-restore < /etc/iptables.rules

Weiter oben haben wir in der firewall den Port 8080 freigegeben. Das ist nun nicht mehr notwendig; entfernen des Ports aus der Firewall:

sudo firewall-cmd --remove-port=8080/tcp --permanent
success
sudo firewall-cmd --reload
success

Die Kommentarfunktion ist geschlossen.