Tomcat
Archivierte Anleitung
Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Apache Tomcat stellt eine Umgebung zur Ausführung von Java-Code auf Webservern bereit, die im Rahmen des Jakarta-Projekts der Apache Software Foundation entwickelt wird. Es handelt sich um einen in Java geschriebenen Servlet-Container, der mithilfe des JSP-Compilers Jasper auch JavaServer Pages in Servlets übersetzen und ausführen kann. Dazu kommt ein kompletter HTTP-Server.
Der HTTP-Server von Tomcat wird vor allem zur Entwicklung eingesetzt, während in Produktion zumeist ein Apache Web-Server vor Tomcat geschaltet wird. Dazu wird in Apache ein Plugin eingebunden, das Requests für dynamische Inhalte an Tomcat weiterleitet. Das Plugin spricht Tomcat dann normalerweise über das Apache JServ Protocol an. (Quelle: Wikipedia).
Dieser Artikel beschreibt die Installation und Einrichtung von Apache Tomcat 6 bzw, Tomcat 7. Hinweise zur Verwendung können dem Abschnitt Links entnommen werden.
Voraussetzungen¶
Bevor mit der Installation der Tomcat-Pakete begonnen werden kann, muss das Sun JDK installiert werden. Zusätzlich muss man entweder die folgenden Umgebungsvariablen [4] setzen:
export JAVA_HOME={Pfad zum gerade installierten JDK-Verzeichnis}
export PATH=$PATH:$JAVA_HOME/bin
oder alternativ den Pfad zum JDK in der Tomcat-Konfiguration angeben (/etc/default/tomcat6 bzw. /etc/default/tomcat7 wird dafür editiert). Die Zeile mit JAVA_HOME=/usr/lib/jvm/java-6-sun
muss entsprechend angepasst werden, je nachdem, wo das JDK zu finden ist.
Hinweis:
Tomcat ist ein eigenständiger Webserver. Der Apache Webserver braucht also nicht vorher installiert werden. Allerdings können beide über einen Connector miteinander verbunden werden. Wie das geht, ist in unten stehendem Link erklärt.
Installation¶
Für Tomcat 6 sind folgende Pakete zu installieren [1]:
tomcat6 (universe)
tomcat6-admin (universe )
Befehl zum Installieren der Pakete:
sudo apt-get install tomcat6 tomcat6-admin
Oder mit apturl installieren, Link: apt://tomcat6,tomcat6-admin
Für Tomcat 7 sind diese Pakete zu installieren [1]:
tomcat7 (universe)
tomcat7-admin (universe )
Befehl zum Installieren der Pakete:
sudo apt-get install tomcat7 tomcat7-admin
Oder mit apturl installieren, Link: apt://tomcat7,tomcat7-admin
Aufruf¶
Der Tomcat wird in einem Browser über http://localhost:8080
aufgerufen.
Tomcat über Port 80 erreichen¶
Der Standardport für Webserver ist Port 80
. Wird eine Anfrage zu einem Webserver gemacht, verbindet sich der Browser automatisch über diesen Port mit dem Webserver - wenn kein anderer Port spezifiziert wurde. Tomcat läuft aber nach der Standardeinstellung auf den Ports 8180
bzw. 8080
. Damit man diese Port-Angaben nicht extra angeben muss, kann Tomcat über Port 80
erreichbar gemacht werden.
Um Tomcat auf Port 80
zu erreichen, gibt es mehrere Möglichkeiten:
Seit Ubuntu 10.04 kann der Port via Authbind gebunden werden, indem in /etc/default/tomcat6 die Option
AUTHBIND=yes
gesetzt wird.Tomcat als root - Tomcat mit root-Rechten laufen lassen
Paketweiterleitung mittels iptables - Mittels iptables den Port 80 auf Port 8080 weiterleiten
Tomcat über das Modul
mod_jk
in den Apache-Webserver integrieren. Weitere Informationen dazu findet man auf tomcat.apache.org 🇬🇧
Hinweis:
Bevor man Tomcat auf Port 80
laufen lässt, sollte man sicherstellen, dass keine andere Anwendung den Port 80
nutzt. Es darf immer nur eine Anwendung einen Port nutzen. Dazu kann das Netzwerkdiagnose-Programm (gnome-nettool) genutzt werden.
Hinweis:
Seit Ubuntu 10.04 kann der Port via Authbind gebunden werden, indem in /etc/default/tomcat6 die Option AUTHBIND=yes
gesetzt wird.
Tomcat als root¶
Achtung!
Tomcat als root laufen zu lassen, ist nicht empfehlenswert! Jedes Servlet und jede JSP laufen unter root-Rechten und es können mittels der Servlets oder JSPs Systemdateien verändert oder gelöscht werden. Diese Methode sollte man nur verwenden, wenn man den gehosteten Webseiten vertrauen kann, z.B. man stellt nur eigene Webseiten auf den Server.
Dazu muss die Datei server.xml editiert werden [3]. Diese Datei liegt im Konfigurationsverzeichnis des Tomcats (/etc/tomcat6 oder /etc/tomcat7). In der Datei wird der folgende Xml-Tag bearbeitet:
1 | <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" /> |
Hier ändert man den Connector port=
von 8080
auf 80
.
Hinweis:
Für das Attribut port
können auch andere Werte eingetragen werden, wenn man z.B. den Tomcat auf dem Port 12345 laufen lassen möchte. Man muss dabei beachten, dass Ports unterhalb von 1024 nur vom User root geöffnet werden dürfen.
Wenn jetzt Tomcat neu gestartet würde, wäre der Webserver nicht erreichbar, weil nur der Benutzer root
Ports zwischen 0 und 1024 öffnen darf. Damit Tomcat den Port 80 öffnen darf, trägt man in das Start-Skript /etc/init.d/tomcat6 oder /etc/init.d/tomcat7 den Benutzer root
ein. Dieser wird in einer Variablen gesetzt, die entweder "TOMCAT6_USER" oder "TOMCAT7_USER" heißt. Für den Tomcat 6 sieht der Eintrag nach dem Editieren wie folgt aus:
1 | TOMCAT6_USER=root |
Danach muss man Tomcat neustarten [5].
sudo /etc/init.d/tomcat6 restart
oder
sudo /etc/init.d/tomcat7 restart
Paketweiterleitung mittels iptables¶
iptables ist der Paketfilter des Linux-Kernels. Mit diesem Paketfilter kann bestimmt werden, was mit ankommenden oder ausgehenden Paketen passieren soll. In diesem Fall wollen wir, dass auf Port 80
ankommende Pakete an Port 8080
weitergeleitet werden und dass von Port 8080
die ausgehenden Pakete auf Port 80
ausgehen. Dazu nutzt man Network_Address_Translation (NAT). Diese Methode hat den Vorteil, dass Tomcat nicht mit root-Rechten ausgeführt wird, was das System sicherer macht.
Hinweis:
Sollte der Tomcat nicht auf Port 8080
laufen, dann müssen die Angaben in den Befehlen entsprechend geändert werden.
Der folgende Befehl stellt NAT ein:
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport http -j REDIRECT --to-ports 8080
Sollte der Rechner mehrere Netzwerkkarten haben, auf denen die Webseite abgerufen werden soll und kann, dann muss der Befehl für alle Schnittstellen aufgerufen werden. Dazu muss man den Wert der Option -i <Schnittstelle>
anpassen. Im Beispiel steht dieser Wert für die Standardschnittstelle auf eth0.
Hinweis:
Möchte man einen anderen Port als 80
verwenden, dann muss der Wert der Option --dport <Port>
geändert werden, z.B. --dport 12345
. Man könnte den Tomcat auch auf mehreren Ports erreichbar machen, indem mehrmals der Befehl mit verschieden Ports aufgerufen wird.
Die Einstellungen, die mit iptables vorgenommen wurden, sind nicht permanent eingestellt. Bei einem Neustart des Systems müssen diese wieder neu eingestellt werden. Damit man nicht bei jedem Neustart den Befehl erneut aufrufen muss, werden die Einstellungen über den folgenden Befehl in der Datei /etc/iptables.rules gespeichert:
sudo iptables-save > /etc/iptables.rules
Anschließend wird dafür gesorgt, dass die Einstellungen nach jedem Neustart wieder geladen werden. Dazu legt man ein Skript im Verzeichnis /etc/network/if-pre-up.d an.
sudo touch /etc/network/if-pre-up.d/iptables.load sudo chmod 755 /etc/network/if-pre-up.d/iptables.load
Das Skript wird mit folgendem Inhalt gefüllt:
1 2 3 | #!/bin/sh iptables-restore < /etc/iptables.rules exit 0 |
Beim Neustart wird das Skript ausgeführt und die Einstellungen von iptables werden wieder geladen. Tomcat ist damit wieder unter Port 80
erreichbar.
Hinweis:
Wenn die Einstellungen beim Neustart nicht geladen werden, dann kann man den Aufruf des Skripts in der Datei /etc/rc.local eintragen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Weiterleitung auf Port 80 aktivieren /etc/network/if-pre-up.d/iptables.load exit 0 |
Benutzer und Rollen definieren¶
Um Tomcat über die Oberfläche administrieren zu können, müssen noch Benutzer und Rollen angelegt werden. Dazu muss die Datei /etc/tomcat6/tomcat-users.xml bzw. /var/lib/tomcat7/conf/tomcat-users.xml editiert [3] werden.
Im folgenden Beispiel wurden die Rollen "Admin" und "Manager" angelegt und dem Benutzer "TestMan1" zugeordnet. Dem Benutzer "TestMan2" wurde lediglich die Rolle "Manager" zugeordnet.
1 2 3 4 5 6 | <tomcat-users> <role rolename="manager"/> <role rolename="admin"/> <user username="TestMan1" password="StrengGeheim" roles="admin,manager"/> <user username="TestMan2" password="StrengGeheim" roles="manager"/> </tomcat-users> |
Ab Tomcat 7 muss die Rolle, die auf die graphische Administrationsoberfläche zugreifen kann, allerdings "manager-gui" heißen. Seit Version 7 ist nämlich die "Manager" Rolle in 4 Bereiche unterteilt: "manager-gui", "manager-script", "manager-jmx" und "manager-status". Welche Rechte diese Rollen im Einzelnen besitzen steht in der Tomcat 7 Dokumentation 🇬🇧
Hinweis:
Achtung: nicht vergessen die Kommentarklammern zu entfernen
1 2 3 | <!-- this is a comment over several lines --> |
Damit die Änderungen wirksam werden, muss der Tomcat-Server neu gestartet werden [5].
Virtuelle Hosts¶
Mittels virtuelles Hosts können auf einem Webserver mehrere Webseiten auf einmal gehostet werden. Dies bietet den Vorteil, dass IP-Adressen gespart werden und dass nicht ganz ausgelastete Server mehr ausgelastet werden können. Mehr zu dem Thema virtuelle Hosts findet man hier.
Um virtuelle Hosts zu definieren, muss die Xml-Datei server.xml im Konfigurationsverzeichnis des Tomcats editiert werden. Innerhalb des Xml-Tags Engine muss ein neuer Tag namens Host erstellt werden.
1 2 3 | <Host name="virtuellerHost.de" appBase="/opt/tomcat/webapps/virtuellerHost"> <Context path="" docBase="." /> </Host> |
Nach dem Editieren der XML-Datei server.xml, muss der Tomcat neu gestartet werden [5].
Wird die Webseite http://virtuellerHost.de
im Browser aufgerufen, dann sendet der Tomcat die Webseite, die sich im Verzeichnis /opt/tomcat/webapps/virtuellerHost befindet, an den aufrufenden Browser. Der Webserver schaut ebenfalls nach, ob sich eine neuere War-Datei in /opt/tomcat/webapps mit dem Namen virtuellerHost.war befindet. Sollte dem so sein, dann aktualisiert der Webserver die Webseite mittels der War-Datei.
Links¶
Projektseite 🇬🇧
Tomcat als lokaler Testserver 🇩🇪 - deutschsprachige Anleitung, ??/2007
Guacamole 🇬🇧 - "clientless remote desktop gateway" auf Basis von Tomcat; ermöglicht den Fernzugriff via Browser