Installation de Tomcat sous Linux

18.05.2004 | marcori
16426 visiteurs  -  43 visiteurs aujourd'hui  -  4 commentaires

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 &quot;%r&quot; %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.

4 commentaires

Trop de process Tomcat / Debian 23 février 2007 Borensky 1  rép.

Bjr,

Je cherche à comprendre pourquoi, j’ai autant de process Tomcat sur mon serveur Linux (environ 80) alors que j’ai max 8 JVM qui tourne. La Sarge tourne sous VMWare sous un PC std avec 850Mo de RAM. Ou se configure le nombre de process sous Tomcat ?

Merci de votre aide.

-----> Trop de process Tomcat / Debian

Trop de process Tomcat / Debian 27 février 2007

Il n’y a pas de paramétrage du nombre de processus sous Tomcat. Du moins, pas à ma conaissance. Ce qui est sur, c’est que Tomcat est un processus Java, et qu’ensuite, selon la JVM installée, Linux te montre tous les threads Java en tant que processus système. Si en plus les applications que tu déploie avec Tomcat ouvrent elles aussi des threads, tu as droit à encore plus de processus au niveau système. Mais la relation Nombre de processus java => conssomation mémoire n’est pas exactement vrai.

La JVM de Tomcat est lançée avec les paramètres -Xms et -Xmx qui permettent de limiter le TAS utilisé par la JVM. Au delà, c’est un OutOfMemoryError de la JVM, et seule la JVM plante, pas le système.

Quelles est ta version de Java ?

Installation de Tomcat sous Linux 21 novembre 2006 shogo 1  rép.

Bonjour, je n’arrive pas à lancer le serveur tomcat :

[root@**** init.d]# /etc/init.d/tomcat start /etc/init.d/tomcat : start-stop-daemon : command not found Cannot start tomcat

vous seriez me dire pourquoi ?

Installation de Tomcat sous Linux 22 novembre 2006 marcori

salut Shogo,

En premier lieu, je dirais ironiquement que Tomcat fonctionne sur un environnement professionnel, et que RedHat 7.2 ...  smiley :

Plus sérieusement, tout est dit dans le message : start-stop-daemon : command not found !!!

start-stop-daemon est un binaire utilisé en environnement debian. Il existe pour redhat 7.2 (c’est du moins ce que me dit rpm.pbone.net :

RedHat 7.X

dag.wieers.com/packages/kannel/kannel-1.3.2-5.0.rh7.rf.i386.rpm ftp.freshrpms.net/pub/freshrpms/redhat/7.3/kannel/kannel-1.3.2-3.0.rh7.fr.i386.rpm dag.wieers.com/packages/kannel/kannel-1.3.2-3.0.rh7.dag.i386.rpm

Télécharge l’un de ces RPM et installe le sur ta RedHat, et normalement, si c’est les mêmes sources que le start-stop-daemon de Debian cela devrait marcher.

Sinon, je n’ai que te conseiller de décortiquer un script de ton init.d pour voir quelle commande RedHat utilise pour lancer des scripts en tant que Daemon.

-----> RPM.pbone.net

 

Poster un nouveau commentaire


Modération de ce forum :

Ce forum est modéré à priori : votre contribution n'apparaîtra qu'après avoir été validée par un administrateur du site.


Emoticones :

(Pour insérer un émoticone, cliquez simplement sur l'image.)

:Thumbs::aime::bof::clindoeil::diable::en_colere::etoile::exclamation::fleur::interrogation::langue::lol::lunettes::mouai::pas_content::pleure_de_rire::rigolo::sourire::surprit::triste::xtra:

Titre :

Texte de votre message :

(Pour créer des paragraphes, laissez simplement des lignes vides.)


Lien hypertexte (optionnel)

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d'informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)


Qui êtes-vous ? (optionnel)


Articles les plus consultés

Téléchargez Firefox !

Libricks.org est motorisé par le logiciel libre Spip 1.8.3 associé au squelette graphique BliP 0.91

16 rubriques ... 30 articles ... 18 commentaires ... 28 sites référencés ... 50 visiteurs par jour (99041 au total)

Haut de page | XHTML 1.0 | CSS 2