TOMCAT

De TwisterWiki
Aller à : navigation, rechercher

PRESENTATION

  • Tomcat est un serveur d'application écrite en java comme Websphere ou Jboss
  • Tomcat écoute par défaut sur les port 8080 et 8009
    • Le port 8080 permet d’accéder au manager si il est installé et aux webapps
    • Le port 8009 est utilisé pour communiqué avec apache et vi le mod_jk

INSTALLATION

  • Il existe deux méthodes d'installation pour mettre en place tomcat
    • En utilisant le paquets disponible sous Debian
    • En téléchargeant sur apache.org le tgz

INSTALLATION EN MODE "tgz"

  • C'est le mode d'installation que je préfère car tous les fichiers sont au même endroit et permet d'installer une version précise et faire cohabiter plusieurs tomcat
  • Télécharger un jdk chez oracle (anciennement sun)
  • Installer le jdk dans /usr/local
  • Faire un lien symbolique de /usr/local/jdk1.7.0_02_x64 vers /usr/local/jdk
  • Télécharger la version souhaitée de Tomcat (4, 5, 5.5, 6, 7) sur le site apache.org
  • Décompresser l'archive dans /usr/local
  • Faire un lien symbolique de /usr/local/apache-tomcat-7.0.30 vers /usr/local/tomcat
  • Créer un un user tomcat
  • Créer un script de démarrage basique
#! /bin/bash
#
### BEGIN INIT INFO
# Provides:          tomcat
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop tomcat server
### END INIT INFO
 
NAME="Tomcat 7.0.30"
TOMCAT_HOME=/usr/local/tomcat
CATALINA_HOME=/usr/local/tomcat
JAVA_HOME=/usr/local/jdk
CATALINA_OPTS="-Xms2048m -Xmx2048m -XX:MaxPermSize=128m -Djava.awt.headless=true"
TOMCAT_USER=tomcat
export TOMCAT_HOME CATALINA_HOME JAVA_HOME CATALINA_OPTS TOMCAT_USER
cd $TOMCAT_HOME/logs
case "$1" in
   start)
      echo -ne "Starting $NAME.\n"
      /bin/su $TOMCAT_USER $TOMCAT_HOME/bin/startup.sh
   ;;
   stop)
      echo -ne "Stopping $NAME.\n"
      /bin/su $TOMCAT_USER $TOMCAT_HOME/bin/shutdown.sh
   ;;
   restart)
      echo -ne "Stopping $NAME.\n"
      /bin/su $TOMCAT_USER $TOMCAT_HOME/bin/shutdown.sh
      sleep 10
      echo -ne "\n"
      echo -ne "\n"
      echo -ne "Starting $NAME.\n"
      /bin/su $TOMCAT_USER $TOMCAT_HOME/bin/startup.sh
   ;;
   *)
      echo "Usage: /etc/init.d/tomcat {start|stop|restart}"
      exit 1
   ;;
esac
exit 0

LES DOSSIERS PRINCIPAUX

 ------------------------------------------------------------------------
| Nom du dossier | Description                                           |
|----------------|-------------------------------------------------------|
| bin            | Contient les scripts de démarrage                     |
|----------------|-------------------------------------------------------|
| conf           | Contient les fichiers de configuration                |
|----------------|-------------------------------------------------------|
| lib            | Contient les librairies chargées par tomcat           |
|----------------|-------------------------------------------------------|
| logs           | Contient les fichiers de log de tomcat                |
|----------------|-------------------------------------------------------|
| webapps        | Contient les webapps (sites web)                      |
|----------------|-------------------------------------------------------|
| work           | Contient les fichiers de travail de tomcat.           |
|                | ce dossier peut être vider avant de redémarrer Tomcat |
|                | en cas de soucis apres une mise à jour de webapps     |
 ------------------------------------------------------------------------

LES FICHIERS DE CONFIGURATION

  • Les fichiers de configuration sont dans /usr/local/tomcat/conf/
 -------------------------------------------------------------------------
| Nom du fichier      | Description                                       |
|---------------------|---------------------------------------------------|
| catalina.properties | Contient les paths pour des librairies jar        |
|---------------------|---------------------------------------------------|
| context.xml         |                                                   |
|---------------------|---------------------------------------------------|
| logging.properties  | définit le format des logs de Tomcat              |
|---------------------|---------------------------------------------------|
| server.xml          | fichier de configuration principal de Tomcat      |
|---------------------|---------------------------------------------------|
| tomcat-users.xml    | permettant de définir les accès au manager        |
|---------------------|---------------------------------------------------|
| web.xml             | fichier de configuration (contient les types mime)|
 -------------------------------------------------------------------------

LE MANAGER

  • Le manager permet de réaliser quelque taches de maintenance
    • Arrêter une webapps ou context
    • Recharger un context
    • Supprimer un context
    • Mettre à jour un context
    • Voir le nombre de sessions par context
    • Déployer un nouveau context

AUTOMATISATION DES TACHES

  • Grace à l’outil Ant, il est possible de réaliser des scripts pour réaliser des taches d'administration
    • Ant est un outils qui exécute des commandes lues dans un fichier au format xml (build.xml)
    • Il est possible de lister les context d'un serveur, arrêter, démarrer, recharger, déployer un context avec cet outil
    • Ant à besoin de se connecter au manager de tomcat afin de réaliser toutes ces taches.

Démarrer un context

<target name="start" description="Start Tomcat context" depends="showInfos,input-context-name">
 <start url="${tomcat.manager.url}"
    username="${tomcat.manager.username}"
    password="${tomcat.manager.password}"
    path="/${context.name}"/>
 </target>

Stopper un context

<target name="stop" description="Stop Tomcat context" depends="showInfos,input-context-name">
 <stop url="${tomcat.manager.url}"
    username="${tomcat.manager.username}"
    password="${tomcat.manager.password}"
    path="/${context.name}"/>
 </target>

Lister les context

<target name="list" description="List Tomcat context" depends="showInfos">
 <list url="${tomcat.manager.url}"
    username="${tomcat.manager.username}"
    password="${tomcat.manager.password}"/>
</target>

ERREUR AU LANCEMENT DE TOMCAT

  • La Jvm n'est pas en mesure d'allouer la mémoire définie par les variable Xms et Xmx
Error occurred during initialization of VM
Could not reserve enough space for object heap


LES VHOSTS TOMCAT

  • Il est possible de mettre tomcat en tant que serveur web et de lui confier la gestion des vhosts
    • La configuration se fait dans le fichier server.xml
<Host name="$host" debug="0" appBase="webapps/$host"
       unpackWARs="true" autoDeploy="true"
   xmlValidation="false" xmlNamespaceAware="false">
 <Logger className="org.apache.catalina.logger.FileLogger"
 directory="logs"  prefix="$host\_log." suffix=".txt" timestamp="true"/>
 <Alias>$alias</Alias>
</Host>

PROXY_AJP

  • a2enmod proxy_ajp
  • Création du vhost apache
<VirtualHost *:80>
 ServerName FQDN
# Il Faut éviter que le serveur soit utilisé comme reverse proxy
 ProxyRequests Off
# Si on veut transmettre les véritables hostname à tomcat
 ProxyPreserveHost On

 <Proxy *>
  Order deny,allow
  Allow from all
 </Proxy>
 ProxyPass / ajp://localhost:8009/context/
 ProxyPassReverse / ajp://localhost:8009/context/
 ErrorLog /var/log/apache2/FQDN.error.log
 CustomLog /var/log/apache2/FQDN.access.log combined
</VirtualHost>

PROXY BALANCER

  • a2enmod proxy_balancer
  • Création du vhost apache
<VirtualHost *:80>
  ServerName FQDN
 ProxyStatus On
 <Location /server-status>
   SetHandler server-info
   Order deny,allow
   Deny from all
   Allow from localhost
 </Location>
 <Location /balancer-manager>
   SetHandler balancer-manager
   Order Deny,Allow
   Deny from all
   Allow from localhost
 </Location>
# APPLICATIONS CONFIGURATION
 <Proxy balancer://my-application-cluster>
   BalancerMember      http://server1:8080 route=server1 disablereuse=On
   # ...
   BalancerMember      http://serverN:8081 route=serverN disablereuse=On
 </Proxy>
# Si on veut transmettre les véritables hostname à tomcat
 ProxyPreserveHost On
 ProxyPass /my-application balancer://my-application-cluster/my-application stickysession=JSESSIONID
 ServerName FQDN
# Si on veut transmettre les véritables hostname à tomcat
 ProxyPreserveHost On

 ErrorLog /var/log/apache2/FQDN.error.log
 CustomLog /var/log/apache2/FQDN.access.log combined
</VirtualHost>