Apache Tomcat
Ein einfacher und schnell installierter Application Server, primär für Entwicklungszwecke.
Installation
dnf -y install tomcat
systemctl enable --now tomcat.service
Tipp
Tomcat kann per tomcat@.service
auch in mehreren Instanzen auf dem gleichen Host laufen (siehe weiter unten).
Wer die nette Startseite benötigt („ROOT“-Webapp):
dnf -y install tomcat-webapps
So lassen sich die folgenden Webapps aktivieren:
das Admin-Interface (Virtual Host Manager) unter http://tomcat:8080/host-manager/html,
der Web Application Manager unter http://tomcat:8080/manager/html
der Server Status unter http://tomcat:8080/manager/status
dnf -y install tomcat-admin-webapps
# and if also using the ROOT webapp:
dnf -y install tomcat-docs-webapp # otherwise some links will be broken on the ROOT startpage
Tomcat Management-Benutzer anlegen:
echo -n "linuxfabrik" | openssl dgst -sha256
Das gehashte Passwort findet sich in der Ausgabe nach „(stdin)=“. Benutzer anlegen:
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="manager-gui"/>
<user username="tomcat-manager" password="hashedpass1" roles="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat-admin" password="hashedpass1" roles="admin-gui" />
</tomcat-users>
Benutzern Zugriff auf die Webapplikation erlauben (dieses Verfahren gilt immer pro Webapp):
<Context antiResourceLocking="false" privileged="true" >
<!--
<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" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
-->
</Context>
Mehrere Tomcat-Instanzen auf einer Maschine
Beispiel: Es soll eine „author“- und eine „public“-Instanz laufen, Tomcat soll aber nur einmal aus den offiziellen Repos installiert werden:
dnf -y install tomcat
mkdir -p /var/lib/tomcats/author/{conf,logs,webapps,work,lib}
mkdir -p /var/lib/tomcats/public/{conf,logs,webapps,work,lib}
cp --archive /etc/tomcat/* /var/lib/tomcats/author/conf/
cp --archive /etc/tomcat/* /var/lib/tomcats/public/conf/
restorecon -Fvr /var/lib/tomcats
chown -R tomcat:tomcat /var/lib/tomcats
Die beiden Instanzen lassen sich unterschiedlich konfigurieren - im Beispiel „public“ unverändert auf Port 8080, die Ports bei „author“ aber um 1 erhöht laufen lassen:
<Server port="8006" shutdown="SHUTDOWN">
...
<Connector port="8081" protocol="HTTP/1.1"
...
redirectPort="8444"
...
systemctl enable --now tomcat@author.service
systemctl enable --now tomcat@public.service
CATALINA_BASE
ist dann spezifisch wie beispielsweise /var/lib/tomcats/author
, und CATALINA_HOME
allgemein /usr/share/tomcat
.
Anpassung des Tomcats, z.B. der JRE - statt über Systemd-Overrides:
Einzelinstanz / global für alle Instanzen:
/etc/sysconfig/tomcat.conf
(überschreibt die Settings in/etc/tomcat/tomcat.conf
)Individuell für spezifische Instanz (hier für Instanz „author“):
/etc/sysconfig/tomcat@author
(überschreibt die globalen Settings)
Statischer Content
Wird direkt unter /var/lib/tomcat/webapps/static
abgelegt. Die Datei /var/lib/tomcat/webapps/static/test.html
ist dann per http://tomcat:8080/static/test.html aufrufbar.
Optimierung
Tomcat Startup-Zeit beschleunigen - die Meldung INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
lässt sich wie folgt beheben:
cd /var/lib/tomcat/webapps/mywebapp
ls WEB-INF/lib | awk '{print $1",\"}'
Die lange Ergebnisliste des obigen Kommandos an den Parameter
tomcat.util.scan.DefaultJarScanner.jarsToSkip
(bis Tomcat 7)tomcat.util.scan.StandardJarScanFilter.jarsToSkip
(Tomcat 8+)
in der Datei /path/to/tomcat/conf/catalina.properties
anhängen.
Built on 2024-11-18