Pré-requis
Tomcat est un serveur de servlet et de JSP. Tomcat est écrit en Java et ne nécessite rien d’autre qu’un J2SDK pour fonctionner. En réalité, il pourrait fonctionner avec un JRE (Java Runtime Environment), mais il a besoin de la bibliothèque tools.jar fournie avec le J2SDK.
Avoir un J2SDK installé et fonctionnel : Par convention le J2SDK est installé dans /opt, et le lien /opt/java pointe vers le dossier /opt/j2sdk1.4.x_yy.
Installation de Tomcat
Pour installer Tomcat, il faut le télécharger :
# cd ~
# cd download
# mkdir Tomcat
# get http://mir2.ovh.net/ftp.apache.org/dist/jakarta/tomcat-4/v4.1.30/bin/jakarta-tomcat-4.1.30.tar.gz

Créez l’environnement de Tomcat :
# cd ~/download/Tomcat
# sudo mkdir /home/intranet
# sudo mkdir /home/intranet/programmes
# tar -zxf jakarta-tomcat-4.1.30.tar.gz
# sudo mv jakarta-tomcat-4.1.30 /home/intranet/programmes/tomcat-4.1.30
# sudo ln -fs /home/intranet/programmes/tomcat-4.1.30 /home/intranet/programmes/tomcat
# sudo ln -fs /opt/java /home/intranet/programmes/java
# sudo adduser --system --home /home/intranet/programmes/tomcat --shell /bin/true --disabled-password tomcat
# sudo chown tomcat:root /home/intranet/programmes/*
# sudo chown -R root:root /home/intranet/programmes/tomcat/*

Comme l’environnement de Tomcat a été paramétré, nous allons créer en tant qu’utilisateur root, un script de démarrage de Tomcat, placé dans /etc/init.d/tomcat :
#!/bin/sh
# Fichier /etc/init.d/tomcat
SUCCESS=0
FAILURE=1
exitval=${SUCCESS}
export TOMCAT_START=1
export TOMCAT_VERSION="4.1"
# Definition de la Home de Java et des paramètres e la JVM
export JAVA_HOME="/home/intranet/programmes/java"
export JAVA_OPTS="-server -Xms16M -Xmx96M"
export JAVA_ENDORSED_DIRS=""
# Definition de la Home de Tomcat
export CATALINA_HOME=/home/intranet/programmes/tomcat
export CATALINA_BASE=${CATALINA_HOME}
export BASEDIR=${CATALINA_HOME}
# Definition de variables supplementaires passees a Tomcat
export CATALINA_TMPDIR=${CATALINA_BASE}/temp
export CATALINA_OPTS="-Dfile.encoding=iso8859-1"
export CATALINA_PID=/var/run/tomcat/tomcat.pid
# Pour des raisons de compatibilite
export TOMCAT_HOME=${CATALINA_HOME}
export TOMCAT_OPTS=${CATALINA_OPTS}
export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/home/intranet/programmes/java/jre/bin
#...............................................................................
# Verification des fichiers
#...............................................................................
if [ ! -d /var/run/tomcat ]
then
if [ -f /var/run/tomcat ]
then
/bin/rm -f /var/run/tomcat
fi
/bin/mkdir /var/run/tomcat
/bin/chown -R tomcat /var/run/tomcat
fi
#...............................................................................
# Recherche de JavaHome
#...............................................................................
if [ -z "${JAVA_HOME}" ]
then
JAVA=`/usr/bin/which java`
if [ -z "${JAVA}" ] ; then
/bin/echo "Cannot find JAVA. Please set your PATH."
exit 1
fi
JAVA_BINDIR=`/usr/bin/dirname ${JAVA}`
JAVA_HOME=${JAVA_BINDIR}/..
else
JAVA=${JAVA_HOME}/jre/bin/java
JAVA_BINDIR=`/usr/bin/dirname ${JAVA}`
fi
if [ "${TOMCAT_OPTS}" = "" ] ; then
TOMCAT_OPTS=""
fi
if [ "${ANT_OPTS}" = "" ] ; then
ANT_OPTS=""
fi
if [ "${JSPC_OPTS}" = "" ] ; then
JSPC_OPTS=""
fi
oldCP=${CLASSPATH}
unset CLASSPATH
unset ClsPth
if [ -f ${JAVA_HOME}/lib/tools.jar ] ; then
ClsPth=${JAVA_HOME}/lib/tools.jar
fi
if [ "${TOMCAT_VERSION}" = "4.1" ]
then
if [ -f ${CATALINA_HOME}/bin/bootstrap.jar ] ; then
ClsPth=${ClsPth}:${CATALINA_HOME}/bin/bootstrap.jar
fi
if [ -f ${CATALINA_HOME}/common/lib/servlet.jar ] ; then
ClsPth=${ClsPth}:${CATALINA_HOME}/common/lib/servlet.jar
fi
fi
if [ "$oldCP" != "" ]; then
ClsPth=${ClsPth}:${oldCP}
fi
case $1 in
'start')
if [ "${TOMCAT_START}" -eq 1 ]
then
# Demarrage du process TOMCAT
start-stop-daemon --start --pidfile ${CATALINA_PID} --chuid tomcat --background --startas ${CATALINA_HOME}/bin/startup.sh
exitval=$?
if [ ! ${exitval} -eq 0 ]
then
echo "Cannot start tomcat"
fi
fi
;;
'stop')
if [ "${TOMCAT_START}" -eq 1 ]
then
# Arret du process TOMCAT
start-stop-daemon --stop --user tomcat
exitval=$?
if [ ! ${exitval} -eq 0 ]
then
start-stop-daemon --stop --user tomcat
exitval=$?
if [ ${exitval} -eq 0 ]
then
rm -f ${CATALINA_PID}
rm -rf ${CATALINA_HOME}/logs/*
rm -rf /home/intranet/logs/tomcat/context/*
else
echo "Cannot stop tomcat"
fi
else
rm -f ${CATALINA_PID}
rm -rf ${CATALINA_HOME}/logs/*
rm -rf /home/intranet/logs/tomcat/context/*
fi
unset FicLog
for FicLog in `find /home/intranet/webapps -type f -name '*\.log' -print 2>/dev/null`
do
rm -f ${FicLog}
done
fi
;;
*)
/bin/echo "usage: $0 {start|stop|restart}"
exitval=${FAILURE}
;;
esac
exit ${exitval}
Configurer Tomcat
Pour configurer Tomcat, il suffit de paramétrer le fichier $CATALINA_HOME/conf/server.xml de la manière suivante :
<?xml version='1.0' encoding='utf-8'?>
<Server className="org.apache.catalina.core.StandardServer" port="8005" debug="0" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" debug="0"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" debug="0"/>
<GlobalNamingResources>
<Resource name="Mail" scope="Shareable" type="javax.mail.Session"/>
<ResourceParams name="Mail">
<parameter>
<name>mail.smtp.host</name>
<value>smtp.mondomaine.org</value>
</parameter>
</ResourceParams>
</GlobalNamingResources>
<Service className="org.apache.catalina.core.StandardService"
debug="0"
name="Tomcat-Standalone">
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
redirectPort="8443"
bufferSize="8192"
port="8080"
connectionTimeout="20000"
scheme="http"
enableLookups="false"
secure="false"
protocolHandlerClassName="org.apache.coyote.http11.Http11Protocol"
debug="0"
proxyPort="0"
maxProcessors="35"
minProcessors="5"
tcpNoDelay="true"
acceptCount="10"
useURIValidationHack="false">
<Factory className="org.apache.catalina.net.DefaultServerSocketFactory"/>
</Connector>
<Engine className="org.apache.catalina.core.StandardEngine"
mapperClass="org.apache.catalina.core.StandardEngineMapper"
debug="0"
defaultHost="localhost"
name="Standalone">
<Logger className="org.apache.catalina.logger.FileLogger"
debug="0"
verbosity="1"
prefix="catalina_log."
directory="logs"
timestamp="true"
suffix=".log">
</Logger>
<Host className="org.apache.catalina.core.StandardHost"
appBase="/home/intranet/config"
liveDeploy="false"
mapperClass="org.apache.catalina.core.StandardHostMapper"
autoDeploy="true"
configClass="org.apache.catalina.startup.ContextConfig"
errorReportValveClass="org.apache.catalina.valves.ErrorReportValve"
debug="0"
deployXML="true"
contextClass="org.apache.catalina.core.StandardContext"
unpackWARs="true"
name="localhost">
<Alias>hotevirtuel.mondomaine.org</Alias>
<Alias>localhost</Alias>
<Logger className="org.apache.catalina.logger.FileLogger"
debug="0"
verbosity="1"
prefix="localhost."
directory="logs"
timestamp="true"
suffix=".log">
</Logger>
<Valve className="org.apache.catalina.valves.AccessLogValve"
debug="0"
prefix="access_default."
directory="logs"
pattern="%h %l %u %t "%r" %s %b"
resolveHosts="false"
suffix=".log">
</Valve>
<DefaultContext wrapperClass="org.apache.catalina.core.DefaultContext"
cookies="true"
crossContext="false"
reloadable="false"
swallowOutput="true"
useNaming="false">
</DefaultContext>
</Host>
</Engine>
</Service>
</Server>

Nous définissons ici un serveur fonctionnant sur le port 8005, et un serveur fonctionnant sur le port 8080. Le premier est utilisé par Tomcat pour arrêter Tomcat... D’ailleurs dans notre cas il n’est pas utilisé puisque nous avons créé notre propre script de démarrage de Tomcat.

Ce fichier de configuration nous indique que les fichiers définissant les contextes sont plaçés dans /home/intranet/config. Il nous faut donc créer ce dossier :
# mkdir /home/intranet/config

Ne pas oublier d’adapter ce fichier de configuration en indiquant un nom d’alias valide (remplacer
hotevirtuel.mondomaine.org par le nom de votre machine).

Sauvegardez vos modifications.

Placez vous dans le dossier $
CATALINA_HOME (/home/intranet/programme/tomcat en tant qu’utilisateur root.

Changez les droits des dossiers suivants :
# chown tomcat conf
# chown tomcat logs
# chown tomcat temp
# chown tomcat work
Création des contextes de base
J’entends par contexte de base, le contexte définissant la racine / et le contexte /manager très utile pour administrer Tomcat.
En tant qu’utilisateur root, créer le fichier /home/intranet/config/ROOT.xml, et insérez y le contenu suivant :
<Context className="org.apache.catalina.core.StandardContext"
path=""
docBase="/home/intranet/webapps/ROOT"
debug="0"
override="true"
privileged="false"
cachingAllowed="true"
displayName="Contexte Racine du Serveur">
<Logger className="org.apache.catalina.logger.FileLogger"
verbosity="1"
prefix="ROOT_"
directory="/home/intranet/logs/tomcat/context"
timestamp="true"
suffix=".log">
</Logger>
</Context>

Nous définissons ici un contexte ayant pour URL "" (Donc /) et dont l’application sera déployée dans le dossier /home/intranet/webapps/ROOT. Il convient donc de créer ce dossier :
# sudo mkdir /home/intranet/webapps
# sudo mkdir /home/intranet/webapps/ROOT
# sudo mkdir /home/intranet/webapps/ROOT/WEB-INF
# sudo touch /home/intranet/webapps/ROOT/WEB-INF/web.xml

De plus, les logs relatifs à ce contexte seront plaçés dans le fichier /home/intranet/logs/tomcat/context/ROOT_YYYY-MM-DD.log. Il n’est pas nécessaire de créer ce fichier, par contre, son chemin d’accès doit être valide, et l’utilisateur tomcat doit y avoir le droit en écriture et en création de fichier :
# sudo mkdir /home/intranet/logs
# sudo mkdir /home/intranet/logs/tomcat
# sudo mkdir /home/intranet/logs/tomcat/context
# sudo chown -R tomcat /home/intranet/logs/tomcat

Définissons le fichier /home/intranet/config/manager.xml de la manière suivante :
<Context className="org.apache.catalina.core.StandardContext"
path="/manager"
docBase="/home/intranet/programmes/tomcat/server/webapps/manager"
debug="0"
override="true"
privileged="true"
cachingAllowed="true"
displayName="Tomcat Manager Application">
<Logger className="org.apache.catalina.logger.FileLogger"
verbosity="1"
prefix="manager_"
directory="/home/intranet/logs/tomcat/context"
timestamp="true"
suffix=".log">
</Logger>
<Realm className="org.apache.catalina.realm.MemoryRealm"
debug="0"
pathname="conf/tomcat-users.xml"
validate="true">
</Realm>
<Manager className="org.apache.catalina.session.StandardManager"
algorithm="MD5"
checkInterval="60"
debug="0"
entropy="Context_manager"
maxActiveSessions="20"
randomClass="java.security.SecureRandom">
</Manager>
<ResourceEnvRef>
<name>users</name>
<type>org.apache.catalina.UserDatabase</type>
</ResourceEnvRef>
<ResourceLink name="users" global="UserDatabase" type="org.apache.catalina.UserDatabase"/>
</Context>

Rien de bien différent, sinon que nous utilisons le Realm de base de Tomcat. Notez que l’Apache Fundation ne préconise pas d’utiliser ce type de Realm en production. Nous verrons dans un autre article comment modifier ce Realm. A propos, un Realm est une ressource définissant une méthode d’authentification. Ici, il nous faut donc créer ou modifier le fichier conf/tomcat-users.xml. Comme il n’y a pas de chemin absolu, ce fichier est donc relatif à $
CATALINA_HOME, soit /home/intranet/programmes/conf/tomcat-users.xml :
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="tomcat" password="supermotdepasse" roles="admin,manager,tomcat,role1"/>
</tomcat-users>

Ici, nous définissons un utilisateur tomcat, ayant pour mot de passe "supermotdepasse" et appartenant à tous les groupes définis. En fait, seule la définition du groupe manager nous interresse dans notre cas.

Terminons la configuration du contexte racine (/) en éditant le fichier /home/intranet/webapps/ROOT/WEB-INF/web.xml :
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
</web-app>

Ce fichier XML ne contient en réalité rien, sinon que la définition d’une application web (web-app).
Démarrage de Tomcat
Pour démarrer le moteur Tomcat, il suffit d’executer notre script de démarrage, avec le paramètre start :
# sudo /etc/init.d/tomcat start
# ps -ef | grep tomcat
tomcat 461 435 0 07:59 ? 00:00:00 /home/intranet/programmes/java/bin/java -server -Xms16M -Xmx96M
[...]
# netstat -an | grep LISTEN | grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN

Pour démarrer automatiquement notre serveur Tomcat au démarrage du serveur, il faut l’inscrire sur les différents init :
# sudo update-rc.d tomcat start 25 2 3 4 5 . stop 75 0 1 6 .
Adding system startup for /etc/init.d/tomcat ...
/etc/rc0.d/K75tomcat -> ../init.d/tomcat
/etc/rc1.d/K75tomcat -> ../init.d/tomcat
/etc/rc6.d/K75tomcat -> ../init.d/tomcat
/etc/rc2.d/S25tomcat -> ../init.d/tomcat
/etc/rc3.d/S25tomcat -> ../init.d/tomcat
/etc/rc4.d/S25tomcat -> ../init.d/tomcat
/etc/rc5.d/S25tomcat -> ../init.d/tomcat
Premier Essai
Utilisez votre navigateur préféré, et pointez sur l’adresse : http://localhost:8080/manager/html. L’application manager doit vous demander de vous identifier. Indiquez dans cette fenêtre le compte tomcat avec le mot de passe défini dans conf/tomcat-users.xml. Si vous avez suivi scrupulesement cette procédure, vous devez voir apparaitre l’interface d’administration des contextes.