Tomcat-Applikationen betreiben
Apache Tomcat ist ein OpenSource-Java-Anwendungsserver, der Java Servlets, JSPs und Webanwendungen ausführt.
Mit unserer Best-Practice-Konfiguration erhalten Sie eine Tomcat-Installation, die direkt vom Benutzer www-data
verwaltet werden kann. Dies ermöglicht eine grössere Flexibilität bei der Konfiguration von Instanzen, ohne dass Sie diese selbst aktuell halten müssen.
Diese Seite führt Sie durch die Einrichtung einer eigenen Tomcat-Instanz mit einem Reverse-Proxy:
Anforderungen
- Tomcat wurde von uns auf Ihrem Server eingerichtet (kontaktieren Sie uns für die Installation: )
nine-manage-vhosts
ist auf dem Server installiert
Eine Tomcat-Instanz erstellen
In diesem Beispiel wird Tomcat 10 verwendet. Passen Sie den Befehl basierend auf Ihrer installierten Tomcat-Version an.
Sie können die auf Ihrem Server verfügbare Version mit folgendem Befehl herausfinden:
apt search --names-only 'tomcat[0-9]+-user'
Erstellen Sie eine neue Tomcat-Instanz mit tomcat10-instance-create
.
Folgende Parameter können angegeben werden:
- HTTP-Port (Standard: 8080)
- Steuerungsport (Standard: 8005)
Der folgende Befehl erstellt die Instanz im Ordner ~/test-server.ch
mit dem Tomcat-Server auf Port 8081
und Steuerungsport 8006
:
tomcat10-instance-create -p 8081 -c 8006 ~/test-server.ch
Wenn mehrere Tomcat-Instanzen erstellt werden, müssen der HTTP-Port und der Steuerungsport eindeutig sein.
Tomcat-Anwendungen erreichbar machen
Tomcat hört standardmässig auf localhost
. Um die Anwendung über eine öffentliche URL erreichbar zu machen, wird üblicherweise ein Reverse-Proxy verwendet. Zur Einrichtung dieses Reverse-Proxys nutzen Sie nine-manage-vhosts
.
Der folgende Befehl erstellt einen vhost namens test-server.ch
, der den gesamten Traffic an die Tomcat-Instanz auf Port 8081 weiterleitet:
sudo nine-manage-vhosts virtual-host create test-server.ch --template=proxy --template-variable PROXYPORT=8081
- Das Tomcat-Template geht davon aus, dass sich alle Instanzen unter
/home/www-data/<domain-name>
befinden. - Um ein Let's-Encrypt-Zertifikat und HTTPS zu verwenden, nutzen Sie die Vorlage
proxy_letsencrypt_https
anstelle vonproxy
. - Um HTTP automatisch auf HTTPS umzuleiten, verwenden Sie das Template
proxy_letsencrypt_https_redirect
.
Die ausführliche Dokumentation enthält weitere Beispiele und Details zur Nutzung von nine-manage-vhosts
.
Tomcat-Instanz automatisch starten
Wir stellen eine Systemd-Service-Vorlage bereit, um Ihre Tomcat-Instanzen zu starten und stoppen.
Um sicherzustellen, dass die Instanz beim Server-Start mitstartet, führen Sie folgendes aus:
systemctl --user enable user-tomcat@test-server.ch
Die folgenden Befehle starten oder stoppen die Tomcat-Instanz test-server.ch
manuell:
systemctl --user start user-tomcat@test-server.ch
systemctl --user stop user-tomcat@test-server.ch
Den aktuellen Status der Tomcat-Instanz können Sie mit folgendem Befehl überprüfen:
systemctl --user status user-tomcat@test-server.ch
- Der erste Teil des Servicenamens bleibt
user-tomcat@
. Der Teil nach dem@
ist der Name Ihrer Tomcat-Instanz. - Falls mehrere Tomcat-Versionen installiert sind, kann die gewünschte Version in der Service-Datei so angegeben werden:
user-tomcat10@test-server.ch
.
Weitere Informationen zur Verwaltung von Diensten mit systemd finden Sie unter Dienste als Benutzer mit Systemd verwalten.
Anwendung bereitstellen
In diesem Abschnitt wird Ihre Java-Anwendung auf der Tomcat-Instanz bereitgestellt.
Anwendungsformat
Anwendungen werden typischerweise als .war
- oder .jar
-Dateien bereitgestellt.
Speicherort der Anwendung
Die Anwendung sollte sich unter /home/www-data/<vhost-name>/ROOT
befinden.
Um mehrere Anwendungen auf einem virtuellen Host zu betreiben, platzieren Sie jede Anwendung in einem eigenen Verzeichnis unter /home/www-data/<vhost-name>/webapps
. Die Anwendungen sind dann unter http://servername.com/name_des_verzeichnisses_in_webapps/
erreichbar.
Beispiel
Um test-application.war
in der Instanz test-server.ch
bereitzustellen, kann folgender Befehl genutzt werden:
rsync --progress test-application.war www-data@server.nine.ch:~/test-server.ch/webapps/
Beim ersten Start der Anwendung extrahiert Tomcat die Dateien in folgendes Verzeichnis:
/home/www-data/test-server.ch/webapps/test-application
Die Anwendung ist jetzt unter http://test-server.ch/test-application
erreichbar, und die Logs befinden sich unter /home/www-data/test-server.ch/logs/catalina.out
.
Logging
Falls Ihre Anwendung Ausgaben in stdout
schreibt, werden Logs unter /home/www-data/<instanz-name>/logs/catalina.out
gespeichert.
Die Datei catalina.out
kann schnell anwachsen. Folgen Sie dieser Anleitung, um eine automatische Log-Rotation einzurichten und Speicherplatzprobleme zu vermeiden.
Umgebungsvariablen
Das Verhalten von Tomcat kann durch Setzen von Umgebungsvariablen in ~/<instance-name>/bin/setenv.sh
angepasst werden
Beispiele
-
Andere Java-Version verwenden:
JAVA_HOME=/opt/java/production
-
Speicherort der Logs ändern:
CATALINA_OUT=logs/custom.out
-
RAM-Nutzung anpassen:
JAVA_OPTS="-Djava.awt.headless=true -Xmx512M ${JAVA_OPTS}"
infoStandardmässig wird einer Instanz 128 MB Arbeitsspeicher zugewiesen. Es ist darauf zu achten, dass der Wert ein Vielfaches von 1024 ist und mindestens 2 MB beträgt:
Systemd-Einstellungen
Einige Parameter können nicht durch Tomcat selbst, sondern nur durch Systemd gesetzt werden. Dies kann mit sogenannten Systemd Drop-Ins vorgenommen werden.
Für Einstellungen, die alle Instanzen betreffen, können die Dateien hier platziert werden:
~/.config/systemd/user/user-tomcat@.service.d
Für eine einzelne Instanz im korrespondierenden Unterverzeichnis:
~/.config/systemd/user/user-tomcat@<instance-name>.service.d
Um beispielsweise das Max Open Files Limit
anzupassen, kann folgende Datei angelegt werden:
[Service]
LimitNOFILE=2048