Zuletzt bearbeitet vor einer Woche
von Andre Knieschewski

Kernmodul Tomcat-Einrichtung

Tomcat aus Linux Distributionen

Da die Versionsnummern des Tomcat nicht immer zu SuperX passen, ist es ggf. sinnvoll einen eigenen Tomcat bzw. den im SuperX Kernmodul mitgelieferten Tomcat zu nutzen. Auch wenn Sie mehrere Tomcats auf einem Server betreiben kann es sinnvoll sein, Tomcat manuell zu installieren.

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 Distribution nehmen

Tomcat aus der Ubuntu-Distribution

Im folgenden wird das Vorgehen für Ubuntu Linux beschrieben. Hier wird das Kernmodul 4.9 mit Tomcat9 unter Ubuntu 20.04 eingerichtet. Zunächst wechseln sie in die root-Shell mit

sudo -i
  • Java 1.8 und Tomcat9 installieren:
apt-get install openjdk-8-jdk tomcat9

und direkt stoppen mit

systemctl stop tomcat9.service

Zur Sicherheit alte kompilierte Klassen löschen: rm -r /var/lib/tomcat9/work/*

  • Dann die superx-webapp kopieren nach /var/lib/tomcat9/webapps, und den user tomcat zum Eigentümer machen:
chown -R tomcat:tomcat /var/lib/tomcat9/webapps/
lightbulb.svg Flexible Verzeichniswahl

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

<Host name="localhost"  appBase="webapps"
           unpackWARs="true" autoDeploy="false">

stattdessen könnten Sie z.B. schreiben

<Host name="localhost"  appBase="/opt/superx/webapps"
           unpackWARs="true" autoDeploy="false">

In der Datei /etc/tomcat9/server.xml beim jew. Connector port="...." das Attribut

URIEncoding="UTF-8"

ergänzen, also z.B.

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

Dann in der /etc/default/tomcat die Zeilen

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

eintragen (der letzte RAM Parameter ist nur ein Beispiel).

Dann in der Datei

/usr/lib/systemd/system/tomcat9.service

die Zeile

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 unter SuSE Linux

Sie installieren Tomcat aus der Distribution mit

zypper -n in -l tomcat

Bei Suse Linux wird der interne Tomcat unter /usr/share/java/tomcat installiert, die Konfiguration liegt in /etc/tomcat 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. 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:

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

Weiter oben setzen Sie bei Betrieb in UTF-8 noch das URIEncoding="UTF-8":

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"  URIEncoding="UTF-8" />

und ggf. auch

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

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/tomcat/tomcat.conf 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 manuell installieren

Sie können auch spezielle Versionen von 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.

Tomcat als Dienst

Damit Tomcat bei Systemstart automatisch hochfährt, und beim Herunterfahren kontrolliert gestoppt wird, muss man einen Dienst anlegen. 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

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

startup_service.x

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

und shutdown_service.x:

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

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

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

[Unit]
Description=Tomcat SuperX
After=syslog.target
After=network.target
After=postgresql.service

[Service]
RestartSec=2s
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
EnvironmentFile=/home/superx/db/bin/SQL_ENV
[Install]
WantedBy=multi-user.target

Den Dienst aktivieren Sie dann mit

systemctl enable tomcat_superx

und starten ihn dann mit

systemctl start tomcat_superx

Bei Problemen kann man die Fehlerausgabe anzeigen:

journalctl -xe

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


attention.svg 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.