Verwalten von Tomcat 8 + 9 Instanzen
Tomcat ist ein Anwendungsserver zum Ausführen von Java-Anwendungen.
Mit unserem Tomcat Service erhalten Sie eine Tomcat 8 / 9 Installation, die direkt vom Benutzer www-data
verwaltet werden kann. Das bedeutet mehr Flexibilität bei der Konfiguration der Instanzen.
Schritt-für-Schritt Anleitung
Sie können diesen Abschnitt überspringen, wenn Sie von einer Tomcat 6 Lösung migriert haben.
In diesem Abschnitt führen wir Sie durch den Prozess der Einrichtung Ihrer eigenen Tomcat-Instanz mit einem Reverse-Proxy.
Anforderungen
- Ubuntu 16.04 (Xenial) oder 18.04 Bionic (tomcat9)
- Tomcat 8 oder Tomcat 9 durch uns auf Ihrem Server installiert ()
nine-manage-vhosts
auf dem Server installiert
Erstellen einer Tomcat-Instanz
Wir verwenden das Tool tomcat8-instance-create
oder tomcat9-instance-create
(offizielle tomcat8 Dokumentation) oder (offizielle tomcat9 Dokumentation), um Tomcat-Instanzen zu erstellen. Einige Parameter sollten übergeben werden:
- HTTP-Port (standardmässig 8080)
- Control Port (standardmässig 8005)
Mit dem folgenden Befehl wird eine Tomcat-Instanz im Ordner ~/test-server.ch
auf dem Port 8081
mit dem Control-Port 8006
erstellt:
tomcat8-instance-create -p 8081 -c 8006 ~/test-server.ch
tomcat9-instance-create -p 8081 -c 8006 ~/test-server.ch
Wenn Sie mehrere Tomcat-Instanzen erstellen, müssen Sie sicherstellen, dass der HTTP-Port und der Control-Port eindeutig sind.
Tomcat-Instanz mit einem Reverse-Proxy für die Aussenwelt zugänglich machen
Tomcat hört standardmässig auf localhost. Es ist üblich, einen Reverse-Proxy vor Tomcat zu platzieren. Wir verwenden nine-manage-vhosts
, um diesen Reverse-Proxy zu erstellen.
Mit dem folgenden Befehl wird ein Virtual Host namens 'test-server.ch' erstellt, 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 proxy
-Template geht davon aus, dass sich alle Tomcat-Instanzen unter /home/www-data/<domain-name>
befinden.
Wenn ein Let's Encrypt Zertifikat und https verwendet werden soll, sollte das Template proxy_letsencrypt_https
verwendet werden.
Nur in Kombination mit Apache notwendig: Um automatisch von http nach https zu redirecten (mit Let's Encrypt Zertifikat), können Sie das Template proxy_letsencrypt_https_redirect
verwenden.
Starten der Tomcat-Instanz beim Systemstart
Für das Starten/Stoppen der Tomcat-Instanzen stellen wir ein systemd-Template bereit.
Mit dem folgenden Befehl wird die Instanz als Dienst konfiguriert:
systemctl --user enable user-tomcat@test-server.ch
Die folgenden Befehle starten/stoppen die Tomcat-Instanz mit dem Namen test-server.ch
:
systemctl --user start user-tomcat@test-server.ch
systemctl --user stop user-tomcat@test-server.ch
Um den aktuellen Status der Tomcat-Instanz zu überprüfen, können Sie den folgenden Befehl verwenden:
systemctl --user status user-tomcat@test-server.ch
Der erste Teil des Dienstnamens ist unverändert: "user-tomcat@". Nach dem @
wird jeweils der Name der Tomcat-Instanz übergeben.
Weitere Informationen zur Verwaltung von Diensten mit systemd finden Sie in diesem Artikel.
Zusammenfassung
Mit den folgenden Kommandos wird eine Tomcat-Installation unter http://test-server.ch eingerichtet:
# Tomcat-Instanz erstellen, erreichbar unter http://localhost:8081
tomcat8-instance-create -p 8081 -c 8006 ~/test-server.ch
# VHost mit Reverse-Proxy einrichten, damit die Instanz von aussen zugänglich ist
sudo nine-manage-vhosts virtual-host create test-server.ch --template=proxy --template-variable PROXYPORT=8081
# Applikation bereitstellen (siehe unten).
[...]
# Service für die Instanz erstellen
systemctl --user enable user-tomcat@test-server.ch
# Tomcat-Instanz starten
systemctl --user start user-tomcat@test-server.ch
Bereitstellen Ihrer Anwendung
In diesem Abschnitt werden Sie Ihre Java-Anwendung für die Tomcat-Instanz bereitstellen. Im Folgenden finden Sie ein paar Dinge, die Sie über den Deploymentprozess wissen sollten:
Anwendungsformat
Eine Anwendung hat in der Regel die Form einer .war
oder .jar
Datei.
Wo kommt die Anwendung hin?
Die Anwendung muss nach /home/www-data/ROOT
kopiert werden.
Es gibt auch die Möglichkeit, mehrere Applikationen unter einem Virtual Host zu betreiben. Dazu muss jede Applikation in einem separaten Ordner unter /home/www-data/<Instanzname>/webapps/
abgelegt werden. Die Applikationen sind dann unter "http://servername.com/name_des_ordners_in_webapps/" zugänglich.
Deployment-Beispiel
Nehmen wir an, wir haben die gleiche Tomcat-Instanz wie zuvor: test-server.ch
.
Wir wollen unsere Applikation test-application
deployen, die wir derzeit als WAR-Datei haben: test-application.war
.
cp test-application.war /home/www-data/test-server.ch/webapps/
# Tomcat extrahiert diese dann in den Ordner "test-application":
# /home/www-data/test-server.ch/webapps/test-application
Die Anwendung ist nun unter http://test-server.ch/test-application zugänglich. Die Log-Dateien befindet sich unter /home/www-data/test-server.ch/logs/catalina.out
.
Logging
Wenn Ihre Anwendungen nach stdout
loggen, wird nach /home/www-data/<Instanzname>/logs/catalina.out
geschrieben.
Bitte denken Sie daran, dass Ihr catalina.out
mit dieser Methode sehr schnell wächst und dass wir [empfehlen, ein Protokollierungsprogramm anstelle der Standardausgabe zu verwenden](https://wiki.apache.org/tomcat/FAQ / Protokollierung#Q5).
Falls Sie trotzdem STDOUT in Ihrer Anwendung für das Logging verwenden möchten, ist folgendes zu beachten:
- Deaktivieren Sie die Protokollrotation in Tomcat, da es die Protokolle nicht ordnungsgemäss rotiert. Dies kann durch Bearbeiten der Datei
conf/logging.properties
erfolgen, indem folgende Zeilen hinzugefügt werden:
1catalina.org.apache.juli.FileHandler.rotable = false
2localhost.org.apache.juli.FileHandler.rotable = false
- Konfigurieren Sie die Protokollrotation mit logrotate.
Zusätzliche Informationen
Weitere Informationen zum Deployment finden Sie in der offiziellen Dokumentation.
Erweiterte Konfiguration
Da die Tomcat-Instanzen von www-data
verwaltet werden, können Sie die gesamte Konfiguration ohne Verwendung von sudo oder Hilfe von Nine vornehmen (siehe offizielle tomcat8 Dokumentation oder offizielle tomcat9 Dokumentation als Referenz).
Wir möchten an dieser Stelle einige Tipps für die Konfiguration mit Umgebungsvariablen zeigen.
Umgebungsvariablen
Einige Teile des Verhaltens von Tomcat können durch das Setzen von Umgebungsvariablen in der Datei ~/<Instanzname>/bin/setenv.sh
gesteuert werden.
Im Folgenden finden Sie einige Beispiele dafür, was mit ihnen geändert werden kann:
Andere Java-Version auswählen
Fügen Sie der Datei setenv.sh
folgendes hinzu und starten Sie die Instanz neu, um die Java-Version zu wechseln:
JAVA_HOME=/opt/java/production
Ändern der Protokolldatei
Fügen Sie der Datei setenv.sh
folgendes hinzu und starten Sie die Instanz neu, um sich in einer anderen Datei anzumelden:
CATALINA_OUT=logs/custom.out
Ändern der maximalen Speichermenge
Das Skript tomcat8-instance-create
setzt in setenv.sh
einen Standardwert von 128MB für eine Instanz. Ersetzen Sie einfach die 128MB mit dem Wert Ihrer Wahl (muss ein Vielfaches von 1024 grösser als 2 MB).
So könnte beispielsweise die Instanz maximal 512 MB Arbeitsspeicher verwenden:
if [ -z "$JAVA_OPTS" ]; then
JAVA_OPTS="-Djava.awt.headless=true -Xmx512M"
fi
systemd-Einstellungen
Einige Parameter können nicht von Tomcat eingestellt werden, sondern müssen von systemd gesetzt werden. Diese Einstellungen können durch so genannte systemd drop-ins geändert werden.
Sie können entweder für alle Instanzen eines Benutzers oder für eine spezifische Instanz gesetzt werden.
Um die Konfiguration für alle Instanzen zu ändern, platzieren Sie die Datei in
~/.config/systemd/user/user-tomcat@.service.d
Um nur eine einzelne Instanz zu ändern, platzieren Sie die Datei in
~/.config/systemd/user/user-tomcat@<instance-name>.service.d
Um beispielsweise den Höchstwert Max Open Files festzulegen, legen Sie diese Datei in einen der oben genannten Ordner:
# nofiles.conf
[Service]
LimitNOFILE=2048