Tutorial: Apache, Tomcat und mod_jk unter Debian GNU/Linux

Leider gibt es im Moment keine einfache Möglichkeit, Tomcat aus Debian-Paketquellen zu installieren. Man hört auch häufig, Tomcat sei besonders schwierig und kryptisch zu installieren, aber so schlimm ist es wieder nicht, wenn man sich schon ein bißchen mit Linux auskennt ;)

Hier eine kleine Einführung dazu, was Tomcat eigentlich ist und was er macht:
http://tomcat.apache.org/tomcat-5.5-doc/jasper-howto.html

Ich gehe in diesem Tutorial davon aus, daß man sich eine lokale Entwicklungs- und Testumgebung für die JSP- und Servlet-Entwicklung schaffen möchte und daß Apache 2.2.x bereits installiert und lauffähig ist. Daher sollte man als allererstes nachsehen, welche Java-Version überhaupt installiert ist:

~$ java -version
java version "1.5.0_13"

Wenn eine Version älter als 1.5.0 (Java 5) vorhanden ist, sollte unbedingt ein Update auf diese gemacht werden. Unter Debian geschieht dies mittels

~$ apt-get install sun-java5-jre sun-java5-jdk

Zur Konfiguration von Eclipse als IDE der Wahl für die JSP- und Servlet-Entwicklung empfehle ich einen Blick auf dieses hervorragende Tutorial in deutscher Sprache:
Teil 1: http://dm.zimmer428.net/index.php/archives/238
Teil 2: http://dm.zimmer428.net/index.php/archives/239

Seit neuestem gibt es auch bereits fertig vorkonfigurierte Eclipse-Pakete für die JSP- und Servlet-Entwicklung, darauf werde ich jedoch in meinem nächsten Tutorial über die Installation von kompletten J2EE-Umgebungen mit JBoss unter Debian zurückkommen.

Tomcat installieren und konfigurieren

Dazu wird zunächst die neueste Version von Tomcat 5.5 von der Downloadseite heruntergeladen:
http://tomcat.apache.org/download-55.cgi

Das erhaltene Archiv hat eine Bezeichnung ähnlich dieser:

apache-tomcat-5.5.x.tar.gz

wobei das x die Versionsnummer des jeweiligen Minor Release anzeigt, im Moment also apache-tomcat-5.5.25.tar.gz. Unter der Annahme, daß das Archiv nach /home/user/tmp heruntergeladen wurde, wird das Archiv entpackt:

~$ cd /home/user/tmp
~$ tar xvzf apache-tomcat-5.5.25.tar.gz

Nun wird das Verzeichnis apache-tomcat-5.5.25 an das gewünschte Ziel kopiert, hier beispielhaft nach /opt:

~$ mv apache-tomcat-5.5.25 /opt
~$ cd /opt
~$ ln -s apache-tomcat-5.5.25 tomcat

Tomcat soll als Daemon laufen, daher benötigen wir das Tool jsvc. Dieses ist in dem heruntergeladenen Archiv enthalten, muß jedoch kompiliert werden:

~$ cd apache-tomcat-5.5.25/bin
~$ tar xvzf jsvc.tar.gz
~$ cd jsvc-src
~$ ./configure --with-java=/usr/lib/jvm/java-1.5.0-sun
~$ make
~$ cp jsvc /opt/tomcat/bin/

Als nächstes wird das mitgelieferte Init-Skript an die richtige Stelle kopiert …

~$ cd native
~$ cp Tomcat5.sh /etc/init.d/tomcat

… und angepaßt:

~$ vi /etc/init.d/tomcat
JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
CATALINA_HOME=/opt/tomcat
DAEMON_HOME=/opt/tomcat
TOMCAT_USER=tomcat
CATALINA_BASE=/opt/tomcat\n$DAEMON_HOME/bin/jsvc \

Achtung, die letzte Zeile kommt sowohl in der Sektion “start” als auch in der Sektion “stop” vor und ist an beiden Stellen zu ändern!

Dann werden noch für den gewünschten Runlevel, in dem Tomcat automatisch gestartet und gestoppt werden soll, die symbolischen Links gesetzt:

~$ cd /etc/rc5.d
~$ ln -s ../init.d/tomcat S65tomcat
~$ ln -s ../init.d/tomcat K65tomcat

Tomcat soll, wie das auf Linux-Systemen aus Sicherheitsgründen für solche Applikationen allgemein üblich ist, unter einem eigenen User laufen. Also fügen wir dem System einen User und eine Gruppe — beide namens “tomcat” — hinzu, wobei der User tomcat außerdem zu der Gruppe www-data gehören soll:

~$ groupadd -g 65 tomcat
~$ useradd -u 65 -g 65 -d /opt/tomcat -s /bin/false -c "Tomcat User" tomcat
~$ chown -R tomcat:tomcat /opt/apache-tomcat-5.5.25
~$ usermod -G www-data tomcat

Jetzt kann Tomcat gestartet werden:

~$ /etc/init.d/tomcat start

Die Beispielapplikationen, die Tomcat mitbringt, sind im Dateisystem unter /opt/tomcat/webapps zu finden. Daher wird jetzt, wenn alles richtig gemacht wurde, unter http://localhost:8080 die Tomcat-Startseite zu sehen sein! Unter http://localhost:8080/jsp-examples/ sind dann die mitgelieferten JSP-Beispiele zu bewundern.

Nun ist es aber sicher nicht sinnvoll, jeden Aufruf an den neu installierten Tomcat über dessen Default-Port 8080 am Webserver laufen zu lassen. Darum wird im nächsten Schritt der Tomcat Connector mod_jk installiert.

mod_jk installieren und konfigurieren

Dazu wird gegebenenfalls zunächst weitere Software benötigt, die mit folgendem Kommando installiert wird:

~$ apt-get install libtool autoconf \
gcc g++ apache2-prefork-dev

Nun wird die neueste Version von mod_jk 1.2, zur Zeit ist das 1.2.25, von der Downloadseite heruntergeladen:
http://tomcat.apache.org/download-connectors.cgi

Das Archiv hat eine Bezeichnung ähnlich tomcat-connectors-1.2.x-src.tar.gz, siehe oben.

Lustigerweise ist die Entwicklung des präsumptiven Nachfolgers mod_jk2 eingestellt und stattdessen mod_jk einer Auffrischung unterzogen worden, was aber nicht weiter stören soll ;)

Das Archiv wird entpackt und kompiliert:

~$ cd /home/user/tmp
~$ tar xvzf tomcat-connectors-1.2.25-src.tar.gz
~$ cd tomcat-connectors-1.2.25-src/native
~$ ./configure --with-apxs=/usr/bin/apxs2
~$ make
~$ make install

Als nächstes müssen eine Reihe von Skripten angelegt werden:

~$ cd /etc/apache2
~$ vi workers.properties
# Tomcat and Java configuration
workers.tomcat_home=/opt/tomcat
workers.java_home=/usr/lib/jvm/java-1.5.0-sun
ps=/
worker.list=mainworker
# Definition for local worker using AJP 1.3
worker.mainworker.type=ajp13
worker.mainworker.host=localhost
worker.mainworker.port=8009
worker.mainworker.cachesize=20
~$ cd /etc/apache2/mods-available
~$ vi jk.load
LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so
~$ vi jk.conf
<IfModule mod_jk.c>
JkWorkersFile /etc/apache2/workers.properties
JkLogFile /var/log/apache2/mod_jk.log
JkLogLevel error
</IfModule>

Jetzt werden jk.load und jk.conf noch für Apache verfügbar gemacht …

~$ cd /etc/apache2/mods-enabled
~$ ln -s ../mods-available/jk.conf jk.conf
~$ ln -s ../mods-available/jk.load jk.load

.. und schließlich Tomcat neu gestartet:

~$ /etc/init.d/tomcat stop
~$ /etc/init.d/tomcat start

Nun ist nur noch ein letzter Schritt notwendig, nämlich dem Apachen zu sagen, was genau er an Tomcat weiterleiten soll.

Apache konfigurieren

Wie oben schon gesagt, bezieht sich dies alles auf Apache 2.2.x. Die Virtual Hosts, die der jeweilige Apache kennen soll, sind im Verzeichnis /etc/apache2/sites-available konfiguriert. Dort findet sich eine Datei namens “default”, in der die Vorgabe enthalten ist. Da im Moment keine weiteren Virtual Hosts benötigt werden, wird der Einfachheit halber diese Konfiguration verwendet.

Die Beispielapplikationen, die Tomcat mitbingt, sind wie erwähnt unter /opt/tomcat/webapps zu finden. Wenn nun eigene Projekte unter /opt/tomcat/webapps/myprojects abgelegt werden und im Browser unter http://localhost/myprojects/ erreichbar sein sollen, wird in der Datei default innerhalb des Virtual Host ein Eintrag hinzugefügt:

~$ cd /etc/apache2/sites-available
~$ vi default
Alias /myprojects/ "/opt/tomcat/webapps/myprojects/"
<Directory "/opt/tomcat/webapps/myprojects/">
Options Indexes +FollowSymLinks
</Directory>
JkMount /myprojects/* mainworker

Die letzte Zeile weist Apache an, mittels des (siehe oben) in /etc/apache2/workers.properties definierten Workers “mainworker” alle Aufrufe an http://localhost/myprojects/ an Tomcat weiterzuleiten.

Um dies zu testen, bietet es sich an, die Beispielapplikationen aus /opt/tomcat/webapps/jsp-examples nach /opt/tomcat/webapps/myprojects zu kopieren:

~$ cp /opt/tomcat/webapps/jsp-examples /opt/tomcat/webapps/myprojects

Nach einem Neustart von Apache mittels

~$ /etc/init.d/apache2 restart

sollte nun http://localhost/myprojects/jsp-examples/ im Browser erreichbar sein!

Weiteres zur Konfiguration von Apache mit mod_jk ist hier zu finden:
http://tomcat.apache.org/connectors-doc/

Damit sind Installation und Konfiguration abgeschlossen, und der Entwicklung eigener JSPs und Servlets steht nichts mehr im Wege!

Leider habe ich bis jetzt noch keine Möglichkeit gefunden, wie man Apache und Tomcat dazu überreden kann, JSPs und Servlets aus User-Homeverzeichnissen heraus auszuführen. Sollte ein geneigter Leser über diesbezügliche Erfahrungen verfügen, freute ich mich sehr über Feedback!

Hier noch ein Link zu weiterführenden Informationen zum Finetuning von Tomcat in Produktionsumgebungen:
http://jspwiki.org/wiki/DeploymentOptimizations

Quellen:
http://daff.neyeon-digital.de/blog/2007/02/07/apache2-tomcat-55x-mod_jk-12x/
http://www.crazysquirrel.com/computing/debian/servers/tomcat55.jspx

Add post to: Delicious Reddit Slashdot Digg Technorati Google
(already: 8) Comment post

Comments

No comments for this post

Required. 30 chars of fewer.

Required.

captcha image Please, enter symbols, which you see on the image