[[Vorlage(Archiviert, )]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Paketquellen_freischalten: Bearbeiten von Paketquellen] [:Editor: Einen Editor öffnen] [:Umgebungsvariable: Umgebungsvariablen setzen] [:Dienste: Dienste verwalten] }}} [[Inhaltsverzeichnis(1)]] [[Bild(./tomcat_logo.png, 48, align=left)]] ''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:Apache_Tomcat:Wikipedia]). Dieser Artikel beschreibt die Installation und Einrichtung von Apache Tomcat 6 bzw, Tomcat 7. Hinweise zur Verwendung können dem Abschnitt [#Links Links] entnommen werden. = Voraussetzungen = Bevor mit der Installation der Tomcat-Pakete begonnen werden kann, muss das [:Java/Installation#Sun-Java:Sun JDK] installiert werden. Zusätzlich muss man entweder die folgenden [:Umgebungsvariable: 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. {{{#!vorlage 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]: {{{#!vorlage Paketinstallation tomcat6, universe tomcat6-admin, universe }}} Für Tomcat 7 sind diese Pakete zu installieren [1]: {{{#!vorlage Paketinstallation tomcat7, universe tomcat7-admin, universe }}} = 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 als root] - Tomcat mit root-Rechten laufen lassen * [#Paketweiterleitung-mittels-iptables 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 [http://tomcat.apache.org/tomcat-3.3-doc/mod_jk-howto.html tomcat.apache.org] {en} {{{#!vorlage 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. }}} {{{#!vorlage 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 == {{{#!vorlage Warnung 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: {{{#!code xml }}} Hier ändert man den `Connector port=` von `8080` auf `80`. {{{#!vorlage 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: {{{#!code sh TOMCAT6_USER=root }}} Danach muss man Tomcat neustarten [5]. {{{#!vorlage Befehl sudo /etc/init.d/tomcat6 restart }}} oder {{{#!vorlage Befehl 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 [wikipedia:Network_Address_Translation:] (NAT). Diese Methode hat den Vorteil, dass Tomcat nicht mit root-Rechten ausgeführt wird, was das System sicherer macht. {{{#!vorlage 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: {{{#!vorlage Befehl 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 ` anpassen. Im Beispiel steht dieser Wert für die Standardschnittstelle auf '''eth0'''. {{{#!vorlage Hinweis Möchte man einen anderen Port als `80` verwenden, dann muss der Wert der Option `--dport ` 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: {{{#!vorlage Befehl 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. {{{#!vorlage Befehl 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: {{{#!code sh #!/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. {{{#!vorlage Hinweis Wenn die Einstellungen beim Neustart nicht geladen werden, dann kann man den Aufruf des Skripts in der Datei '''/etc/rc.local''' eintragen: {{{#!code sh #!/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. {{{#!code xml }}} 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 [http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html#Configuring_Manager_Application_Access Dokumentation] {en} {{{#!vorlage Hinweis Achtung: nicht vergessen die Kommentarklammern zu '''entfernen''' {{{#!code xml \}}} }}} 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 [wikipedia:Virtual_Hosting: 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. {{{#!code xml }}} 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 = * [http://tomcat.apache.org/ Projektseite] {en} * [http://www.jsptutorial.org/content/tomcat Tomcat als lokaler Testserver] {de} - deutschsprachige Anleitung, ??/2007 * [http://guac-dev.org/ Guacamole] {en} - "clientless remote desktop gateway" auf Basis von Tomcat; ermöglicht den Fernzugriff via Browser # tag: Programmierung, Server, Internet, Netzwerk, Apache, Java