Archiv/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:

  1. ⚓︎ Installation von Programmen

  2. ⚓︎ Bearbeiten von Paketquellen

  3. ⚓︎ Einen Editor öffnen

  4. ⚓︎ Umgebungsvariablen setzen

  5. ⚓︎ Dienste verwalten

Inhaltsverzeichnis
  1. Voraussetzungen
  2. Installation
  3. Aufruf
  4. Tomcat über Port 80 erreichen
  5. Benutzer und Rollen definieren
  6. Virtuelle Hosts
  7. Links

./tomcat_logo.png 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:

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]:

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]:

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:

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.