Zuletzt bearbeitet vor 3 Wochen
von Andre Knieschewski

Kernmodul Tomcat-Einrichtung: Unterschied zwischen den Versionen

Keine Bearbeitungszusammenfassung
Markierung: 2017-Quelltext-Bearbeitung
 
(25 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 3: Zeile 3:
Tomcat
Tomcat


Für das SuperX-Kernmodul 6.0 empfehlen wir '''Tomcat 10.1''' mit '''Java 21'''. Die folgenden Beispiele beziehen sich überwiegend auf Ubuntu Linux 26.04. Bei anderen Linux-Distributionen sind die Konfigurationsschritte weitgehend identisch, die Paketnamen und Pfade können aber abweichen.
{{Achtung|Der Umstieg von Tomcat 9 auf Tomcat 10 ist kein reines Versionsupdate. Die Java-EE-Schnittstellen wurden von <code>javax.*</code> nach <code>jakarta.*</code> umgestellt. Für Tomcat 10 wird eine dafür geeignete SuperX-Webanwendung benötigt. Weitere Hinweise dazu stehen im Abschnitt [[#Wechsel_von_Tomcat_9_auf_Tomcat_10|Wechsel von Tomcat 9 auf Tomcat 10]].}}


=Tomcat aus Linux Distributionen=
=Tomcat aus Linux Distributionen=
Da die Versionsnummern des Tomcat nicht immer zu SuperX passen, können Sie einen eigenen Tomcat bzw. den im SuperX Kernmodul mitgelieferten Tomcat nutzen. Auch wenn Sie mehrere Tomcats auf einem Server betreiben kann es sinnvoll sein, Tomcat [[Kernmodul_Tomcat-Einrichtung#Tomcat_manuell_installieren|manuell]] zu installieren.  
Da die Versionsnummern des Tomcat nicht immer zu SuperX passen, können Sie einen eigenen Tomcat bzw. den im SuperX-Kernmodul mitgelieferten Tomcat nutzen. Auch wenn Sie mehrere Tomcats auf einem Server betreiben, kann es sinnvoll sein, Tomcat [[Kernmodul_Tomcat-Einrichtung#Tomcat_manuell_installieren|manuell]] zu installieren.
Der Betrieb von Tomcat aus der jeweiligen Linux-Distribution hat jedoch den Vorteil, dass man
* benötigte Drittsoftware direkt mitinstallieren kann
* die Apache-Integration einfacher einrichten kann
* regelmäßige Sicherheitsupdates und Bugfixes über die Paketverwaltung beziehen kann
* Tomcat in der Regel bereits als systemd-Dienst erhält
Wenn eine für SuperX geeignete Tomcat-Version in der Distribution enthalten ist, empfehlen wir daher die Installation aus der Distribution.


Der Betrieb von Tomcat aus der jew. Linux Distribution hat jedoch den Vorteil, dass man
* benötigte Drittsoftware direkt mitinstallieren kann
* die Apache Integration erfahrungsgemäß einfacher ist
* Regelmäßige Bugfixes automatisch beziehen kann
* Tomcat wird i.d.R.automatisch für systemd als Dienst konfiguriert, mit einer speziellen Kennung für den Systemuser.
Wir empfehlen daher die Distribution.
==Tomcat aus der Ubuntu-Distribution==
==Tomcat aus der Ubuntu-Distribution==
Im folgenden wird das Vorgehen für Ubuntu Linux beschrieben. Hier wird das Kernmodul 5.0 mit Tomcat9 unter Ubuntu 22.04 eingerichtet.
Im Folgenden wird das Vorgehen für Ubuntu Linux 26.04 mit Java 21 und Tomcat 10.1 beschrieben.
Zunächst wechseln sie in die root-Shell mit
Zunächst wechseln Sie in die root-Shell mit
  sudo -i
  sudo -i
* Java 1.8 und Tomcat9 installieren:
Java 21, Tomcat 10 und den Apache-Webserver installieren:
  apt-get install openjdk-11-jdk tomcat9
apt-get update
und direkt stoppen mit
  apt-get install -y openjdk-21-jdk tomcat10 apache2
  systemctl stop tomcat9.service
Tomcat anschließend zunächst stoppen:
Zur Sicherheit alte kompilierte Klassen löschen:
  systemctl stop tomcat10.service
rm -r /var/lib/tomcat9/work/*
Die installierten Versionen können Sie prüfen mit
* Dann die superx-webapp kopieren nach /var/lib/tomcat9/webapps, und den user tomcat zum Eigentümer machen:
java -version
chown -R tomcat:tomcat /var/lib/tomcat9/webapps/
/usr/share/tomcat10/bin/version.sh
{{Hinweis|Das Ubuntu-Paket <code>tomcat10</code> enthält Tomcat 10.1. Die tatsächlich ausgelieferte Patchversion hängt vom Paketstand ab. Die hier empfohlene Kombination mit Java 21 ist eine SuperX-Empfehlung; Tomcat 10.1 selbst benötigt mindestens Java 11.}}


In der Datei
Die Konfiguration des Distributions-Tomcat liegt üblicherweise in
  /etc/tomcat9/server.xml
  /etc/tomcat10/server.xml
beim jew. Connector port="...." das Attribut
und die Webanwendungen in
URIEncoding="UTF-8"
/var/lib/tomcat10/webapps
ergänzen, also z.B.
Kopieren Sie die zu Tomcat 10 passende SuperX-Webanwendung in das webapps-Verzeichnis. Der Tomcat-Dienstbenutzer muss auf die benötigten Dateien zugreifen können; die Eigentümer- und Schreibrechte sollten auf die tatsächlich erforderlichen Verzeichnisse begrenzt werden.
<source lang="xml>
Beim HTTP-Connector in der <code>server.xml</code> setzen Sie die Zeichenkodierung auf UTF-8. Wenn Apache und Tomcat auf demselben Server laufen, empfehlen wir außerdem die Bindung an localhost:
    <Connector port="8080" protocol="HTTP/1.1"
<source lang="xml">
              connectionTimeout="20000"
<Connector port="8080" protocol="HTTP/1.1"
              redirectPort="8443"   URIEncoding="UTF-8" />
          address="127.0.0.1"
          connectionTimeout="20000"
          URIEncoding="UTF-8" />
</source>
</source>
Dann in der /etc/default/tomcat die Zeilen
Die weiteren Einstellungen für den Betrieb hinter Apache werden unter [[#Apache_Anbindung|Apache Anbindung]] erläutert. Weitere Details zur <code>server.xml</code> siehe [[Kern_Installation_Upgrade#Steuerung_des_Servers%3A_Die_server.xml|SuperX-Installationshandbuch]].
  JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
 
Unter Ubuntu können Java-Optionen üblicherweise in der Datei
/etc/default/tomcat10
hinterlegt werden, z.B.:
  JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
  JAVA_OPTS="-Djava.awt.headless=true -DSuperX-DB-PROPERTIES-SET=true -Xmx3700M"
  JAVA_OPTS="-Djava.awt.headless=true -DSuperX-DB-PROPERTIES-SET=true -Xmx3700M"
eintragen (der letzte RAM Parameter ist nur ein Beispiel).
Der Speicherwert ist nur ein Beispiel. Prüfen Sie mit <code>systemctl cat tomcat10</code>, welche Konfigurationsdateien der installierte Dienst tatsächlich einliest. Die vom Paket bereitgestellte systemd-Service-Datei sollte nicht direkt bearbeitet werden; bei Bedarf verwenden Sie eine systemd-Override-Datei.
Starten Sie Tomcat mit
systemctl start tomcat10.service
und prüfen Sie den Status mit
systemctl status tomcat10.service
Wenn der HTTP-Connector nur an <code>127.0.0.1</code> gebunden ist, kann der Zugriff auf demselben Server getestet werden mit
curl -I http://127.0.0.1:8080/superx/
Für den Aufruf vom Arbeitsplatzrechner wird anschließend die Apache-Anbindung eingerichtet.


Dann in der Datei
==Tomcat unter anderen Linux-Distributionen==
/usr/lib/systemd/system/tomcat9.service
Auch unter SUSE Linux und Red Hat Enterprise Linux können Sie den Tomcat aus der Distribution oder [[#Tomcat_manuell_installieren|manuell]] installieren. Die genauen Paketnamen, Dienstnamen und Verzeichnisse sind distributionsabhängig. Entscheidend sind eine geeignete Tomcat-10.1-Version, Java 21, eine kompatible SuperX-Webanwendung und die Konfiguration des HTTP-Connectors bzw. AJP-Connectors.
die Zeile
Ältere Verfahren mit <code>rctomcat</code>, <code>chkconfig</code> oder <code>SuSEconfig</code> werden hier nicht mehr beschrieben. Für die Dienstverwaltung wird systemd verwendet.
EnvironmentFile=/etc/default/tomcat9
ergänzen
Dann führen Sie aus:
systemctl daemon-reload
und starten Tomcat mit:
systemctl start tomcat9.service
Danach können Sie den Zugriff im Browser testen, beim Port 8080 z.B.


http://localhost:8080/superx/
==Tomcat aus der Distribution mit abweichender Userkennung oder anderem webapps-Verzeichnis==
 
Wenn Sie Tomcat aus der Distribution nutzen, läuft der Dienst unter einer dafür eingerichteten Systemkennung. Bei Ubuntu liegt das webapps-Verzeichnis üblicherweise unter <code>/var/lib/tomcat10/webapps</code>.
==Tomcat unter SuSE Linux==
{{Hinweis|Standardmäßig hat der Tomcat-Dienstbenutzer keine Login-Shell. Dies sollte aus Sicherheitsgründen so bleiben.}}
Sie installieren Tomcat aus der Distribution mit
Sie können das Verzeichnis der Webanwendungen auch ändern, indem Sie in der Datei <code>/etc/tomcat10/server.xml</code> beim Element <code>Host</code> das Attribut <code>appBase</code> anpassen, z.B.:
zypper -n in -l tomcat
<source lang="xml">
Bei Suse Linux wird der interne Tomcat unter /usr/share/java/tomcat installiert, die Konfiguration liegt in /etc/tomcat
<Host name="localhost" appBase="/home/superx/webserver/tomcat/webapps"
Wenn Sie diesen Tomcat nutzen möchten, sollten Sie die komplette SuperX Installation unter dem Tomcat Benutzer welcher von Suse angelegt wurde (tomcat) durchführen.
      unpackWARs="true" autoDeploy="false">
Zuerst muss der Tomcatuser Shell-Rechte bekommen. Dazu editieren Sie als root die /etc/passwd und geben in der Zeile vom Tomcatuser am Ende /bin/bash ein.
Danach können Sie ggf. das Verzeichnis /usr/share/tomcat/superx anlegen und dort die Dateien des alten $SUPERX_DIR hinkopieren. Dementsprechend auch in der SQL_ENV das $SUPERX_DIR auf /usr/share/tomcat/superx setzen. Die Dateirechte müssen dem Tomcatuser zugeteilt werden.  
Es ist auch sinnvoll für den Tomcatuser die Dateien wie .bashrc und .profile und Ordner .ssh anzulegen und rechte auf tomcat:tomcat zu geben. Damit können Sie dann aliases wie ll vergeben und auch bei login automatisch die SQL_ENV laden.
Jetzt melden Sie sich mit der TomcatKennung an.
Nun müssen wir die SuperX-Webanwendung in den Suse-Tomcat integrieren, d.h. der im Kernmodul mitgelieferte Tomcat wird gar nicht benutzt, aber den webapps-Ordner darin schon. Wenn SuperX nun unter /usr/share/tomcat/superx liegt, und das Kernmodul hier entpackt wird, liegt die Webanwendung in /usr/share/tomcat/superx/webserver/tomcat/webapps.
Diesen Pfad tragen Sie in der /etc/tomcat/server.xml ein:
<source lang="xml>
<Host name="localhost" appBase="/usr/share/tomcat/superx/webserver/tomcat/webapps"
            unpackWARs="true" autoDeploy="true">
</source>
</source>
Weiter oben setzen Sie bei Betrieb in UTF-8 noch das  URIEncoding="UTF-8":
Beachten Sie, dass der Tomcat-Dienstbenutzer Lese- und Ausführungsrechte auf den gesamten benötigten Verzeichnispfad benötigt. Schreibrechte sollten nur für tatsächlich beschreibbare Verzeichnisse vergeben werden, etwa für temporäre Dateien oder SuperX-Logdateien. Auf gemeinsam verwendeten Verzeichnissen kann die Gruppenberechtigung entsprechend angepasst werden.
<source lang="xml>
Wenn Sie als User <code>superx</code> neue Dateien anlegen und eine gemeinsam verwendete Gruppe eingerichtet haben, kann eine passende umask helfen:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"  URIEncoding="UTF-8" />
  # Full access to user and group, none for others:
</source>
und ggf. auch
<source lang="xml>
<Connector port="8080" protocol="HTTP/1.1"
              connectionTimeout="20000"
              redirectPort="8443"
  URIEncoding="UTF-8" />
</source>
Damit ist der UbuntuTomcat in SuperX integriert.
Beispiel-Befehle für Tomcat:
Starten:
rctomcat start
Stoppen:
rctomcat stop
Neustarten:
rctomcat restart
Und die Logdateien liegen hier: /var/log/tomcat/*
Damit der Server beim Booten hochfährt, geben Sie ein:
chkconfig --set tomcat on
 
Variablen wie CATALINA_OPTS setzen Sie hier: /etc/sysconfig/tomcat
z.B.
CATALINA_OPTS="-DSuperX-DB-PROPERTIES-SET=true -Xmx4700M -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false "
 
==Tomcat aus der Distribution mit abweichender Userkennung oder anderem webapps-Verzeichnis==
Wenn Sie Tomcat aus der Distribution nutzen, läuft der Dienst unter der Kennung "tomcat", und das webapps-Verzeichnis liegt in /var/lib/tomcat9.
 
{{Hinweis|Standardmäßig hat der User des Tomcat-Dienstes keine Login-Shell. Dies ist eine Sicherheitsvorkehrung, die vom BSI empfohlen wird.}}
 
Sie können das Verzeichnis der Webanwendung/en auch verschieben, indem sie in der Datei
/etc/tomcat9/server.xml beim Element "host" das Attribut "appBase" anpassen. Die Auslieferung ist
<source lang="xml>
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="false">
</source>
stattdessen könnten Sie z.B. schreiben
<source lang="xml>
<Host name="localhost"  appBase="/opt/superx/webapps"
            unpackWARs="true" autoDeploy="false">
</source>
 
Achtung: Der Tomcat-Dienst der Distribution muss unter der Kennung "tomcat" laufen. Wenn Sie für SuperX z.B. mit der Kennung "superx" arbeiten und den webapps-Ordner z.B. in /home/superx/webserver/tomcat/webapps nutzen, müssen Sie
* Den User superx der Gruppe tomcat hinzufügen:
usermod -G tomcat -a superx
* Die Eigentümerschaft des webapps-Ordner auf die Gruppe "tomcat" ändern:
chown -R superx:tomcat  /home/superx/webserver/tomcat/webapps
* Speziell im Ordner WEB-INF/logs benötigt die Gruppe tomcat auch Schreibrecht:
chmod -R g+rw /home/superx/webserver/tomcat/webapps/superx/WEB-INF/logs
 
Wenn Sie als User superx neue Dateien anlegen müssen Sie die obigen Kommandos wiederholen, damit Tomcat Schreibrecht bekommt. Ggf. automatisieren Sie dies mit einem Cronjob. Alternativ tragen Sie in der Shell (z.B. in der Datei ~/.bashrc) das Kommando ein:
  #Full access to user and group, none for others:
  umask u=rwx,g=rwx,o=
  umask u=rwx,g=rwx,o=
Damit haben neue Dateien direkt die Gruppenrechte, die Tomcat benötigt.
Die konkrete Gruppenkennung und die Eigentümerschaft richten sich nach der Installation. Beachten Sie auch die Hinweise für [[#Tomcat_und_Kettle|Tomcat und Kettle]].


==Tomcat und Kettle==
==Tomcat und Kettle==
Sie sollten im Homeverzeichnis des Users, der den Tomcat startet, den Ordner ".kettle" anlegen, mit der Datei "kettle.properties". Diese Datei kann auch leer sein.
Im Homeverzeichnis des Benutzers, unter dem Tomcat läuft, sollte das Verzeichnis <code>.kettle</code> mit der Datei <code>kettle.properties</code> angelegt werden. Die Datei kann zunächst leer sein. Ermitteln Sie zuerst das Homeverzeichnis des Tomcat-Benutzers, z.B. mit
getent passwd tomcat
Liegt dieses bei Ubuntu unter <code>/var/lib/tomcat10</code>, können Sie als root Folgendes ausführen:
install -d -o tomcat -g tomcat /var/lib/tomcat10/.kettle
touch /var/lib/tomcat10/.kettle/kettle.properties
chown tomcat:tomcat /var/lib/tomcat10/.kettle/kettle.properties
{{Hinweis|Bei einer Distributionsaktualisierung sollte geprüft werden, ob das Homeverzeichnis des Tomcat-Benutzers weiterhin korrekt gesetzt ist.}}
 
=Tomcat manuell installieren=
=Tomcat manuell installieren=
Sie können auch spezielle Versionen von [https://tomcat.apache.org Tomcat] herunterladen und installieren. Oder sie laden das SuperX-Kernmodul Paket herunter, da ist ein aktueller Tomcat bereits enthalten. Speicherort wäre z.B. in /home/superx/webserver/tomcat.
Sie können auch spezielle Versionen von [https://tomcat.apache.org Tomcat] herunterladen und installieren. Oder Sie verwenden den im SuperX-Kernmodul mitgelieferten Tomcat. Speicherort ist z.B. <code>/home/superx/webserver/tomcat</code>.
Bei einer Neuinstallation bzw. einem Versionswechsel sollten Sie die Konfiguration der neuen Tomcat-Version als Ausgangspunkt verwenden. Kopieren Sie nicht einfach die kompletten alten Verzeichnisse <code>bin</code>, <code>lib</code> und <code>conf</code> darüber. Auch bisher benötigte Zusatzbibliotheken und Java-Optionen müssen auf Kompatibilität geprüft werden.
 
==Tomcat als Dienst==
==Tomcat als Dienst==
Damit Tomcat bei Systemstart automatisch hochfährt, und beim Herunterfahren kontrolliert gestoppt wird, muss man einen Dienst anlegen.  
Damit Tomcat beim Systemstart automatisch hochfährt und beim Herunterfahren kontrolliert gestoppt wird, kann man einen systemd-Dienst anlegen. Im Beispiel liegt SuperX unter <code>/home/superx</code> und Tomcat wird vom Benutzer <code>superx</code> gestartet. Für eine Installation aus der Linux-Distribution ist der Dienst in der Regel bereits vorhanden.
In modernen Linuxen geht das mit dem Tool "systemd", was wiederum kontrolliert wird durch den Kommandozeilen Befehl "systemctl".


Damit dieser als Dienst läuft, muss man Linux wie folgt konfigurieren: Nehmen wir als Beispiel, dass das Kernmodul unter /home/superx liegt und Tomcat vom User superx gestartet wird.
===Service-Scripte===
===Service-Scripte===
Zunächst legen wir als User superx im Verzeichnis tomcat/bin zwei Dateien an:
Zunächst legen wir als User <code>superx</code> im Verzeichnis <code>tomcat/bin</code> zwei Dateien an.
 
<code>startup_service.x</code>:
startup_service.x
  #!/bin/bash
  #
  # Startup script for Apache Tomcat with systemd
  # Startup script for Apache Tomcat with systemd
#
  set -e
  set -e
  # Load the service settings
  # Load the service settings
  . /home/superx/db/bin/SQL_ENV
  . /home/superx/db/bin/SQL_ENV
  CATALINA_BASE=/home/superx/webserver/tomcat
  export CATALINA_BASE=/home/superx/webserver/tomcat
  CATALINA_HOME=/home/superx/webserver/tomcat
  export CATALINA_HOME=/home/superx/webserver/tomcat
  CATALINA_TMPDIR=/home/superx/webserver/tomcat/temp
  export CATALINA_TMPDIR=/home/superx/webserver/tomcat/temp
  # Start Tomcat
  # Start Tomcat
  cd $CATALINA_BASE && exec $CATALINA_HOME/bin/catalina.sh run  
  cd "$CATALINA_BASE" && exec "$CATALINA_HOME/bin/catalina.sh" run
 
und <code>shutdown_service.x</code>:
und shutdown_service.x:
#!/bin/bash
  # Shutdown script for Apache Tomcat with systemd
  # Shutdown script for Apache Tomcat with systemd
#
  set -e
  set -e
  # Load the service settings
  # Load the service settings
  . /home/superx/db/bin/SQL_ENV
  . /home/superx/db/bin/SQL_ENV
  CATALINA_BASE=/home/superx/webserver/tomcat
  export CATALINA_BASE=/home/superx/webserver/tomcat
  CATALINA_HOME=/home/superx/webserver/tomcat
  export CATALINA_HOME=/home/superx/webserver/tomcat
  CATALINA_TMPDIR=/home/superx/webserver/tomcat/temp
  export CATALINA_TMPDIR=/home/superx/webserver/tomcat/temp
  # Stop Tomcat
  # Stop Tomcat
  cd $CATALINA_BASE && exec $CATALINA_HOME/bin/catalina.sh stop
  cd "$CATALINA_BASE" && exec "$CATALINA_HOME/bin/catalina.sh" stop
 
In der Datei <code>SQL_ENV</code> sollten die für Tomcat benötigten Umgebungsvariablen, insbesondere <code>JAVA_HOME</code> für Java 21 und die Java-Optionen, korrekt gesetzt bzw. exportiert werden. Der Pfad zu Java ist von der Distribution abhängig.
In der Datei SQL_ENV muss dann noch der Ordner /usr/bin in den PATH aufgenommen werden. Daher am besten am Anfang die Zeilen
PATH=$PATH:/usr/bin
export PATH
setzen. Außerdem muss im Kopf der SQL_ENV
#!/bin/bash
stehen, damit die Bash genommen wird.


===Dienst einrichten===
===Dienst einrichten===
Legen Sie als User root die Datei /etc/systemd/system/tomcat_superx.service an, mit dem Inhalt:
Legen Sie als User root die Datei <code>/etc/systemd/system/tomcat_superx.service</code> an, mit dem Inhalt:
  [Unit]
  [Unit]
  Description=Tomcat SuperX
  Description=Tomcat SuperX
After=syslog.target
  After=network.target
  After=network.target
After=postgresql.service
 
  [Service]
  [Service]
RestartSec=2s
  Type=simple
  Type=simple
  User=superx
  User=superx
Zeile 187: Zeile 130:
  ExecStart=/bin/bash /home/superx/webserver/tomcat/bin/startup_service.x
  ExecStart=/bin/bash /home/superx/webserver/tomcat/bin/startup_service.x
  ExecStop=/bin/bash /home/superx/webserver/tomcat/bin/shutdown_service.x
  ExecStop=/bin/bash /home/superx/webserver/tomcat/bin/shutdown_service.x
EnvironmentFile=/home/superx/db/bin/SQL_ENV
 
  [Install]
  [Install]
  WantedBy=multi-user.target
  WantedBy=multi-user.target
 
Die Gruppe <code>users</code> ist hier nur ein Beispiel und muss gegebenenfalls angepasst werden. Der Eintrag <code>EnvironmentFile=/home/superx/db/bin/SQL_ENV</code> wird nicht benötigt, da die Skripte die <code>SQL_ENV</code> bereits als Bash-Skript einlesen. systemd kann unter <code>EnvironmentFile</code> keine beliebigen Bash-Befehle ausführen.
Den Dienst aktivieren Sie dann mit  
Den Dienst aktivieren und starten Sie mit
systemctl daemon-reload
  systemctl enable tomcat_superx
  systemctl enable tomcat_superx
und starten ihn dann mit
  systemctl start tomcat_superx
  systemctl start tomcat_superx
Bei Problemen kann man die Fehlerausgabe anzeigen:
Den Status und die Logmeldungen können Sie prüfen mit
  journalctl -xe
  systemctl status tomcat_superx
Für die Logmeldungen nur des einen Dienstes (und diese dann "rückwärt" lesen) geben Sie ein:
  journalctl -u tomcat_superx -e
  journalctl -u tomcat_superx -r
Wenn Sie die Service-Datei ändern, müssen Sie danach <code>systemctl daemon-reload</code> ausführen. Den Dienst deaktivieren Sie mit
Wenn man die .service-Datei ändert, muss man die Dienste neu laden:
systemctl daemon-reload
 
Alle Dienste anzeigen können Sie mit
service --status-all
 
Den Dienst deaktivieren Sie mit  
  systemctl disable tomcat_superx
  systemctl disable tomcat_superx
 
{{Achtung|Ein Fallstrick: Wenn die <code>SQL_ENV</code> komplexe Bash-Kommandos enthält oder für einen systemd-Dienst ungeeignete Einstellungen setzt, kann der Dienststart scheitern. In diesem Fall kann eine separate, vereinfachte <code>TOMCAT_ENV</code> sinnvoll sein, die von den Startskripten eingelesen wird.}}
{{Achtung|Ein Fallstrick: ein Dienst kann Probleme machen, wenn die SQL_ENV zu komplexe Bash-Kommandos enthält. In diesem Falle müssen Sie eine abgespeckte TOMCAT_ENV erstellen, die nur die Variablen zuweist.}}
Für mögliche SELinux-Probleme bei Shell-Skripten in systemd-Diensten siehe [[Kern_Installation_Upgrade#SELinux_(Security-Enhanced_Linux)|SELinux im SuperX-Installationshandbuch]].


=Tomcat Logging=
=Tomcat Logging=
==Tomcat Logging mit systemd==
==Tomcat Logging mit systemd==
Normalerweise loggt Tomcat in das Verzeichnis
Je nach Installationsart erscheinen Tomcat-Meldungen im systemd-Journal oder in Dateien unter <code>$CATALINA_BASE/logs</code>. Bei einem manuell installierten Tomcat kann z.B. die Datei <code>catalina.out</code> vorhanden sein. Bei der Ubuntu-Distributionsinstallation sollte auch das systemd-Journal geprüft werden.
$CATALINA_BASE/logs/catalina.out
Alle Journalmeldungen anzeigen:
Ab Tomcat 9 aus der Linux Distribtion mit '''systemd''' als Service-Script gibt es diese Datei nicht mehr, die Logausgabe geht direkt ins Systemprotokoll. Dies müsssen Sie mit dem Kommando
  journalctl
  journalctl  
Die Meldungen eines bestimmten Tomcat-Dienstes anzeigen, z.B.:
Das Kommando kann auch auf Fehler filtern:
  journalctl -u tomcat10 -e
  journalctl -xe
  journalctl -u tomcat_superx -e
Sie können die Logmeldungen auch auf den Dienst tomcat9 einschränken, und dabei "rückwärts" lesen:
Die Meldungen live verfolgen:
  journalctl -u tomcat9 -r
  journalctl -u tomcat10 -f
Mit folgendem Kommando können Sie die Logdatei rückwärts abfragen und Zeiträume eingrenzen, z.B.:
{{Hinweis|Ab SuperX 5.1 bzw. HISinOne-BI 2023.12 werden SuperX-spezifische Logmeldungen in der Datei <code>$CATALINA_BASE/logs/superx.log</code> ausgegeben. Je nach Fehlerbild sind sowohl diese Datei als auch die Tomcat-/systemd-Meldungen relevant.}}
  journalctl -rb --since="today" --until="2020-08-19 10:00:00"
Weitere Details siehe manpage.
{{Hinweis|Wir finden das unpraktisch. Ab SuperX 5.1 bzw. HISinOne-BI 2023.12 wird die Logausgabe nicht mehr in system-log geschrieben, sondern in die Datei CATALINA_BASE/logs/superx.log}}


=Apache Anbindung=
=Apache Anbindung=
In Systemumgebungen, in denen bereits ein Webserver wie Apache läuft, bietet es sich an, den SuperX-Tomcat mit dem Webserver zu verbinden. Der Webserver kann so konfiguriert werden, dass Aufrufe zu http://<<Servername>>/superx direkt an Tomcat weitergeleitet werden können. Dies hat auch den Vorteil, dass die ungewöhnlichen Ports von Tomcat (8080 bzw. 8443) nicht in der Firewall freigegeben werden müssen. Außerdem kann die Verschlüsselung vom Apache durchgeführt werden, und es kann ein Load-Balaning eingeführt werden (Lastausgleich zwischen 2 Tomcat-Servern, gesteuert vom Apache). Wir empfehlen daher generell die Anbindung von Tomcat an den Apache für einen Produktivbetrieb.
In Systemumgebungen, in denen bereits ein Webserver wie Apache läuft, bietet es sich an, den SuperX-Tomcat mit dem Webserver zu verbinden. Der Webserver kann so konfiguriert werden, dass Aufrufe zu <code>https://superx.example.de/superx/</code> an Tomcat weitergeleitet werden. Dadurch müssen die internen Tomcat-Ports nicht nach außen freigegeben werden. Die HTTPS-Verschlüsselung und die Zertifikatsverwaltung können vom Apache übernommen werden. Wir empfehlen daher generell die Anbindung von Tomcat an Apache für einen Produktivbetrieb.
Für die Anbindung gibt es zwei Apache-Module bzw. Möglichkeiten:
Für die Verbindung zwischen Apache und Tomcat gibt es verschiedene Möglichkeiten:
*ProxyPass
* '''HTTP über Port 8080 mit ProxyPass (empfohlen)'''
*Mod-JK
* '''AJP über Port 8009 mit ProxyPass (Alternative)'''
==ProxyPass==
* Mod-JK für bestehende Installationen
Unter Red Hat kann es mit der bisherigen empfohlenen Anbindungsmethode ‘mod_jk’ schwierigkeiten geben. Mit ProxPass hat es gut funktioniert und die Konfiguration war wesentlich einfacher.
Wenn Apache und Tomcat auf demselben Server laufen, sollten die internen Connectoren nur an <code>127.0.0.1</code> gebunden werden. Bei getrennten Servern muss die Verbindung über ein vertrauenswürdiges und entsprechend geschütztes Netzwerk erfolgen.
Das Modul ‘ProxyPass’ muss installiert und im Apache aktiviert / geladen werden. Danach muss in der Apache Konfiguration folgende Zeile für den AJP Konnector ergänzt werden :
ProxyPass "/superx" "ajp://<<TOMCAT_IP>>:8009/superx"
Falls die Verbindung zu dem Tomcat über den Standard-Port laufen soll wird folgende Zeile benötigt:
ProxyPass "/superx" "https://<<TOMCAT_IP>>:8443/superx"
Das war schon alles. Eine Empfehlung können wir mangels fehlender Erfahrung noch nicht geben.
==Mod-JK==
Das Apache Modul '''mod_jk''' ist schon sehr lange im Einsatz und über die jew. Linux Distribution relativ leicht installierbar. Man kann es aber auch manuell installieren. "JK" steht übrigens für "Jakarta", das ist der ursprüngliche Name des Apache-Produkts für Java-basierte Webanwendungen, also gewissermaßen der Vorläufer von Tomcat. Im folgenden beschreiben wir die Installation, und danach die Einrichtung.
===Mod-JK unter Ubuntu Linux===
Bei Debian / Ubuntu wird das Paket installiert mit
apt-get install libapache2-mod-jk
Danach  muss man es noch aktivieren mit
a2enmod jk
Danach ist das Modul im Apache verfügbar.


===Mod-JK unter SuSE Linux===
==ProxyPass über HTTP (Port 8080)==
Bei Suse wird das Paket installiert mit
Wir empfehlen die HTTP-Anbindung über <code>mod_proxy</code> und <code>mod_proxy_http</code>. Sie ist einfach zu konfigurieren, verwendet das übliche HTTP-Protokoll und benötigt keinen AJP-Connector. AJP bietet zusätzliche Zugriffsmöglichkeiten auf Tomcat-interne Informationen und benötigt deshalb besondere Absicherung. HTTP über localhost ist damit bei gleicher Zugangsbeschränkung die einfacher zu betreibende Variante. Der interne HTTP-Verkehr ist dabei nicht verschlüsselt; dieses Beispiel gilt deshalb für Apache und Tomcat auf demselben Server.
zypper -n in -l apache2-mod_jk
Unter Ubuntu aktivieren Sie die benötigten Apache-Module mit
Die Konfiguration kann man in /etc/tomcat/conf.d ablegen, also z.B. die Datei  superx_mod_jk.conf.(s.u.).
  a2enmod proxy proxy_http ssl
===Einrichtung Mod-JK im mit SuperX ausgelieferten Tomcat===
Nun kann die Konfiguration des Mod-JK beginnen, was im folgenden Kapitel beschrieben ist. In der SuperX-Distribution sind die Tomcat-spezifischen Dateien für die Anbindung an den Apache via mod_jk bereits enthalten, es müssen lediglich ein paar Anpassungen gemacht werden:
* Teil der SuperX-Distribution ist ein Konfigurationsbeispiel mit dem Namen $SUPERX_DIR/webserver/tomcat/conf/superx_mod_jk.conf.sam. dieses können Sie umbenennen nach superx_mod_jk.conf, und in der Datei den Pfad für das mod_jk-Modul (mod_jk.so) anpassen. Ausserdem kann der Logging-Level festgelegt werden (Werte: "debug", "warning", "error", im Echtbetrieb empfehlen wir "error").
* Bei manchen mod_jk- oder Apache Versionen muss man noch die Zeile
JkMountCopy All
hinzufügen, siehe [http://mail-archives.apache.org/mod_mbox/tomcat-users/200904.mbox/%3C49E508BA.7030508@ice-sa.com%3E Hyperlink].
* In der Datei $SUPERX_DIR/webserver/tomcat/conf/workers.properties muss der Parameter
workers.tomcat_home
auf den richtigen Pfad gesetzt werden. Ausserdem muss der richtige Pfad für workers.java_home gesetzt werden, sowie der Pfad-Demiliter ps für das Betriebssystem ("/" für Unix, "\" für Win, ":" für Mac)
* Wenn Sie den Apache auf einem separaten Rechner betreiben, dann müssen Sie beim Parameter worker.ajp13.host nicht "localhost", sondern den Rechnernamen / IP-Nr. des Tomcat-Servers eintragen.
* Danach fügen Sie am Ende der Apache-Konfigurationsdatei (unter SuSE Linux z.B. /etc/httpd/httpd.conf) die Zeile
Include /home/superx/webserver/tomcat/conf/superx_mod_jk.conf)
ein (oder stellen das Script nach /etc/apache2/conf.d dann wird es automatisch gelesen). Außerdem müssen Sie ggf. die Umgebungsvariable DirectoryIndex auf index.htm setzen (nicht nur index.html), da die Startseite in den Verzeichnissen immer index.htm heißt.
*Es wird empfohlen, einen 10 Min-Timeout zu setzen, dazu in der worker.properties
worker.ajp13.connection_pool_timeout=600
und in tomcat/conf/server.xml bei 8009 Konnektor connectionTimeout="60000" (http://tomcat.apache.org/connectors-doc/generic_howto/timeouts.html)
* Wenn eine Firewall zwischen den Rechnern liegt, könnte diese möglicherweise Verbindungen kappen, dann ist es gut, wenn man
worker.ajp13.session_keepalive=1
setzt. (http://tomcat.apache.org/connectors-doc/generic_howto/timeouts.html Firewall Connection Dropping)
* Danach starten Sie Apache neu (apachectl restart).
**In der Datei tomcat/conf/server.xml auf dem Tomcat-Rechner kann dann der http-Connector 8080 auskommentiert werden, und der Apache-Connector ajp13 kann benutzt werden; standardmäßig geht dieser über den Port 8009. Dieser Connector ist bei Auslieferung von SuperX aktiviert.
** Dann starten Sie zuerst Tomcat neu, und dann den Apache. Danach müsste auf dem Webserver das Verzeichnis superx gemounted sein, und alle Anfragen mit der Endung *.jsp bzw. in das servlet-Verzeichnis gehen zu Tomcat.  
* Sobald Tomcat so an den Apache angebunden ist, kann auch die Verschlüsselung über den Apache laufen. Wenn das Apache-Modul mod_ssl installiert und konfiguriert ist, dann werden auch automatisch anhand des Präfixes http://.. und https://... Anfragen an Tomcat weitergeleitet.
===Einrichtung Mod-JK unter Suse Linux===
Das folgende Vorgehen wurde getestet unter SUSE Linux Enterprise Server 12 SP3 (x86_64), d.h. Apache 2.4 und Tomcat 8:


Wenn Sie den in Suse Linux eingebauten Apache und Tomcat nutzen, gehen Sie wie folgt vor (Beispielwebanwendung liegt in /usr/share/tomcat/superx/webserver/tomcat/webapps/superx):
===Tomcat konfigurieren===
Kopieren Sie die Dateien superx_mod_jk.conf.sam und workers.properties.sam nach /etc/tomcat/conf.d/superx_mod_jk.conf bzw.  workers.properties.
In der <code>server.xml</code> (bei Ubuntu <code>/etc/tomcat10/server.xml</code>) richten Sie den HTTP-Connector ein:
Setzen Sie in der Datei  superx_mod_jk.conf:
<source lang="xml">
LoadModule jk_module /usr/lib64/apache2/mod_jk.so
<Connector port="8080" protocol="HTTP/1.1"
JkWorkersFile /etc/tomcat/conf.d/workers.properties
          address="127.0.0.1"
JkLogFile /var/log/tomcat/mod_jk.log
          connectionTimeout="20000"
JkLogLevel error
          URIEncoding="UTF-8"
JkMountCopy All
          proxyName="superx.example.de"
JkMount /*.jsp ajp13
          proxyPort="443"
JkMount /servlet/* ajp13
          scheme="https"
Alias /superx "/usr/share/tomcat/superx/webserver/tomcat/webapps/superx"
          secure="true" />
<Directory "/usr/share/tomcat/superx/webserver/tomcat/webapps/superx">
</source>
    Options Indexes FollowSymLinks
Der Wert <code>proxyName</code> muss dem öffentlich verwendeten Hostnamen entsprechen. Die Angaben <code>proxyPort="443"</code>, <code>scheme="https"</code> und <code>secure="true"</code> teilen Tomcat mit, dass die Anwender die Webanwendung über HTTPS am Apache aufrufen. Diese Konfiguration ist für eine ausschließlich über HTTPS erreichbare SuperX-Anwendung mit einem festen öffentlichen Hostnamen gedacht.
</Directory>
JkMount /superx/servlet/* ajp13
JkMount /superx/* ajp13
<Location "/superx/WEB-INF/">
    AllowOverride None
    Require all denied
</Location>
<Location "/superx/META-INF/">
    AllowOverride None
  Require all denied
</Location>


Setzen Sie in der Datei  workers.properties:
===Apache konfigurieren===
workers.tomcat_home=/usr/share/tomcat
Im Apache-VirtualHost für HTTPS (unter Ubuntu z.B. in <code>/etc/apache2/sites-available/superx.conf</code>) ergänzen Sie die Weiterleitung:
workers.java_home=/usr/lib64/jvm
<source lang="apache">
ps=/
<VirtualHost *:443>
worker.list=ajp13
    ServerName superx.example.de
worker.ajp13.port=8009
    SSLEngine on
  worker.ajp13.host=localhost
    SSLCertificateFile /etc/ssl/certs/superx.crt
  worker.ajp13.type=ajp13
    SSLCertificateKeyFile /etc/ssl/private/superx.key
  worker.ajp13.lbfactor=1
    ProxyRequests Off
    ProxyPass "/superx" "http://127.0.0.1:8080/superx"
    ProxyPassReverse "/superx" "http://127.0.0.1:8080/superx"
</VirtualHost>
</source>
Die Zertifikatspfade sind Beispiele. Bestehende VirtualHosts werden entsprechend ergänzt; die SSL-Konfiguration muss nicht doppelt angelegt werden. <code>ProxyPass</code> leitet die Anfragen an Tomcat weiter, <code>ProxyPassReverse</code> passt bestimmte vom Backend gelieferte HTTP-Weiterleitungen an. URLs, die eine Webanwendung direkt in HTML erzeugt, werden dadurch nicht automatisch korrigiert.
Nach den Änderungen prüfen Sie die Konfiguration und starten die Dienste neu:
  apache2ctl configtest
  systemctl restart tomcat10
  systemctl reload apache2
Der Dienstname muss gegebenenfalls an die eigene Installation angepasst werden.


Dann binden Sie die Dateien in den Apache ein, indem Sie in der Datei /etc/sysconfig/apache2 die Zeile
===Falsche localhost-Adressen in DBForms bzw. HTML-Ausgaben===
APACHE_CONF_INCLUDE_FILES="/etc/tomcat/conf.d/superx_mod_jk.conf"
Wenn die öffentliche SuperX-Adresse über HTTPS aufgerufen wird, Tomcat intern aber nur den HTTP-Aufruf über <code>localhost:8080</code> erkennt, können Webanwendungen fehlerhafte absolute URLs erzeugen. Das kann z.B. bei DBForms zu einem solchen HTML-Eintrag führen:
ergänzen.
<source lang="html">
Danach starten Sie den Apache mit
<base href="http://localhost:8080/superx/" />
rcapache2 restart
</source>
Logmeldungen des mod_jk liegen in /var/log/tomcat/mod_jk.log.  
Der Browser des Anwenders versucht dann, Ressourcen von seinem eigenen Rechner (<code>localhost</code>) zu laden. Bilder, Skripte oder Verweise funktionieren deshalb gegebenenfalls nicht. Mit den oben beschriebenen Connector-Attributen <code>proxyName</code>, <code>proxyPort</code>, <code>scheme</code> und <code>secure</code> kann Tomcat den korrekten öffentlichen Servernamen und das HTTPS-Schema an die Webanwendung melden.
Damit der Apache Server beim Booten hochfährt, geben Sie ein:
{{Hinweis|Das Element <code>&lt;Host name="localhost"&gt;</code> in der Tomcat-<code>server.xml</code> bezeichnet einen virtuellen Tomcat-Host und muss dafür nicht in den öffentlichen DNS-Namen umbenannt werden. Entscheidend sind die für den Proxy verwendeten Connector-Einstellungen.}}
chkconfig --set apache2 on
Wenn mehrere öffentliche Hostnamen oder unterschiedliche Zugriffsschemata benötigt werden, reicht ein fest eingetragener <code>proxyName</code> gegebenenfalls nicht aus. Dann kann eine Konfiguration mit vertrauenswürdigen Proxy-Headern und der Tomcat-<code>RemoteIpValve</code> sinnvoll sein. Der Proxy muss solche Header kontrolliert setzen; unkontrolliert vom Client übernommene Header sind aus Sicherheitsgründen ungeeignet.
===Einrichtung Mod-JK unter Ubuntu Linux===
Das folgende Vorgehen wurde getestet unter Ubuntu Linux Server 22.04  (x86_64), d.h. Apache 2.4 und Tomcat 9:
Installieren Sie Java OpenJDK 11, Tomcat 9, Apache 2.4 und mod_jk:
apt-get update
apt-get install -y openjdk-11-jdk
apt-get install -y tomcat9
apt-get install -y apache2 libapache2-mod-jk
Das mod_jk wird automatisch aktiviert, die Konfiguration landet defaultmäßig in der Datei
/etc/apache2/mods-available/mod_jk.conf
Entfernen Sie dann die <location>-Elemente jk-manager und jk-status.
Wenn Sie den in Ubuntu Linux eingebauten Apache und Tomcat nutzen, gehen Sie wie folgt vor (Beispielwebanwendung liegt in /var/lib/tomcat9/webapps/superx):


Alias /superx "/var/lib/tomcat8/webapps/superx"
==ProxyPass über AJP (Port 8009)==
<Directory "/var/lib/tomcat8/webapps/superx">
Alternativ kann die Verbindung über das AJP-Protokoll erfolgen. Dafür benötigen Sie beim Apache das Modul <code>mod_proxy_ajp</code> und auf Tomcat-Seite einen AJP-Connector. AJP ist weiterhin unterstützt, sollte aber nur in einem vertrauenswürdigen Netzwerk oder lokal verwendet werden. Das Secret schützt vor unberechtigten AJP-Verbindungen, verschlüsselt die Übertragung jedoch nicht.
    Options Indexes FollowSymLinks
Unter Ubuntu aktivieren Sie das Modul mit
  </Directory>
  a2enmod proxy proxy_ajp
JkMount /superx/servlet/* ajp13
In der Tomcat-<code>server.xml</code>:
JkMount /superx/* ajp13
<source lang="xml">
<Location "/superx/WEB-INF/">
<Connector protocol="AJP/1.3"
    AllowOverride None
          address="127.0.0.1"
    deny from all
          port="8009"
</Location>
          secretRequired="true"
<Location "/superx/META-INF/">
          secret="HIER_EIN_LANGES_ZUFAELLIGES_SECRET_EINTRAGEN"
    AllowOverride None
          URIEncoding="UTF-8" />
    deny from all
</source>
</Location>
Im Apache-VirtualHost wird anstelle der HTTP-Weiterleitung die AJP-Weiterleitung verwendet:
JkMountCopy All
<source lang="apache">
Setzen Sie in der Datei  /etc/libapache2-mod-jk/workers.properties
ProxyPass "/superx" "ajp://127.0.0.1:8009/superx" secret=HIER_EIN_LANGES_ZUFAELLIGES_SECRET_EINTRAGEN
workers.tomcat_home=/var/lib/tomcat9
</source>
workers.java_home=/usr/lib/jvm/java-11-openjdk-amd64
Beide Secrets müssen übereinstimmen und dürfen nicht als öffentliche Beispielwerte übernommen werden. Der Parameter <code>secret</code> bei <code>ProxyPass</code> ist ab Apache 2.4.42 verfügbar. Auf beiden Seiten sollte die Konfiguration vor unberechtigtem Zugriff geschützt werden. Eine parallele HTTP- und AJP-Weiterleitung für denselben Pfad ist nicht erforderlich.
ps=/
Wenn Apache auf einem separaten Server läuft, muss statt <code>127.0.0.1</code> die geeignete interne IP-Adresse des Tomcat-Servers verwendet werden. Zusätzlich müssen Firewall und Netzabsicherung passend konfiguriert werden.
worker.list=ajp13
Weitere Details siehe [https://tomcat.apache.org/tomcat-10.1-doc/config/ajp.html Tomcat AJP Connector].
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1
worker.ajp13.secret=geheim


Danach starten Sie den Apache mit
==Mod-JK==
  /etc/init.d/apache2 start
Das Apache-Modul <code>mod_jk</code> wird weiterhin für bestehende AJP-Installationen unterstützt. Für neue SuperX-Installationen empfehlen wir jedoch die oben beschriebene Anbindung über <code>ProxyPass</code>. Unter Ubuntu können Sie Mod-JK bei Bedarf installieren und aktivieren mit
Logmeldungen des mod_jk liegen in  
  apt-get install -y libapache2-mod-jk
  /var/log/apache2/mod_jk.log.
a2enmod jk
Der AJP-Connector in Tomcat benötigt dieselben Sicherheitsvorgaben wie bei <code>mod_proxy_ajp</code>. In der <code>workers.properties</code> wird der Worker z.B. so eingerichtet:
worker.list=superx_tomcat
worker.superx_tomcat.type=ajp13
worker.superx_tomcat.host=127.0.0.1
worker.superx_tomcat.port=8009
worker.superx_tomcat.secret=HIER_EIN_LANGES_ZUFAELLIGES_SECRET_EINTRAGEN
Die Weiterleitung kann in der Apache-Konfiguration so erfolgen:
  JkMount /superx/* superx_tomcat
JkMount /superx superx_tomcat
{{Hinweis|Falls bereits eine Mod-JK-Konfiguration aus dem SuperX-Kernmodul verwendet wird, können Sie diese weiter pflegen. Alte Beispielkonfigurationen mit einem ungeschützten AJP-Port oder unnötigen Apache-Dateisystem-Aliases sollten jedoch nicht unverändert übernommen werden.}}


===Einrichtung Mod-JK  Load Balancing===
==Apache und Tomcat Sicherheit==
Mit dem eingerichteten mod_jk lässt sich recht einfach ein Lastausgleich zwischen mehreren Tomcats oder eine Trennung von Apache und Tomcat auf zwei Server implementieren. Die Konfiguration findet statt im Tomcat-Konfigurationsverzeichnis $SUPERX_DIR/webserver/tomcat/conf.  
Für den Produktivbetrieb empfehlen wir folgende Grundeinstellungen:
Dazu muss in der Datei workers.properties ein zweiter Worker eingerichtet werden, siehe Beispieldatei workers.properties.lb.sam in der SuperX-Distribution. Außerdem muss in der server.xml auf dem Rechner, auf dem der Apache läuft, ein zweiter AJP-Connector eingerichtet werden, z.B. am Port 8010.  
* HTTPS wird nach außen am Apache bereitgestellt. Die internen Ports 8080 bzw. 8009 werden nicht über die öffentliche Firewall freigegeben.
* Bei Betrieb auf demselben Server werden die Tomcat-Connectoren an <code>127.0.0.1</code> gebunden.
* Nicht benötigte Connectoren werden in der <code>server.xml</code> deaktiviert.
* Bei AJP wird ein eigenes, langes Secret verwendet; AJP sollte nicht über ungeschützte Netze betrieben werden.
* Der Tomcat-Dienst läuft ohne Root-Rechte. Konfigurationsdateien und die Webanwendung erhalten nur die benötigten Dateirechte.
* Apache, Tomcat und Java werden regelmäßig mit Sicherheitsupdates versorgt.
* Bei SELinux-bedingten Verbindungsproblemen oder Problemen mit systemd-Shell-Skripten siehe [[Kern_Installation_Upgrade#SELinux_(Security-Enhanced_Linux)|SELinux (Security-Enhanced Linux) im SuperX-Installationshandbuch]].
Weitere Tipps zur Tomcat-Sicherheit siehe [https://tomcat.apache.org/tomcat-10.1-doc/security-howto.html Tomcat Security How-To].


Auszug aus
der server.xml des Apache-Rechners
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector className="org.apache.ajp.tomcat4.Ajp13Connector"
              port="8009" minProcessors="5" maxProcessors="75"
              acceptCount="10" debug="0"/>
<Connector className="org.apache.ajp.tomcat4.Ajp13Connector"
              port="8010" minProcessors="5" maxProcessors="75"
              acceptCount="10" debug="0"/>
Der AJP-Connector am Port 8010 muss dann auf dem zweiten Tomcat-Server eingetragen werden (nur dieser, nicht der 8009er).
Danach kann in der mod_jk-Konfigurationsdatei ein Lastausgleich eingerichtet werden (siehe Beispieldatei superx_mod_jk_lb.conf.sam).
=Einrichtung SSL=
=Einrichtung SSL=
==SSL Varianten==
==SSL Varianten==
Sie können Tomcat selbst [[Kernmodul_Tomcat-Einrichtung#SSL_im_Webserver|SSL]] verschlüsseln lassen, aber normalerweise wird die Verschlüsselung im [[Kernmodul_Tomcat-Einrichtung#SSL_im_Webserver|Webserver]] eingerichtet.
Sie können SSL/TLS direkt in Tomcat einrichten, normalerweise wird die Verschlüsselung aber im [[#SSL_im_Webserver|Webserver]] konfiguriert. Bei einer Apache-Tomcat-Anbindung empfehlen wir, HTTPS beim Apache zu beenden und den internen Tomcat-Connector nur lokal erreichbar zu machen.


==SSL im Webserver==
==SSL im Webserver==
=== Einrichten von SSL beim Apache 2.x unter SuSE Linux ===
Unter Ubuntu benötigen Sie das Apache-Modul <code>ssl</code>. Es kann aktiviert werden mit
 
 
 
Das Modul '''ssl''' ist im Apache 2.x nicht mehr separat zu installieren, sondern bereits im Lieferumfang enthalten, das Modul muss nur in den entsprechenden LoadModule und Include-Abschnitten geladen werden.
 
Wir führen alle Schritte als user root durch, und gehen z.B. davon aus, dass wir uns im Verzeichnis /root befinden.
 
Zunächst muss ein Zertifikat erzeugt werden. Das öffentliche CA-Zertifikat liegt z.B. in /root/demoCA/cacert.pem und der private Schlüssel liegt in /root/demoCA/private/cakey.pem..
 
Nun werden die Schlüssel dem Apache2 bekannt gemacht. Die einzelnen Konfigurationsparameter werden bei SuSE Linux über die Sysconfig gesetzt:
 
 
SuSE-typisch wird die Konfiguration in einer Datei im Verzeichnis /etc/sysconfig abgelegt, nämlich in apache2. Dort setzen Sie in der Direktive
APACHE_CONF_INCLUDE_FILES="/home/superx/webserver/tomcat/conf/superx_mod_jk.conf /etc/apache2/vhosts.d/myhost-ssl.conf"
die Tomcat-Anbindung und den Virtuellen SSL-Host. Letzteren konfigurieren Sie am besten, indem Sie die Vorlage /etc/apache2/vhosts.d/vhost-ssl.template kopieren, z.b. wie oben nach myhost-ssl.conf.
Weiter unten in /etc/sysconfig/apache2 setzen Sie die Direktive
APACHE_SERVER_FLAGS="SSL"
Damit werden in verschiedenen anderen conf-Dateien die Abfragen <ifDefine SSL> positiv aufgelöst und die jeweiligen Direktiven darin werden aktiviert.
Nach dem Ändern der Datei /etc/sysconfig/apache2 müssen Sie als User root das Script SuSEconfig ausführen.
 
 
Bei anderen Linux-Distributionen entfällt die sysconfig. Auch unabhängig von der Distribution wird beim Apache2 nicht mehr die gesamte Konfiguration in einer großen httpd.conf gesammelt, sondern in separaten conf-Dateien. Bei virtuellen Hosts zum Beispiel befinden sich die Konfigurationen in Dateien mit der Endung *.conf im Verzeichnis vhosts.d. Der Startpunkt ist aber immer die httpd.conf (standardmäßig in /etc/apache2).
 
Wenn Sie keine Virtual Hosts nutzen, dann können Sie den Abschnitt, der im Konfigurationsbeispiel /etc/apache2/vhosts.d/vhost-ssl.template beschrieben ist auch in der Datei /etc/apache2/default-server.conf einfügen:
 
/etc/apache2/default-server.conf
##
## SSL Virtual Host Context
##
<VirtualHost _default_:443>
      # General setup for the virtual host
      DocumentRoot "/srv/www/htdocs"
      ServerName 192.168.0.108:443
      #ServerAdmin webmaster@example.com
      ErrorLog /var/log/apache2/error_log
      TransferLog /var/log/apache2/access_log
      #  SSL Engine Switch:
      #  Enable/Disable SSL for this virtual host.
      SSLEngine on
      #  SSL Cipher Suite:
      #  List the ciphers that the client is permitted to negotiate.
      #  See the mod_ssl documentation for a complete list.
      SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
      #  Server Certificate:
      #  Point SSLCertificateFile at a PEM encoded certificate. If
      #  the certificate is encrypted, then you will be prompted for a
      #  pass phrase. Note that a kill -HUP will prompt again. Keep
      #  in mind that if you have both an RSA and a DSA certificate you
      #  can configure both in parallel (to also allow the use of DSA
      #  ciphers, etc.)
      '''SSLCertificateFile /root/demoCA/cacert.pem'''
      #SSLCertificateFile /etc/apache2/ssl.crt/server.crt
      #SSLCertificateFile /etc/apache2/ssl.crt/server-dsa.crt
      #  Server Private Key:
      #  If the key is not combined with the certificate, use this
      #  directive to point at the key file. Keep in mind that if
      #  you've both a RSA and a DSA private key you can configure
      #  both in parallel (to also allow the use of DSA ciphers, etc.)
      '''SSLCertificateKeyFile /root/demoCA/private/cakey.pem'''
      #SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
      #SSLCertificateKeyFile /etc/apache2/ssl.key/server-dsa.key
...
 
Danach müssen Sie in /etc/sysconfig/apache2 die Systemvariable HTTPD_START_TIMEOUT auf einen sinnvollen Wert setzen, z.B. 10. Danach wie immer SuSEconfig ausführen.
 
Sie haben dann beim Start des Apache 10 Sek. Zeit, dass CA-Passwort einzugeben.
 
Wenn sie wünschen, dass der Apache beim Booten ohne Passwort-Abfrage startet, dann müssen Sie das CA-Passwort löschen und die Leserechte für den privaten Schlüssel ändern (nur root und der Apache-Daemon haben Leserecht)<sup><ref><blockquote> Auch in der offiziellen Doku von mod_ssl wird dies empfohlen, mit dem Zusatz,dass nur root und der apache-daemon diese Datei lesen darf.
http://www.modssl.org/docs/2.0/#FAQ-nopass
</blockquote></ref></sup>. Dies ist allerdings ein Sicherheitsrisiko; der Server wird leichter kompromittierbar, wenn ein Hacker auf den Rechner kommt und die Datei lesen kann, kann er den Schlüssel missbrauchen. Unserer Erfahrung nach ist aber nur dieser Weg gangbar, denn bei einem Reboot nach Stromausfall würde der gesamte Webserver sonst nicht laufen!
 
Wir geben als root im Verzeichnis /root/demoCA/private ein:
 
openssl rsa -in cakey.pem -out cakey2.pem
 
(1x mit der Passphrase bestätigen).
 
Dann wird ein Schlüssel ohne Passphrase erzeugt. Wenn wir diesen dann wiederum in /etc/httpd/httpd.conf eintragen:
 
  #SSLCertificateKeyFile /root/demoCA/private/cakey.pem
  SSLCertificateKeyFile /root/demoCA/private/cakey2.pem
 
Dann startet der Apache ohne Passwortabfrage. In diesem Fall kann man auch die Variable HTTPD_START_TIMEOUT auf 1 zurücksetzen.
 
 
 
 
Wenn Sie Ihr Zertifikat bei einer Zertifizierungstelle signieren lassen möchten, müssen eine [[#2.1.7.2.Erzeugen eines Zertifikat-Request für eine Zertifizierungsstelle|outline|Zertifizierungsanfrage]] erstellen.
 
Mit dem oben erstellten CA-Zertifikat können Sie Ihr http-Zertifikat folgendermaßen selbst signieren:
 
/usr/share/ssl/misc/CA.sh -sign
 
Es wird eine Datei newcert.pem erzeugt. Nachdem Sie nun ein signiertes Zertifikat für Ihre Anwendung erstellt haben, müssen Sie dieses nur noch in das entsprechende Verzeichnis kopieren und in der Konfigurationsdatei eintragen. Der Apache erwartet den privaten Schlüssel in einer separaten Datei, in solchen Fällen können Sie den privaten Schlüssel wie folgt extrahieren
 
openssl rsa -in newreq.pem -out newkey.pem
 
=== Einrichten von SSL beim Apache 2.x unter Ubuntu Linux ===
 
Zunächst erzeugen Sie ein Zertifikat:
 
mkdir /etc/apache2/ssl
openssl req -x509 -nodes -days 1095 -newkey rsa:2048 -out /etc/apache2/ssl/server.crt -keyout /etc/apache2/ssl/server.key
 
Das Zertifikat binden Sie in der conf-Datei ein, defaultmäßig /etc/apache2/sites-enabled/000-default.conf:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
</VirtualHost>
</IfModule>
 
Danach aktivieren Sie SSL mit  
 
  a2enmod ssl
  a2enmod ssl
Sie können unter Ubuntu auch den Apache ssl-virtual host aktivieren
Im HTTPS-VirtualHost wird das Zertifikat eingebunden, z.B.:
 
<source lang="apache">
a2ensite default-ssl.conf
<VirtualHost *:443>
 
    ServerName superx.example.de
Dann können Sie den Port 80 auf den Port 443 umleiten:
    SSLEngine on
 
    SSLCertificateFile /etc/ssl/certs/superx.crt
<VirtualHost *:80>
    SSLCertificateKeyFile /etc/ssl/private/superx.key
ServerName superx-cloud.de
    # Weitere Einstellungen, z.B. die ProxyPass-Anbindung, siehe oben.
ServerAlias www.superx-cloud.de
</VirtualHost>
Redirect / https://www.superx-cloud.de/
</source>
...
Zertifikat und Schlüssel müssen zum öffentlichen Hostnamen passen. Die Datei mit dem privaten Schlüssel darf nur von berechtigten Systembenutzern gelesen werden. Die tatsächlich verwendeten Pfade richten sich nach der Zertifikatsverwaltung vor Ort.
</VirtualHost>
Wenn zusätzlich Zugriffe auf Port 80 auf HTTPS umgeleitet werden sollen, kann ein eigener VirtualHost verwendet werden:
<IfModule mod_ssl.c>
<source lang="apache">
<VirtualHost *:443>
<VirtualHost *:80>
ServerAlias www.superx-cloud.de
    ServerName superx.example.de
ServerName superx-cloud.de
    Redirect permanent / https://superx.example.de/
...
</VirtualHost>
  </VirtualHost>
</source>
</IfModule>
Die Apache-Konfiguration prüfen und neu laden:
Und dann starten Sie Apache neu mit
  apache2ctl configtest
/etc/init.d/apache2 restart
systemctl reload apache2
 
 
====Zertifikate mit Let's encrypt ====
 
Mit ACME unter Linux lassen sich Zertifikate von der Initiative [https://community.letsencrypt.org/ Let's encrypt] signieren lassen. Die Zertifikate sind 3 Monate gültig, und haben eine eingebaute automatische Verlängerung implementieren. Gehen Sie dazu wie folgt vor:
 
Clonen Sie das Projekt von GitHub:
 
git clone https://github.com/Neilpang/acme.sh.git
 
Es wird ein Verzeichnis "acme.sh" erzeugt, mit dem Script "acme.sh". Dieses kopieren Sie als User root auf den Server, z.B. nach /root.
apt-get install socat
 
Dann installieren Sie den cronjob zum Aktualisieren:
 
./acme.sh --install
 
Der Cronjob prüft jede Nacht um 0:44 Uhr, ob das Zertifikat abgelaufen ist, wenn nicht wird es erneuert. Danach müssen Sie die Shell neu öffnen, und bei zerossl registrieren:
 
./acme.sh --register-account -m git@superx-cloud.de --server zerossl
 
Dann erzeugen Sie die Zertifikatsdateien, am Beispiel der Domain "superx-cloud.de" auf einem Ubuntu-Apache, d.h. documentRoot ist /var/www/html :
 
./acme.sh --issue -d superx-cloud.de -w /var/www/html
 
Voraussetzung ist das Apache auf Port 80 läuft und die Firewall auf Port 80 frei ist (iptables).
 
Dann installieren Sie die Dateien in den Apache, die Beispielverzeichnisse stammen aus der Ubuntu-Apache-Installation. Ggf. müssen Sie das Verzeichnis /etc/apache2/ssl noch erzeugen.
 
mkdir -p /etc/apache2/ssl
 
./acme.sh --install-cert -d superx-cloud.de --cert-file /etc/apache2/ssl/server.crt --key-file /etc/apache2/ssl/server.key --fullchain-file /etc/apache2/ssl.crt/server-ca.crt
 
 
SSL Aktivieren
 
a2enmod ssl
 
Apache ssl-virtual host ggf. aktivieren, unter Ubuntu:
  a2ensite default-ssl.conf


Darin
===Zertifikate mit Let's Encrypt===
Wenn der Server die Voraussetzungen für eine öffentliche ACME-Zertifikatsprüfung erfüllt, können Sie z.B. Let's Encrypt in Verbindung mit Certbot verwenden. Unter Ubuntu stehen dafür passende Pakete bereit:
apt-get install -y certbot python3-certbot-apache
Die konkrete Ausstellung, Einrichtung und automatische Verlängerung hängen davon ab, ob der Webserver öffentlich erreichbar ist und welche Zertifikatsverwaltung die Hochschule einsetzt. Weitere Informationen siehe [https://certbot.eff.org/ Certbot] und [https://letsencrypt.org/de/ Let's Encrypt].


ServerName  superx-cloud.de
SSLCertificateFile /etc/apache2/ssl/superx-cloud.de.crt
SSLCertificateKeyFile /etc/apache2/ssl/superx-cloud.de.key
SSLCertificateChainFile /etc/apache2/ssl/superx-cloud.de-fullchain.crt
SSLCACertificateFile /etc/apache2/ssl/superx-cloud.de-intermediate.crt
Danach starten Sie Apache neu.
==SSL im Tomcat==
==SSL im Tomcat==
Wenn Sie nicht die Möglichkeit die Verschlüsselung vom Webserver (Apache oder IIS) nutzen wollen, können Sie auch direkt im Tomcat verschlüsseln. Im folgenden eine Anleitung, wenn kein öffentlich bekanntes und signiertes Zertifikat genutzt werden soll. Große Teile wurden übernommen aus der Tomcat Dokumentation "ssl-howto.html".
Falls kein vorgeschalteter Apache-Webserver vorhanden ist, kann Tomcat HTTPS auch direkt bereitstellen. In Tomcat 10.1 wird die TLS-Konfiguration über <code>SSLHostConfig</code> und <code>Certificate</code> vorgenommen. Beispiel mit vorhandenem PKCS12-Keystore:
 
<source lang="xml">
Erzeugen Sie zunächst auf dem Applikationsserver einen Keystore mit dem Befehl
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true">
Windows:
    <SSLHostConfig>
%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA
        <Certificate certificateKeystoreFile="/home/superx/tomcat-keystore.p12"
UNIX:
                    certificateKeystoreType="PKCS12"
$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA
                    certificateKeystorePassword="HIER_DAS_KEYSTORE_PASSWORT" />
 
    </SSLHostConfig>
Die Parameter werden erfragt; wichtig ist, dass der erste Eintrag (Vor- und Nachname, COMMON NAME CN) der DNS-Name des Werbservers ist, z.B. superx.verwaltung.uni-duisburg.de. Als Passwort geben Sie beide Male z.B. "changeit" an (das ist nur ein Beispielpasswort für die Dokumentation, natürlich sollten Sie das Passwort ändern). Daraufhin wird ein Zertifikat erzeugt und in der Datei .keystore im Homeverzeichnis des Benutzers angelegt (unter Windows im Profiles-Verzeichnis, unter UNIX im home-Verzeichnis).
</Connector>
 
</source>
Das persönliche Zertifikat können Sie durch einen kommerziellen Zertifizierungsserver publizieren; zu Testzwecken können Sie auch ein selbsterstelltes Zertifikat erzeugen:
Der Keystore muss ein zum öffentlichen Hostnamen passendes Zertifikat und den privaten Schlüssel enthalten. Das Passwort im Beispiel muss durch einen eigenen sicheren Wert ersetzt und entsprechend geschützt werden. Bei direkt von außen erreichbarem Tomcat muss außerdem Port 8443 entsprechend abgesichert werden.
 
Eine ausführliche Anleitung zum Erzeugen bzw. Einbinden von Zertifikaten steht in der [https://tomcat.apache.org/tomcat-10.1-doc/ssl-howto.html offiziellen Tomcat-10.1-Dokumentation].
keytool -selfcert -alias tomcat -validity -Anzahl der Tage-
 
Danach ändern Sie die Datei $TOMCAT_HOME/conf/server.xml, indem Sie die Passage mit der SSL-Verschlüsselung (z.B. 8443) ent-kommentieren und den normalen Port (8080) auskommentieren.
 
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
              maxThreads="150" scheme="https" secure="true"
              clientAuth="false" sslProtocol="TLS"
'''keystorePass="changeit" keystoreFile="/home/superx/.keystore"'''
/>
Danach ist die Webanwendung über https://localhost:8443 statt http://localhost:8080 erreichbar. Sie müssen alle Links entsprechend ändern.
 
Das Zertifikat können Sie löschen, indem Sie auf der Kommandozeile eingeben:
keytool -delete -alias tomcat
 


===Signierung eines Zertifikats in Tomcat ===
=Wechsel von Tomcat 9 auf Tomcat 10=
Bei selbst signierten Zeritfikaten erscheint im Browser immer eine Sicherheitswarnung. Um dies zu vermeiden, muss man ein öffentliches Zertifikat von einem Trust Center erwerben. Dies kann man im Apache eintragen (s.u.), aber auch direkt im Tomcat, wenn Sie keinen Apache nutzen:
Mit Tomcat 10 wurden die Java-EE-Schnittstellen auf Jakarta EE umgestellt. Insbesondere wurden viele Paketnamen von <code>javax.*</code> nach <code>jakarta.*</code> geändert. Eine für Tomcat 9 bereitgestellte Webanwendung kann deshalb nicht ohne Weiteres mit Tomcat 10 verwendet werden. Für das SuperX-Kernmodul 6.0 empfehlen wir Tomcat 10.1 und Java 21.
* public key + private key erzeugen und die im keystore-file ablegen (der private key wird dabei mit passwd verschlüsselt):
Für den Versionswechsel muss insbesondere geprüft werden, ob die SuperX-Webanwendung und zusätzlich eingesetzte Bibliotheken für Tomcat 10 geeignet sind. Die Konfiguration der neuen Tomcat-Version sollte als Grundlage verwendet werden; die bisherigen Konfigurationsdateien sollten nicht vollständig übernommen werden. Auch bestehende Java-Optionen sowie die Apache-Anbindung müssen geprüft werden.
keytool -genkey -keyalg RSA -alias tomcat -keystore xxx.jks
{{Hinweis|Der Wechsel von Tomcat 9 auf Tomcat 10 wird wegen der umfangreicheren Umstellung in einem separaten Migrationsleitfaden behandelt. Bis dahin siehe [https://tomcat.apache.org/migration.html offizielle Tomcat-Migrationshinweise].}}
* certificate request generieren --> Datei server.csr und an die CA schicken:
keytool -certreq -keyalg RSA -file server.csr -keystore xxx.jks
* Den von der CA signierten public key = Serverzertifikat zurückbekommen --> Datei server.cer
* Zuerst das Zertifikat der CA (z.B. UTN-USERFirst-Network Applications, http://www.usertrust.com) downloaden und in den keystore einspielen:
keytool -import -file UTN.cer -alias tomcat -keystore xxx.jks
* Dann das neue Serverzertifikat in den keystore einspielen:
keytool -import -file server.cer -alias tomcat -keystore xxx.jks
* in der Tomcat-server.xml auf die keystore-Datei verweisen:
keystoreFile="<<Pfad zur xxx.jks-Datei>>" keystorePass="passwd"
**Wichtig: dasselbe passwd einsetzen wie unter 1. zum Verschlüsseln des private key benutzt wurde
* Restart Tomcat
* https-Verbindung zum Server, Zertifikat überprüfen - vertrauenswürdig?

Aktuelle Version vom 9. Oktober 2026, 06:16 Uhr

Installation und Einrichtung von tomcat.png Tomcat

Für das SuperX-Kernmodul 6.0 empfehlen wir Tomcat 10.1 mit Java 21. Die folgenden Beispiele beziehen sich überwiegend auf Ubuntu Linux 26.04. Bei anderen Linux-Distributionen sind die Konfigurationsschritte weitgehend identisch, die Paketnamen und Pfade können aber abweichen.

attention.svg Der Umstieg von Tomcat 9 auf Tomcat 10 ist kein reines Versionsupdate. Die Java-EE-Schnittstellen wurden von javax.* nach jakarta.* umgestellt. Für Tomcat 10 wird eine dafür geeignete SuperX-Webanwendung benötigt. Weitere Hinweise dazu stehen im Abschnitt Wechsel von Tomcat 9 auf Tomcat 10.

Tomcat aus Linux Distributionen

Da die Versionsnummern des Tomcat nicht immer zu SuperX passen, können Sie einen eigenen Tomcat bzw. den im SuperX-Kernmodul mitgelieferten Tomcat nutzen. Auch wenn Sie mehrere Tomcats auf einem Server betreiben, kann es sinnvoll sein, Tomcat manuell zu installieren. Der Betrieb von Tomcat aus der jeweiligen Linux-Distribution hat jedoch den Vorteil, dass man

  • benötigte Drittsoftware direkt mitinstallieren kann
  • die Apache-Integration einfacher einrichten kann
  • regelmäßige Sicherheitsupdates und Bugfixes über die Paketverwaltung beziehen kann
  • Tomcat in der Regel bereits als systemd-Dienst erhält

Wenn eine für SuperX geeignete Tomcat-Version in der Distribution enthalten ist, empfehlen wir daher die Installation aus der Distribution.

Tomcat aus der Ubuntu-Distribution

Im Folgenden wird das Vorgehen für Ubuntu Linux 26.04 mit Java 21 und Tomcat 10.1 beschrieben. Zunächst wechseln Sie in die root-Shell mit

sudo -i

Java 21, Tomcat 10 und den Apache-Webserver installieren:

apt-get update
apt-get install -y openjdk-21-jdk tomcat10 apache2

Tomcat anschließend zunächst stoppen:

systemctl stop tomcat10.service

Die installierten Versionen können Sie prüfen mit

java -version
/usr/share/tomcat10/bin/version.sh
lightbulb.svg Das Ubuntu-Paket tomcat10 enthält Tomcat 10.1. Die tatsächlich ausgelieferte Patchversion hängt vom Paketstand ab. Die hier empfohlene Kombination mit Java 21 ist eine SuperX-Empfehlung; Tomcat 10.1 selbst benötigt mindestens Java 11.

Die Konfiguration des Distributions-Tomcat liegt üblicherweise in

/etc/tomcat10/server.xml

und die Webanwendungen in

/var/lib/tomcat10/webapps

Kopieren Sie die zu Tomcat 10 passende SuperX-Webanwendung in das webapps-Verzeichnis. Der Tomcat-Dienstbenutzer muss auf die benötigten Dateien zugreifen können; die Eigentümer- und Schreibrechte sollten auf die tatsächlich erforderlichen Verzeichnisse begrenzt werden. Beim HTTP-Connector in der server.xml setzen Sie die Zeichenkodierung auf UTF-8. Wenn Apache und Tomcat auf demselben Server laufen, empfehlen wir außerdem die Bindung an localhost:

<Connector port="8080" protocol="HTTP/1.1"
           address="127.0.0.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8" />

Die weiteren Einstellungen für den Betrieb hinter Apache werden unter Apache Anbindung erläutert. Weitere Details zur server.xml siehe SuperX-Installationshandbuch.

Unter Ubuntu können Java-Optionen üblicherweise in der Datei

/etc/default/tomcat10

hinterlegt werden, z.B.:

JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
JAVA_OPTS="-Djava.awt.headless=true -DSuperX-DB-PROPERTIES-SET=true -Xmx3700M"

Der Speicherwert ist nur ein Beispiel. Prüfen Sie mit systemctl cat tomcat10, welche Konfigurationsdateien der installierte Dienst tatsächlich einliest. Die vom Paket bereitgestellte systemd-Service-Datei sollte nicht direkt bearbeitet werden; bei Bedarf verwenden Sie eine systemd-Override-Datei. Starten Sie Tomcat mit

systemctl start tomcat10.service

und prüfen Sie den Status mit

systemctl status tomcat10.service

Wenn der HTTP-Connector nur an 127.0.0.1 gebunden ist, kann der Zugriff auf demselben Server getestet werden mit

curl -I http://127.0.0.1:8080/superx/

Für den Aufruf vom Arbeitsplatzrechner wird anschließend die Apache-Anbindung eingerichtet.

Tomcat unter anderen Linux-Distributionen

Auch unter SUSE Linux und Red Hat Enterprise Linux können Sie den Tomcat aus der Distribution oder manuell installieren. Die genauen Paketnamen, Dienstnamen und Verzeichnisse sind distributionsabhängig. Entscheidend sind eine geeignete Tomcat-10.1-Version, Java 21, eine kompatible SuperX-Webanwendung und die Konfiguration des HTTP-Connectors bzw. AJP-Connectors. Ältere Verfahren mit rctomcat, chkconfig oder SuSEconfig werden hier nicht mehr beschrieben. Für die Dienstverwaltung wird systemd verwendet.

Tomcat aus der Distribution mit abweichender Userkennung oder anderem webapps-Verzeichnis

Wenn Sie Tomcat aus der Distribution nutzen, läuft der Dienst unter einer dafür eingerichteten Systemkennung. Bei Ubuntu liegt das webapps-Verzeichnis üblicherweise unter /var/lib/tomcat10/webapps.

lightbulb.svg Standardmäßig hat der Tomcat-Dienstbenutzer keine Login-Shell. Dies sollte aus Sicherheitsgründen so bleiben.

Sie können das Verzeichnis der Webanwendungen auch ändern, indem Sie in der Datei /etc/tomcat10/server.xml beim Element Host das Attribut appBase anpassen, z.B.:

<Host name="localhost" appBase="/home/superx/webserver/tomcat/webapps"
      unpackWARs="true" autoDeploy="false">

Beachten Sie, dass der Tomcat-Dienstbenutzer Lese- und Ausführungsrechte auf den gesamten benötigten Verzeichnispfad benötigt. Schreibrechte sollten nur für tatsächlich beschreibbare Verzeichnisse vergeben werden, etwa für temporäre Dateien oder SuperX-Logdateien. Auf gemeinsam verwendeten Verzeichnissen kann die Gruppenberechtigung entsprechend angepasst werden. Wenn Sie als User superx neue Dateien anlegen und eine gemeinsam verwendete Gruppe eingerichtet haben, kann eine passende umask helfen:

# Full access to user and group, none for others:
umask u=rwx,g=rwx,o=

Die konkrete Gruppenkennung und die Eigentümerschaft richten sich nach der Installation. Beachten Sie auch die Hinweise für Tomcat und Kettle.

Tomcat und Kettle

Im Homeverzeichnis des Benutzers, unter dem Tomcat läuft, sollte das Verzeichnis .kettle mit der Datei kettle.properties angelegt werden. Die Datei kann zunächst leer sein. Ermitteln Sie zuerst das Homeverzeichnis des Tomcat-Benutzers, z.B. mit

getent passwd tomcat

Liegt dieses bei Ubuntu unter /var/lib/tomcat10, können Sie als root Folgendes ausführen:

install -d -o tomcat -g tomcat /var/lib/tomcat10/.kettle
touch /var/lib/tomcat10/.kettle/kettle.properties
chown tomcat:tomcat /var/lib/tomcat10/.kettle/kettle.properties
lightbulb.svg Bei einer Distributionsaktualisierung sollte geprüft werden, ob das Homeverzeichnis des Tomcat-Benutzers weiterhin korrekt gesetzt ist.

Tomcat manuell installieren

Sie können auch spezielle Versionen von Tomcat herunterladen und installieren. Oder Sie verwenden den im SuperX-Kernmodul mitgelieferten Tomcat. Speicherort ist z.B. /home/superx/webserver/tomcat. Bei einer Neuinstallation bzw. einem Versionswechsel sollten Sie die Konfiguration der neuen Tomcat-Version als Ausgangspunkt verwenden. Kopieren Sie nicht einfach die kompletten alten Verzeichnisse bin, lib und conf darüber. Auch bisher benötigte Zusatzbibliotheken und Java-Optionen müssen auf Kompatibilität geprüft werden.

Tomcat als Dienst

Damit Tomcat beim Systemstart automatisch hochfährt und beim Herunterfahren kontrolliert gestoppt wird, kann man einen systemd-Dienst anlegen. Im Beispiel liegt SuperX unter /home/superx und Tomcat wird vom Benutzer superx gestartet. Für eine Installation aus der Linux-Distribution ist der Dienst in der Regel bereits vorhanden.

Service-Scripte

Zunächst legen wir als User superx im Verzeichnis tomcat/bin zwei Dateien an. startup_service.x:

#!/bin/bash
# Startup script for Apache Tomcat with systemd
set -e
# Load the service settings
. /home/superx/db/bin/SQL_ENV
export CATALINA_BASE=/home/superx/webserver/tomcat
export CATALINA_HOME=/home/superx/webserver/tomcat
export CATALINA_TMPDIR=/home/superx/webserver/tomcat/temp
# Start Tomcat
cd "$CATALINA_BASE" && exec "$CATALINA_HOME/bin/catalina.sh" run

und shutdown_service.x:

#!/bin/bash
# Shutdown script for Apache Tomcat with systemd
set -e
# Load the service settings
. /home/superx/db/bin/SQL_ENV
export CATALINA_BASE=/home/superx/webserver/tomcat
export CATALINA_HOME=/home/superx/webserver/tomcat
export CATALINA_TMPDIR=/home/superx/webserver/tomcat/temp
# Stop Tomcat
cd "$CATALINA_BASE" && exec "$CATALINA_HOME/bin/catalina.sh" stop

In der Datei SQL_ENV sollten die für Tomcat benötigten Umgebungsvariablen, insbesondere JAVA_HOME für Java 21 und die Java-Optionen, korrekt gesetzt bzw. exportiert werden. Der Pfad zu Java ist von der Distribution abhängig.

Dienst einrichten

Legen Sie als User root die Datei /etc/systemd/system/tomcat_superx.service an, mit dem Inhalt:

[Unit]
Description=Tomcat SuperX
After=network.target
[Service]
Type=simple
User=superx
Group=users
WorkingDirectory=/home/superx/webserver/tomcat/bin
ExecStart=/bin/bash /home/superx/webserver/tomcat/bin/startup_service.x
ExecStop=/bin/bash /home/superx/webserver/tomcat/bin/shutdown_service.x
[Install]
WantedBy=multi-user.target

Die Gruppe users ist hier nur ein Beispiel und muss gegebenenfalls angepasst werden. Der Eintrag EnvironmentFile=/home/superx/db/bin/SQL_ENV wird nicht benötigt, da die Skripte die SQL_ENV bereits als Bash-Skript einlesen. systemd kann unter EnvironmentFile keine beliebigen Bash-Befehle ausführen. Den Dienst aktivieren und starten Sie mit

systemctl daemon-reload
systemctl enable tomcat_superx
systemctl start tomcat_superx

Den Status und die Logmeldungen können Sie prüfen mit

systemctl status tomcat_superx
journalctl -u tomcat_superx -e

Wenn Sie die Service-Datei ändern, müssen Sie danach systemctl daemon-reload ausführen. Den Dienst deaktivieren Sie mit

systemctl disable tomcat_superx
attention.svg Ein Fallstrick: Wenn die SQL_ENV komplexe Bash-Kommandos enthält oder für einen systemd-Dienst ungeeignete Einstellungen setzt, kann der Dienststart scheitern. In diesem Fall kann eine separate, vereinfachte TOMCAT_ENV sinnvoll sein, die von den Startskripten eingelesen wird.

Für mögliche SELinux-Probleme bei Shell-Skripten in systemd-Diensten siehe SELinux im SuperX-Installationshandbuch.

Tomcat Logging

Tomcat Logging mit systemd

Je nach Installationsart erscheinen Tomcat-Meldungen im systemd-Journal oder in Dateien unter $CATALINA_BASE/logs. Bei einem manuell installierten Tomcat kann z.B. die Datei catalina.out vorhanden sein. Bei der Ubuntu-Distributionsinstallation sollte auch das systemd-Journal geprüft werden. Alle Journalmeldungen anzeigen:

journalctl

Die Meldungen eines bestimmten Tomcat-Dienstes anzeigen, z.B.:

journalctl -u tomcat10 -e
journalctl -u tomcat_superx -e

Die Meldungen live verfolgen:

journalctl -u tomcat10 -f
lightbulb.svg Ab SuperX 5.1 bzw. HISinOne-BI 2023.12 werden SuperX-spezifische Logmeldungen in der Datei $CATALINA_BASE/logs/superx.log ausgegeben. Je nach Fehlerbild sind sowohl diese Datei als auch die Tomcat-/systemd-Meldungen relevant.

Apache Anbindung

In Systemumgebungen, in denen bereits ein Webserver wie Apache läuft, bietet es sich an, den SuperX-Tomcat mit dem Webserver zu verbinden. Der Webserver kann so konfiguriert werden, dass Aufrufe zu https://superx.example.de/superx/ an Tomcat weitergeleitet werden. Dadurch müssen die internen Tomcat-Ports nicht nach außen freigegeben werden. Die HTTPS-Verschlüsselung und die Zertifikatsverwaltung können vom Apache übernommen werden. Wir empfehlen daher generell die Anbindung von Tomcat an Apache für einen Produktivbetrieb. Für die Verbindung zwischen Apache und Tomcat gibt es verschiedene Möglichkeiten:

  • HTTP über Port 8080 mit ProxyPass (empfohlen)
  • AJP über Port 8009 mit ProxyPass (Alternative)
  • Mod-JK für bestehende Installationen

Wenn Apache und Tomcat auf demselben Server laufen, sollten die internen Connectoren nur an 127.0.0.1 gebunden werden. Bei getrennten Servern muss die Verbindung über ein vertrauenswürdiges und entsprechend geschütztes Netzwerk erfolgen.

ProxyPass über HTTP (Port 8080)

Wir empfehlen die HTTP-Anbindung über mod_proxy und mod_proxy_http. Sie ist einfach zu konfigurieren, verwendet das übliche HTTP-Protokoll und benötigt keinen AJP-Connector. AJP bietet zusätzliche Zugriffsmöglichkeiten auf Tomcat-interne Informationen und benötigt deshalb besondere Absicherung. HTTP über localhost ist damit bei gleicher Zugangsbeschränkung die einfacher zu betreibende Variante. Der interne HTTP-Verkehr ist dabei nicht verschlüsselt; dieses Beispiel gilt deshalb für Apache und Tomcat auf demselben Server. Unter Ubuntu aktivieren Sie die benötigten Apache-Module mit

a2enmod proxy proxy_http ssl

Tomcat konfigurieren

In der server.xml (bei Ubuntu /etc/tomcat10/server.xml) richten Sie den HTTP-Connector ein:

<Connector port="8080" protocol="HTTP/1.1"
           address="127.0.0.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8"
           proxyName="superx.example.de"
           proxyPort="443"
           scheme="https"
           secure="true" />

Der Wert proxyName muss dem öffentlich verwendeten Hostnamen entsprechen. Die Angaben proxyPort="443", scheme="https" und secure="true" teilen Tomcat mit, dass die Anwender die Webanwendung über HTTPS am Apache aufrufen. Diese Konfiguration ist für eine ausschließlich über HTTPS erreichbare SuperX-Anwendung mit einem festen öffentlichen Hostnamen gedacht.

Apache konfigurieren

Im Apache-VirtualHost für HTTPS (unter Ubuntu z.B. in /etc/apache2/sites-available/superx.conf) ergänzen Sie die Weiterleitung:

<VirtualHost *:443>
    ServerName superx.example.de
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/superx.crt
    SSLCertificateKeyFile /etc/ssl/private/superx.key
    ProxyRequests Off
    ProxyPass "/superx" "http://127.0.0.1:8080/superx"
    ProxyPassReverse "/superx" "http://127.0.0.1:8080/superx"
</VirtualHost>

Die Zertifikatspfade sind Beispiele. Bestehende VirtualHosts werden entsprechend ergänzt; die SSL-Konfiguration muss nicht doppelt angelegt werden. ProxyPass leitet die Anfragen an Tomcat weiter, ProxyPassReverse passt bestimmte vom Backend gelieferte HTTP-Weiterleitungen an. URLs, die eine Webanwendung direkt in HTML erzeugt, werden dadurch nicht automatisch korrigiert. Nach den Änderungen prüfen Sie die Konfiguration und starten die Dienste neu:

apache2ctl configtest
systemctl restart tomcat10
systemctl reload apache2

Der Dienstname muss gegebenenfalls an die eigene Installation angepasst werden.

Falsche localhost-Adressen in DBForms bzw. HTML-Ausgaben

Wenn die öffentliche SuperX-Adresse über HTTPS aufgerufen wird, Tomcat intern aber nur den HTTP-Aufruf über localhost:8080 erkennt, können Webanwendungen fehlerhafte absolute URLs erzeugen. Das kann z.B. bei DBForms zu einem solchen HTML-Eintrag führen:

<base href="http://localhost:8080/superx/" />

Der Browser des Anwenders versucht dann, Ressourcen von seinem eigenen Rechner (localhost) zu laden. Bilder, Skripte oder Verweise funktionieren deshalb gegebenenfalls nicht. Mit den oben beschriebenen Connector-Attributen proxyName, proxyPort, scheme und secure kann Tomcat den korrekten öffentlichen Servernamen und das HTTPS-Schema an die Webanwendung melden.

lightbulb.svg {{{1}}}

Wenn mehrere öffentliche Hostnamen oder unterschiedliche Zugriffsschemata benötigt werden, reicht ein fest eingetragener proxyName gegebenenfalls nicht aus. Dann kann eine Konfiguration mit vertrauenswürdigen Proxy-Headern und der Tomcat-RemoteIpValve sinnvoll sein. Der Proxy muss solche Header kontrolliert setzen; unkontrolliert vom Client übernommene Header sind aus Sicherheitsgründen ungeeignet.

ProxyPass über AJP (Port 8009)

Alternativ kann die Verbindung über das AJP-Protokoll erfolgen. Dafür benötigen Sie beim Apache das Modul mod_proxy_ajp und auf Tomcat-Seite einen AJP-Connector. AJP ist weiterhin unterstützt, sollte aber nur in einem vertrauenswürdigen Netzwerk oder lokal verwendet werden. Das Secret schützt vor unberechtigten AJP-Verbindungen, verschlüsselt die Übertragung jedoch nicht. Unter Ubuntu aktivieren Sie das Modul mit

a2enmod proxy proxy_ajp

In der Tomcat-server.xml:

<Connector protocol="AJP/1.3"
           address="127.0.0.1"
           port="8009"
           secretRequired="true"
           secret="HIER_EIN_LANGES_ZUFAELLIGES_SECRET_EINTRAGEN"
           URIEncoding="UTF-8" />

Im Apache-VirtualHost wird anstelle der HTTP-Weiterleitung die AJP-Weiterleitung verwendet:

ProxyPass "/superx" "ajp://127.0.0.1:8009/superx" secret=HIER_EIN_LANGES_ZUFAELLIGES_SECRET_EINTRAGEN

Beide Secrets müssen übereinstimmen und dürfen nicht als öffentliche Beispielwerte übernommen werden. Der Parameter secret bei ProxyPass ist ab Apache 2.4.42 verfügbar. Auf beiden Seiten sollte die Konfiguration vor unberechtigtem Zugriff geschützt werden. Eine parallele HTTP- und AJP-Weiterleitung für denselben Pfad ist nicht erforderlich. Wenn Apache auf einem separaten Server läuft, muss statt 127.0.0.1 die geeignete interne IP-Adresse des Tomcat-Servers verwendet werden. Zusätzlich müssen Firewall und Netzabsicherung passend konfiguriert werden. Weitere Details siehe Tomcat AJP Connector.

Mod-JK

Das Apache-Modul mod_jk wird weiterhin für bestehende AJP-Installationen unterstützt. Für neue SuperX-Installationen empfehlen wir jedoch die oben beschriebene Anbindung über ProxyPass. Unter Ubuntu können Sie Mod-JK bei Bedarf installieren und aktivieren mit

apt-get install -y libapache2-mod-jk
a2enmod jk

Der AJP-Connector in Tomcat benötigt dieselben Sicherheitsvorgaben wie bei mod_proxy_ajp. In der workers.properties wird der Worker z.B. so eingerichtet:

worker.list=superx_tomcat
worker.superx_tomcat.type=ajp13
worker.superx_tomcat.host=127.0.0.1
worker.superx_tomcat.port=8009
worker.superx_tomcat.secret=HIER_EIN_LANGES_ZUFAELLIGES_SECRET_EINTRAGEN

Die Weiterleitung kann in der Apache-Konfiguration so erfolgen:

JkMount /superx/* superx_tomcat
JkMount /superx superx_tomcat
lightbulb.svg Falls bereits eine Mod-JK-Konfiguration aus dem SuperX-Kernmodul verwendet wird, können Sie diese weiter pflegen. Alte Beispielkonfigurationen mit einem ungeschützten AJP-Port oder unnötigen Apache-Dateisystem-Aliases sollten jedoch nicht unverändert übernommen werden.

Apache und Tomcat Sicherheit

Für den Produktivbetrieb empfehlen wir folgende Grundeinstellungen:

  • HTTPS wird nach außen am Apache bereitgestellt. Die internen Ports 8080 bzw. 8009 werden nicht über die öffentliche Firewall freigegeben.
  • Bei Betrieb auf demselben Server werden die Tomcat-Connectoren an 127.0.0.1 gebunden.
  • Nicht benötigte Connectoren werden in der server.xml deaktiviert.
  • Bei AJP wird ein eigenes, langes Secret verwendet; AJP sollte nicht über ungeschützte Netze betrieben werden.
  • Der Tomcat-Dienst läuft ohne Root-Rechte. Konfigurationsdateien und die Webanwendung erhalten nur die benötigten Dateirechte.
  • Apache, Tomcat und Java werden regelmäßig mit Sicherheitsupdates versorgt.
  • Bei SELinux-bedingten Verbindungsproblemen oder Problemen mit systemd-Shell-Skripten siehe SELinux (Security-Enhanced Linux) im SuperX-Installationshandbuch.

Weitere Tipps zur Tomcat-Sicherheit siehe Tomcat Security How-To.

Einrichtung SSL

SSL Varianten

Sie können SSL/TLS direkt in Tomcat einrichten, normalerweise wird die Verschlüsselung aber im Webserver konfiguriert. Bei einer Apache-Tomcat-Anbindung empfehlen wir, HTTPS beim Apache zu beenden und den internen Tomcat-Connector nur lokal erreichbar zu machen.

SSL im Webserver

Unter Ubuntu benötigen Sie das Apache-Modul ssl. Es kann aktiviert werden mit

a2enmod ssl

Im HTTPS-VirtualHost wird das Zertifikat eingebunden, z.B.:

<VirtualHost *:443>
    ServerName superx.example.de
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/superx.crt
    SSLCertificateKeyFile /etc/ssl/private/superx.key
    # Weitere Einstellungen, z.B. die ProxyPass-Anbindung, siehe oben.
</VirtualHost>

Zertifikat und Schlüssel müssen zum öffentlichen Hostnamen passen. Die Datei mit dem privaten Schlüssel darf nur von berechtigten Systembenutzern gelesen werden. Die tatsächlich verwendeten Pfade richten sich nach der Zertifikatsverwaltung vor Ort. Wenn zusätzlich Zugriffe auf Port 80 auf HTTPS umgeleitet werden sollen, kann ein eigener VirtualHost verwendet werden:

<VirtualHost *:80>
    ServerName superx.example.de
    Redirect permanent / https://superx.example.de/
</VirtualHost>

Die Apache-Konfiguration prüfen und neu laden:

apache2ctl configtest
systemctl reload apache2

Zertifikate mit Let's Encrypt

Wenn der Server die Voraussetzungen für eine öffentliche ACME-Zertifikatsprüfung erfüllt, können Sie z.B. Let's Encrypt in Verbindung mit Certbot verwenden. Unter Ubuntu stehen dafür passende Pakete bereit:

apt-get install -y certbot python3-certbot-apache

Die konkrete Ausstellung, Einrichtung und automatische Verlängerung hängen davon ab, ob der Webserver öffentlich erreichbar ist und welche Zertifikatsverwaltung die Hochschule einsetzt. Weitere Informationen siehe Certbot und Let's Encrypt.

SSL im Tomcat

Falls kein vorgeschalteter Apache-Webserver vorhanden ist, kann Tomcat HTTPS auch direkt bereitstellen. In Tomcat 10.1 wird die TLS-Konfiguration über SSLHostConfig und Certificate vorgenommen. Beispiel mit vorhandenem PKCS12-Keystore:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="/home/superx/tomcat-keystore.p12"
                     certificateKeystoreType="PKCS12"
                     certificateKeystorePassword="HIER_DAS_KEYSTORE_PASSWORT" />
    </SSLHostConfig>
</Connector>

Der Keystore muss ein zum öffentlichen Hostnamen passendes Zertifikat und den privaten Schlüssel enthalten. Das Passwort im Beispiel muss durch einen eigenen sicheren Wert ersetzt und entsprechend geschützt werden. Bei direkt von außen erreichbarem Tomcat muss außerdem Port 8443 entsprechend abgesichert werden. Eine ausführliche Anleitung zum Erzeugen bzw. Einbinden von Zertifikaten steht in der offiziellen Tomcat-10.1-Dokumentation.

Wechsel von Tomcat 9 auf Tomcat 10

Mit Tomcat 10 wurden die Java-EE-Schnittstellen auf Jakarta EE umgestellt. Insbesondere wurden viele Paketnamen von javax.* nach jakarta.* geändert. Eine für Tomcat 9 bereitgestellte Webanwendung kann deshalb nicht ohne Weiteres mit Tomcat 10 verwendet werden. Für das SuperX-Kernmodul 6.0 empfehlen wir Tomcat 10.1 und Java 21. Für den Versionswechsel muss insbesondere geprüft werden, ob die SuperX-Webanwendung und zusätzlich eingesetzte Bibliotheken für Tomcat 10 geeignet sind. Die Konfiguration der neuen Tomcat-Version sollte als Grundlage verwendet werden; die bisherigen Konfigurationsdateien sollten nicht vollständig übernommen werden. Auch bestehende Java-Optionen sowie die Apache-Anbindung müssen geprüft werden.

lightbulb.svg Der Wechsel von Tomcat 9 auf Tomcat 10 wird wegen der umfangreicheren Umstellung in einem separaten Migrationsleitfaden behandelt. Bis dahin siehe offizielle Tomcat-Migrationshinweise.