Autres versions

Vous êtes ici : Installer et exploiterInstallationServeur applicatifTomcat

Installation de Tomcat

Procédure d'installation du serveur Tomcat

Cette page décrit les étapes d'installation et de configuration de Tomcat, à installer sur le serveur applicatif.

Pré-requis

Installation

Note

L'installation via les dépôts fournis par votre distribution est recommandée. Toutefois, si votre distribution n'intègre pas dans ses dépôts la dernière version de Tomcat requise, la procédure ci-dessous vous permet d'installer Tomcat manuellement. 

  • La procédure ci-dessous décrit une installation manuelle du serveur Tomcat. Vous pouvez modifier les répertoires d'installation si besoin. Il faudra dans ce cas reporter ces chemins dans les étapes suivantes d'installation (voir ci-après).
    #Créer un groupe tomcat
    groupadd tomcat
    
    #Créer un user tomcat
    useradd -g tomcat -d /opt/tomcat -s /usr/sbin/nologin tomcat
    
    #Télécharger la dernière version de tomcat 9
    cd /tmp
    export CURRENT_VERSION="$(wget -qO- https://downloads.apache.org/tomcat/tomcat-9/ | grep -o "href=\"v9\.[^/]*/" | grep -oP "9.[^/]*" | tail -1)"
    wget https://downloads.apache.org/tomcat/tomcat-9/v${CURRENT_VERSION}/bin/apache-tomcat-${CURRENT_VERSION}.tar.gz
    
    #Télécharger le md5 correspondant
    wget --no-check-certificate https://downloads.apache.org/tomcat/tomcat-9/v${CURRENT_VERSION}/bin/apache-tomcat-${CURRENT_VERSION}.tar.gz.sha512
    
    #Calculer le sha512sum du targz téléchargé
    sha512sum apache-tomcat-${CURRENT_VERSION}.tar.gz
    
    #Le comparer à celui attendu:
    cat apache-tomcat-${CURRENT_VERSION}.tar.gz.sha512
    
    #Installer le targz
    tar -zxvf apache-tomcat-${CURRENT_VERSION}.tar.gz
    mkdir /opt/tomcat/
    mv apache-tomcat-${CURRENT_VERSION}/* /opt/tomcat/
    
    #Déplacer le répertoire des logs dans /var/log
    mkdir /var/log/tomcat
    rmdir /opt/tomcat/logs
    ln -s /var/log/tomcat /opt/tomcat/logs
    
    #Positionner les droits
    chown -R tomcat:tomcat /var/log/tomcat/
    chown -R tomcat:tomcat /opt/tomcat/
    
    #Nettoyer les fichiers temporaires et la variable d'env
    rm -Rf /tmp/apache-tomcat-${CURRENT_VERSION}
    unset ${CURRENT_VERSION}

Configuration du contrôle des ressources

Le fonctionnement du logiciel nécessite l'utilisation de ressources, notamment des fichiers. La limite du nombre de fichiers ouverts par l'utilisateur tomcat doit être augmentée.
Si possible, passer la limite à "unlimited", sinon passer la limite à 1048576.

Pour cela, sur Debian 10, ajouter les lignes suivantes dans le fichier /etc/default/tomcat9 :

ulimit -Hn 1048576
ulimit -Sn 1048576

Dans les autres cas, éditer le fichier /etc/security/limits.conf :

...
#<domain>      <type>  <item>         <value>
...
tomcat         -       nofile         unlimited
...

Script de lancement

Avec systemd

Dans le répertoire, /etc/systemd/system, créer un fichier tomcat.service (vérifiez les chemins indiqués dans le fichier exemple, et modifiez-les si besoin, pour qu'ils correspondent à votre environnement).

Le lancement s'effectue alors avec la commande

systemctl start|stop|restart|status|enable|disable tomcat

Avec un script de démarrage

Dans le dossier /etc/init.d, créer un fichier tomcat avec les droits d'exécution (vérifiez les chemins indiqués dans le fichier exemple, et modifiez-les si besoin, pour qu'ils correspondent à votre environnement).

Le lancement s'effectue alors avec la commande

/etc/init.d/tomcat stop|start|restart|status|kill


Déclaration de l'application

Le fichier à éditer est /opt/tomcat/conf/server.xml

Par défaut, le connecteur HTTP est activé et écoute sur le port 8080.
Si vous souhaitez utiliser le connecteur AJP, suivez les étapes décrites dans cette page.
 
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
    <Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
    <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on"/>
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
    <Service name="Catalina">
        <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="60000" maxThreads="150" URIEncoding="UTF-8" redirectPort="8443"/>
        <Engine name="Catalina" defaultHost="localhost">
            <Host name="localhost" autoDeploy="false" unpackWARs="false" deployOnStartup="false">
                <Context docBase="/web/ksup/webapp" path="" crossContext="true" allowLinking="false"/>
                <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                       prefix="localhost_access_log" suffix=".txt"
                       pattern="%h %l %u %t '%r' %s %D %b"/>
            </Host>
        </Engine>
    </Service>
</Server>

En fonction de votre environnement et des usages de votre application, il peut être nécessaire d'adapter les paramètres suivants :

  • port : port d'écoute du connecteur HTTP de Tomcat, par défaut 8080. Cette valeur est utilisée dans la déclaration du proxypass apache.
  • connectionTimeout : temps durant lequel une connexion acceptée par Tomcat peut être mise en attente (milliseconde)
  • maxThreads : nombre maximum de "thread" Java que pourra exécuter Tomcat en même temps
Remarque : il est fortement recommandé de désactiver tous les autres "Connector" présents dans le fichier "server.xml".

En fonction de votre environnement il peut être nécessaire d'adapter le paramètre allowLinking :

  • allowLinking : changer la valeur à "true" si vous utilisez des liens symboliques pour certains dossiers de l'application
Remarque : il est fortement recommandé de désactiver tous les autres "Host" présents dans le fichier "server.xml".


Options de démarrage

Le fonctionnement et l'exploitation des sites gérés par ksup nécessitent l'ajout de différents paramètres dans la chaîne de démarrage de la JVM.
Ces options peuvent être renseignées dans un fichier setenv.sh situé dans le répertoire d'installation du tomcat /opt/tomcat/bin.
chown tomcat: setenv.sh
  • Créer un fichier setenv.sh
    cd /opt/tomcat/bin
    vi setenv.sh
  • Ajouter le contenu suivant:
    #Positionnement du répertoire de configuration externe
    JAVA_OPTS="${JAVA_OPTS} -Dconf.dir=/web/ksup/storage/conf"
    
    #Gestion de la mémoire de la JVM
    JAVA_OPTS="${JAVA_OPTS} -Xms4G -Xmx4G"
    
    #Gestion du mode de libération de la mémoire
    JAVA_OPTS="${JAVA_OPTS} -XX:+UseG1GC"
    
    #Activation de la journalisation des libération mémoire
    JAVA_OPTS="${JAVA_OPTS} -Xlog:gc*:file=/web/ksup/storage/logs/$(hostname)_$(date +%s)-gc.log:time,uptime,tags"
    
    #Désactivation de la tentative de rattachement à un display
    JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"
    
    #Configuration de la locale par défaut
    JAVA_OPTS="$JAVA_OPTS -Duser.language=fr -Duser.country=FR"
    
    #Configuration en IPV4
    JAVA_OPTS="${JAVA_OPTS} -Djava.net.preferIPv4Stack=true"
  • Positionner les droits
    chown tomcat: setenv.sh
Au démarrage du serveur tomcat, le fichier setenv.sh sera automatiquement intégré dans le processus de démarrage.


Configuration d'une session multi-domaine

Si les urls des sites virtuels sont construits suivant la même forme, par exemple, *.mon-site.fr, il est recommandé d'utiliser une configuration de cookie de session  multi-domaine.
Cette configuration présente l'avantage de n'utiliser qu'une seule session tomcat pour gérer l'authentification sur tout un ensemble de domaines, et réduit donc les ressources utilisées.
La mise en oeuvre de cette configuration s'appuie sur l'utilisation de 2 attributs de la balise <Context /> du fichier server.xml de tomcat. 
L'attribut sessionCookieName permet de modifier le nom du cookie de session. Par défaut, cet attribut prend la valeur "JSESSIONID".
L'attribut sessionCookieDomain permet d'indiquer la portée du cookie de session. Par défaut, le cookie de session n'est valable que pour le domaine sur lequel il a été créé.
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
   ...
            <Host name="localhost" autoDeploy="false" unpackWARs="false" deployOnStartup="false" sessionCookieName="JSESSIONID" sessionCookieDomain="mon-site.fr">
                <Context docBase="/web/ksup/webapp" path="" crossContext="true" allowLinking="false"/>
                <Valve className="org.apache...
   ...
</Server>
Avec cette configuration, il arrive que le cookie de session utilisé pour l'environnement de production interfère avec le cookie utilisé pour l'environnement de préproduction.
C'est le cas lorsque le domaine de préproduction, par exemple "preprod.mon-site.fr" est lui-même un sous-domaine de la production, par exemple "mon-site.fr"
Pour configurer un environnement de préproduction pour lequel le domaine est un sous domaine de la production, il suffit de spécifier un nom de cookie de session différent :
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
   ...
            <Host name="localhost" autoDeploy="false" unpackWARs="false" deployOnStartup="false" sessionCookieName="JSESSIONIDPP" sessionCookieDomain="preprod.mon-site.fr">
                <Context docBase="/web/ksup/webapp" path="" crossContext="true" allowLinking="false"/>
                <Valve className="org.apache...
   ...
</Server>


Configuration en mode cluster

L'application peut être configurée pour fonctionner en mode cluster.
Merci de vous référer à la documentation détaillant la configuration de ce mode : Configuration du mode cluster

Mis à jour le 15 septembre 2023