Zeile 8: | Zeile 8: | ||
* Tomcat wird i.d.R.automatisch für systemd als Dienst konfiguriert, mit einer speziellen Kennung für den Systemuser. | * 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. | Wir empfehlen daher die Distribution. | ||
==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. | 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 | Zunächst wechseln sie in die root-Shell mit | ||
Zeile 57: | Zeile 56: | ||
http://localhost:8080/superx/ | http://localhost:8080/superx/ | ||
==Tomcat unter SuSE Linux== | |||
Sie installieren Tomcat aus der Distribution mit | Sie installieren Tomcat aus der Distribution mit | ||
zypper -n in -l tomcat | zypper -n in -l tomcat |
Version vom 16. Dezember 2022, 19:23 Uhr
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 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/
![]() |
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.
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
![]() |
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. |
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. Für die Anbindung gibt es zwei Apache-Module bzw. Möglichkeiten:
- ProxyPass
- Mod-JK
ProxyPass
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. 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
Bei Suse wird das Paket installiert mit
zypper -n in -l apache2-mod_jk
Die Konfiguration kann man in /etc/tomcat/conf.d ablegen, also z.B. die Datei superx_mod_jk.conf.(s.u.).
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 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): 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. Setzen Sie in der Datei superx_mod_jk.conf:
LoadModule jk_module /usr/lib64/apache2/mod_jk.so JkWorkersFile /etc/tomcat/conf.d/workers.properties JkLogFile /var/log/tomcat/mod_jk.log JkLogLevel error JkMountCopy All JkMount /*.jsp ajp13 JkMount /servlet/* ajp13 Alias /superx "/usr/share/tomcat/superx/webserver/tomcat/webapps/superx" <Directory "/usr/share/tomcat/superx/webserver/tomcat/webapps/superx"> Options Indexes FollowSymLinks </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:
workers.tomcat_home=/usr/share/tomcat workers.java_home=/usr/lib64/jvm ps=/ worker.list=ajp13 worker.ajp13.port=8009 worker.ajp13.host=localhost worker.ajp13.type=ajp13 worker.ajp13.lbfactor=1
Dann binden Sie die Dateien in den Apache ein, indem Sie in der Datei /etc/sysconfig/apache2 die Zeile
APACHE_CONF_INCLUDE_FILES="/etc/tomcat/conf.d/superx_mod_jk.conf"
ergänzen. Danach starten Sie den Apache mit
rcapache2 restart
Logmeldungen des mod_jk liegen in /var/log/tomcat/mod_jk.log. Damit der Apache Server beim Booten hochfährt, geben Sie ein: chkconfig --set apache2 on
Einrichtung Mod-JK unter Ubuntu Linux
Das folgende Vorgehen wurde getestet unter Ubuntu Linux Server 18.04 (x86_64), d.h. Apache 2.4 und Tomcat 8: Ent-kommentieren Sie in der Datei /etc/apt/sources.list das Repository "universe", um OpenJDK 8 installieren zu können. Installieren Sie Java OpenJDK 8, Tomcat 8, Apache 2.4 und mod_jk:
apt-get update apt-get install -y openjdk-8-jdk apt-get install -y tomcat81 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/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/tomcat8/webapps/superx):
Alias /superx "/var/lib/tomcat8/webapps/superx" <Directory "/var/lib/tomcat8/webapps/superx"> Options Indexes FollowSymLinks </Directory> JkMount /superx/servlet/* ajp13 JkMount /superx/* ajp13 <Location "/superx/WEB-INF/"> AllowOverride None deny from all </Location> <Location "/superx/META-INF/"> AllowOverride None deny from all </Location> JkMountCopy All
Setzen Sie in der Datei /etc/libapache2-mod-jk/workers.properties
workers.tomcat_home=/var/lib/tomcat8 workers.java_home=/usr/lib/jvm/java-8-openjdk-amd64 ps=/ worker.list=ajp13 worker.ajp13.port=8009 worker.ajp13.host=localhost worker.ajp13.type=ajp13 worker.ajp13.lbfactor=1
Danach starten Sie den Apache mit
/etc/init.d/apache2 start
Logmeldungen des mod_jk liegen in
/var/log/apache2/mod_jk.log.
Einrichtung Mod-JK Load Balancing
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. 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.
Auszug aus
der server.xml des Apache-Rechners <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).