Zum Hauptinhalt springen

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

info

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
tip

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
info
  1. Das Tomcat-Template geht davon aus, dass sich alle Instanzen unter /home/www-data/<domain-name> befinden.
  2. Um ein Let's-Encrypt-Zertifikat und HTTPS zu verwenden, nutzen Sie die Vorlage proxy_letsencrypt_https anstelle von proxy.
  3. 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
info
  1. Der erste Teil des Servicenamens bleibt user-tomcat@. Der Teil nach dem @ ist der Name Ihrer Tomcat-Instanz.
  2. 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.

warnung

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}"
    info

    Standardmä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:

~/.config/systemd/user/user-tomcat@test-server.ch.service.d/limits.conf
[Service]
LimitNOFILE=2048