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:

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:

/etc/tomcat/tomcat-users.xml
<?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):

/var/lib/tomcat/webapps/manager/META-INF/context.xml
<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:

/var/lib/tomcats/author/conf/server.xml
<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-10-08