Vous êtes sur la page 1sur 119

Serveur d'applications

Apache Tomcat
Tomcat

Serveur d'applications
Web
Tout en un
Serveur Web
Conteneur de Servlets (Servlet container ou Servlet engine)
Services Web
Par l'intermédiaire de cadriciels (CXF, AXIS)
Serveur EJB3 avec le projet Lightweight conteneur
Projet de la fondation Apache
Apache Software Foundation (ASF)
Historique de Apache

Projet NCSA (1995)


National Center for Supercomputer Applications
Université de l'Illinois
Communauté Apache (1999)
Reprise du projet NCSA
Nombreux patchs correctifs
D'où le nom de Apache (”A Patchy Web Server”)
Historique de Tomcat

Java Web Server


SUN MICROSYSTEM
Premier serveur de Servlets
Servlet container, Servlet engine
Donnation à la communauté Apache en 1999
Projet Tomcat
Utilisé par SUN pour les implémentations de
référence (RI) des technologies Servlet et JSP
JSR 154, JSR 245
Versions

Versions 3.x
1999
RI : Servlet 2.2 et JSP 1.1
Versions 4.x
2001
RI : Servlet 2.3 et JSP 1.2
Versions 6.x
2007
RI : Servlet 2.5 (JSR 154) et JSP 2.1 (JSR 245)
Licence

Apache License
La licence doit être inclue dans toute redistribution
Tout ajout de documentation doit être déclaré
Tout produit dérivé de Tomcat ne peut utiliser les
termes de Tomcat, Jakarta ou Apache
Tomcat n'a aucune garantie
Tomcat peut être utilisé dans des projets libres et
commerciaux
Les modifications ne nécessitent pas de libérer le
code source ou de rétrocession
Tomcat et serveurs Web

Tomcat peut être utilisé comme serveur de


Servlet uniquement
Partie dynamique de l'application
Couplé à un serveur Web
Partie statique
Images, CSS, HTML, XML
Apache (ASF)
IIS (Microsoft)
Tomcat tout en un

Serveur dynamique et statique


Connecteur HTTP
HTTP connector
Choix entre couplage et tout en un ?
Contexte de production ou d'étude
Performance
Équilibrage de charge, résistance aux pannes
Sécurité
Expérience
Installation simple

Variable d'environnement Tomcat


CATALINA_HOME
Nécessite l'installation d'un JRE
Distributions
SUN MICROSYSTEM, BEA, IBM
Variables d'environnement Java
JAVA_HOME, JRE_HOME
Variable d'environnement OS
PATH
Installation simple

Distributions pour toutes les plateformes


Sources et compilation avec Ant
Binaires
Distributions Tomcat
apache-tomcat-vesion.zip ou tar.gz
Assistant d'installation pour Windows
Windows installer
Installation simple

Vérification de la distribution
MD5
md5sum apache-tomcat-version.tar.gz
PGP
pgp -ka KEYS
pgp apache-version.zip
Tester le serveur
Exporter la variable CATALINA_HOME
Lancer : <TOMCAT_HOME>/bin/startup.sh ou bat
Installation simple

Modes de lancement
Manuel
Service
Vérification de l'installation
Navigateur
URL : http://localhost:8080
Accès à la page d'accueil de Tomcat
Processus de démarrage

bin/

startup.(sh|bat) shutdown.(sh|bat)

<start> <stop>

catalina.(sh|bat)
Structure après installation

Structure du répertoire principal


- Apache-tomcat/
+ bin/
+ conf/
+ lib/
+ logs/
+ temp/
+ webapps/
+ work/
Déploiement des aplications

Structure du répertoire webapps


- webapps/
+ docs/
+ examples/
+ host-manager/
- manager/
+ images/
+ META-INF/
+ WEB-INF/
+ ROOT/
Apache Portable Runtime (APR)

Librairie développée avec Apache 2


Utilisée avec Tomcat
Pour coupler Tomcat et un serveur Web natif
Apache, IIS
Amélioration des performances et de la stabilité
Nécessite une compilation
CATALINA_HOME/bin/tomcat-native.tar.gz
Architecture générale

Répertoire bin/
Ensemble de scripts
Démarrage et arrêt du serveur
Jamais utilisé au cours de l'exécution
Tous les autres répertoires sont configurables
Permet d'avoir plusieurs versions de Tomcat
Permet d'avoir plusieurs versions de JVM
Architecture générale

Répertoire conf/
Configuration et paramètres de Tomcat
Fichiers
catalina.policy, catalina.properties
logging.properties [ logs/ ]
context.xml
server.xml [ webapps/ – work/ ]
tomcat-users.xml
web.xml
Architecture générale

Répertoire lib/
Toutes les librairies nécessaires à Tomcat
Toutes les librairies partagées par les applications
Répertoire logs/
Journalisation des événements générés lors de
l'exécution de Tomcat
Répertoire temp/
Emplacement utilisé de façon temporaire
Architecture générale

Répertoire webapps/
Emplacement des applications
Archives WAR
Web Application ressource (WAR)
Tomcat déploie automatiquement toute archive WAR
copiée dans webapps/
Répertoire work/
Utilisé pour la compilation des pages JSP
Jasper regroupe les fonctionnalités de compilation
Utilise la brique logicielle Eclipse jdt
Variables d'environnement

Relation entre variables et répertoires


CATALINA_BASE – conf/
CATALINA_HOME – lib/
CATALINA-TMPDIR – temp/
Processus de démarrage

catalina.(sh|bat)

<invocation> <invocation>

setclasspath.(sh|bat) setenv.(sh|bat)

Lancement JVM
Options d'environnement

Possibilité de créer un script setenv.sh


JAVA_HOME
JAVA_OPTS
CATALINA_OPTS
CATALINA_HOME
CATALINA_BASE
CATALINA_TMPDIR
CATALINA_PID
Sinon options par défaut
Tomcat et ses composants

Structure imbriquée de composants


(1) x Server
(1,n) x Service
[ (1,n) x Connector ]
(1) x Engine
[ (1,n) x Logger] [(1,n) x Valve] [(1) x Realm]
(1,n) x Host
[ (1,n) x Logger] [(1,n) x Valve] [(1) x Realm]
(1,1) x Context
[ (1,n) x Valve] [(1) x Realm] [(1,n) x Wrapper]
Architecture globale

Server

Service
Logger Realm
Engine Valve
Connector

Host Valve Realm


Logger

Context

Wrapper
Wrapper Valve
Valve Realm
Architecture des composants

Server
Représente une instance du serveur d'application
Tomcat
Une seule instance par JVM
Séparation des instances
Permet la tolérance aux pannes
Interface Server
Classe d'implémentation StandardServer
Architecture des composants

Service
Un service regroupe un conteneur de type Engine
et un ensemble de connecteurs
Un service accepte les requêtes soumises par les
connecteurs et les route vers les Host
Un service possède un nom
Architecture des composants

Engine
Conteneur de plus haut niveau
Ne peut avoir de parent conteneur
Agrège des composants enfant
Représente le serveur de Servlets
Examine les entêtes HTTP pour déterminer le
serveur virtuel ou le contexte auquel adresser la
requête
Architecture des composants

Host
Enfant de Engine
Ressemble à la fonctionnalité Apache appelée
serveur virtuel (virtual host)
Plusieurs serveurs sur une même machine
Différenciés par leur adresse IP ou par leur nom
Avec Tomcat les multiples serveurs (host) sont
différenciés par leur nom
Ainsi www.exemple.com et www.exemple.net peuvent
résider sur une même instance de Tomcat
Architecture des composants

Context
Représente une seule application
Parent des Servlets et des Filters (StandardWrapper)
L'interface Context est implémentée par la classe
StandardContext
Configuration
Répertoire racine de l'application
Rechargement dynamique des classes modifiées de
l'application, pages d'erreur génériques
Paramètres d'initialisation, authentification
Architecture des composants

Connectors
Les connecteurs connectent les applications aux
clients
Ils représentent le point d'accès où les requêtes
des clients arrivent et où elles sont affectées à un
port sur le serveur
Le port HTTP par défaut est 8080
Le connecteur par défaut est Coyote qui implémente
HTTP 1.1
D'autres connecteurs sont disponibles
AJP (SSL), JServ, JK2
Architecture des composants

Realm
Gestion des authentifications et autorisations
Assisté par
Fichiers, annuaires LDAP, bases de données
Différentes portées
Engine, Host, Context
Chaque application peut écraser le comportement
général défini au niveau Engine ou Host
Architecture des composants

Valve
Composant qui permet à Tomcat d'intercepter une
requête et de la pré-traiter
Similaire au mécanisme de filtre des Filters mais à
un niveau plus élevé spécifique à Tomcat
Composants pouvant posséder des Valves
Engine, Host et Context
Fonctionnalités
Single Sign-on, journalisation, adresse IP des clients, pic
du trafic, bande passante, temps moyen d'une requête,
etc.
Architecture des composants

Loggers
Fournissent des rapports sur les composants
Niveaux Engine et Host
Avec un mécanisme d'héritage quand déclaré au niveau
Engine
Composant Connector

Tous les connecteurs fonctionnent sur le même


principe
Ils correspondent à un module côté Apache
mod_jk, mod_jk2, mod_proxy
Écrit en langage C
Côté tomcat
Module écrit en Java
Classe org.apache.catalina.Connector
Composant Connector

Les arguments du constructeur de Connector


HTTP/1.1 (HTTP et HTTPS)
AJP/1.3 (AJP)
Argument passé via le fichier server.xml
Balise <Connector>
Attribut protocol
Mapping différent selon le support de APR
Navigateur Web

Serveur Web
Apache
APACHE

Module Connecteur
(mod_jk ou mod_proxy)

Connecteur
Tomcat

TOMCAT
Tomcat Servlet
conteneur
Cycle de vie des composants

Démarrage des composants


Arrêt des composants
Composants dans une relation parent/enfant
Chaîne de réactions
Grâce aux interfaces
LifecycleEvent
LifecycleListener
Peut être ajoutée au niveau Server, Engine, Host ou Context
Déclaré dans server.xml ou context.xml
Balise <Listener>
Exemple de server.xml
<Server port=''8005'' shutdown=''SHUTDOWN''>

<Listener className=''org.apache.catalina.core.AprLifecyleListener''
SSLEngine=''on'' />

<Service name=''Catalina''>
<Connector port=''8080'' protocol=''HTTP/1.1'' maxThreads=''150''
connectionTimeout=''20000'' redirectPort=''8443'' />

<Engine name=''Catalina'' defaultHost=''localhost''>


<Realm className=''org.apache.catalina.realm.UserDatabaseRealm''
resourceName=''UserDatabase'' />

<Host name=''localhost'' appBase=''webapps''


unpackWARs=''true'' autoDeploy=''true'' />

</Egine>
</Service>
</Server>
Exemple de Listener

public MonEcouteur implements LifecycleListener {

public void lifecycleEvent(LifecycleEvent event) {

if(Lifecycle.START_EVENT.equals(event.getType())) {
// démarrage du composant et action(s) dépendantes
}

if(Lifecycle.STOP_EVENT.equals(event.getType())) {
// arrêt du composant et action(s) dépendantes
}
}
}
Tomcat

Configuration
Les fichiers de configuration

Une instance de Tomcat lit à son démarrage un


ensemble de fichiers XML de configuration
server.xml
Fichier principal de configuration des composants.
context.xml
Configuration par défaut des applications
Peut être écrasée en définissant un fichier context.xml placé
dans le META-INF/ de chaque application
web.xml
Descripteur de déploiement par défaut des applications
Variables d'environnement

Le répertoire qui possède la configuration de


Tomcat est spécifié dans la variable
CATALINA_BASE
Le sous-répertoire conf/ possède les fichiers XML
$CATALINA_BASE/conf/
server.xml, context.xml, web.xml
En l'absence de cette variable c'est la variable
CATALINA_HOME qui est utilisée
Instances multiples

La variable CATALINA_BASE permet d'avoir


plusieurs instances de Tomcat
Sans dupliquer entièrement l'installation de Tomcat
En définissant différentes valeurs de cette variable
Une valeur par instance de Tomcat
Valeurs décrites dans un shell script
Configuration avec server.xml

Par défaut
Un unique service dans une unique instance de
serveur
Imbrication de définitions de composants
Server port=8085
Service name=''Catalina
Connector port=8080
Connector port=8009
Engine name=Catalina
Realm className=org.apache.catalina.realm...
Host name=localhost
Éléments de server.xml

Attributs de l'élément <Server>


className
Classe du serveur à utiliser (défaut: StandardServer)
port
Port TCP d'écoute pour la commande shutdown
shutdown
La commande de shutdown exécutée par le serveur
Shutdown via telnet
$>ps aux | grep tomcat

root 11496 14.1 2.4 217032 25752 pts/0 ...

$>sudo telnet -E
$>telnet>open -a localhost 8005
$>telnet>SHUTDOWN

$>ps aux | grep tomcat


$>
Sous-éléments de <Server>

<Service>
Représente un ensemble de connecteurs
<Listener>
Un écouteur du cycle de vie du serveur
Événements: start, stop, after start, after stop
<GlobalNamingResources>
Définition des ressources JNDI globales
Éléments de <Service>

Attributs
className
La classe Java utilisée
name
Le nom du service utilisé par
La journalisation, l'administration et la gestion
Le nom du service doit être différent de celui du serveur
Sous-éléments de <Service>

Connector
Composant extérieur qui gère les connexions des
clients et les route vers Engine
Un connecteur gère le nombre de threads allouées
à chaque traitement de requête
Engine
Le composant qui traite les requêtes
Élément <Engine>

Attributs
className
La classe Java pour Engine
backgroundProcessDelay
Délai en seconde avant le processus background
Exemle
Le test pour les changements dans les applications Web
Redéploiement à chaud
Élément <Engine>

Attributs
defaultHost
Permet de désigner un <Host> virtuel par défaut.
Utilisé seulement si le <Host> ne peut être trouvé
jvmRoute
Un identifiant pour l'équilibrage de charge
name
Le nom de <Engine>
Sous-élément de <Engine>

Host
Pour définir un host virtuel
Context
Représente une collection de propriétés
Leur portée est globale pour toutes les applications
Realm
Permet de définir un mode d'authentification basé
sur des utilisateurs et leurs rôles
Sous-élément de <Engine>

Valve
Filtre propre à Tomcat définit au niveau Engine
Listener
Pour associé un écouteur d'événements à Engine
Élément <Host>

Attributs
className
appBase
Définition du répertoire de déploiement des applications
autoDeploy
À la valeur true, les applications sont automatiquement
déployées
name
Le nom du <Host>
BackgroundProcessDelay
Élément <Host>

Attributs
deployOnStartup
Si valeur à true alors déploie les applications au
démarrage du <Host>
deployXML
Si valeur à false alors le contexte de chaque application
doit être placé sous
$CATALINA_HOME/conf/<engine>/<host>/<app>.xml
Sinon le fichier META-INF/context.xml de chaque
application est accepté
Élément <Host>

Attributs
errorReportValveClass
Déclare la classe Java qui implémente l'erreur
Par défaut org.apache.catalina.valves.ErrorReportValve
unpackWARs
Si la valeur est à false alors Tomcat ne défait pas
l'archive WAR pour exécuter l'application
workdir
Définition d'un répertoire de travail pour les JSP et
Servlets
Par défaut le répertoire work/
Sous-éléments de <Host>

Context
Permet de configurer un ensemble de propriétés
pour une application déployée dans le <Host>
DefaultContext
Configure un ensemble de propriétés pour une
application qui n'a pas son propre <Context> de
défini
Realm
Le fichier context.xml

Par défaut dans le répertoire conf/


Dans une application
Sous le répertoire META-INF/
Découplé de l'application
Sous le répertoire
$CATALINA_HOME/conf/<engine name>/<host name>
Élément <Context>

Attributs
className
allowLinking
Permet le support des liens symboliques (Unix)
Par défaut à false
antiJARLocking
antiResourceLocking
backgroundProcessDelay
Élément <Context>

Attributs
cacheMaxSize
Permet de dimensionner la taille du cache en KB
Par défaut à 10240
cacheTTL
Temps de re-validation des objets dans le cache
Par déaut 5000 milli-secondes
Élément <Context>

Attributs
cachingAllowed
Détermine si les ressources statiques (images, pages)
peuvent être mises en cache
caseSensitive
cookies
Par défaut à true
crossContext
Par défaut à false. Positionner à true permet le partage
d'informations entre applications du même host virtuel
Élément <Context>

Attributs
docBase
Par défaut le nom de base de l'application est:
webapps/le nom de l'archive WAR
override
Permet d'indiquer si les arguments locaux écrasent les
arguments du contexte par défaut
path
Le chemin du contexte de base de l'application
Élément <Context>

Attributs
privileged
Par défaut à false, valeur true pour les applications de
type système (exemple: manager)
processTlds
Par défaut à true
reloadable
Par défaut à false. Détermine si Tomcat doit prendre en
compte les changements dans WEB-INF/classes et
WEB-INF/lib
Élément <Context>

Attributs
swallowOutput
Par défaut à false. Détermine si les sorties System.out et
System.err doivent être affichées dans les journaux
tldNamespaceAwaretldValidation
unloadDelay
Nombre de milli-secondes d'attente avant un unload
unpackWAR
Élément <Context>

Attributs
useNaming
Par défaut (true) crée et affecte un InitialContext à
l'application
workdir
wrapperClass
Déclare une classe Wrapper si nécessaire
Sous-éléments de <Context>

Loader
Configuration du class loader
Manager
Configure le gérant de session
Realm
Ressources
Le gérant de ressources
WatchedResource
Redéploiement si les ressources changent
Le fichier web.xml

Chaque application Web peut inclure un fichier


web.xml
Descripteur de déploiement
Il doit être placé dans le répertoire WEB-INF/
Il y a un web.xml global dans Tomcat
$CATALINA_HOME/conf
Sa portée est globale
Entête web.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
Rôle du web.xml

Indications données au serveur pour la prise en


charge des applications
Déploiement et chargement
Accès
Sécurité
Accueil
Ressources de contexte et de Servlet
Filtrage des Servlets
Types MIME
Servlet par défaut

La première configuration du fichier central


web.xml concerne la servlet par défaut
$CATALINA_HOME/conf/web.xml
Concerne les ressources statiques
Pages HTML, images, CSS, etc
Exemple: Servlet par défaut

<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Servlet Invoker

Utilisée pour charger et exécuter une Servlet


directement par une UR
Http://<host name>/<context path>/servlet/<servlet name>
Risque de sécurité en mode production
Le code est donc commenté dans le web.xml
Exemple de Servlet Invoker

<!--
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
-->
Servlet JspServlet

Elle convertie les pages JSP en Servlets


Génération de code source .java
Compilation de la Servlet
Exécution de la Servlet
Cette Servlet a pour nom Jasper
Nombre important de paramètres
Exemple de JspServlet

<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
Invocation des Servlets

Le rôle principal du web.xml


Associé à un nom symbolique
Le .class d'une Servlet (paquetage compris)
Associé au même nom symbolique
Une URL logique
Par laquelle la Servlet sera invoquée
Par défaut
http://<host name>:<port>/<WAR name>/<URL logique>
Exemple de mapping

<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
...
</servlet>

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Passage de paramètres

Deux types de paramètres


Portée au niveau d'une SERVLET
Section <init-param> de la section <servlet>
Portée au niveau de l'application (Context)
Section <context-param>
Définition d'un paramètre
Deux sous-sections
<param-name> et <param-value>
Welcome file

 Le fichier web.xml global contient une section


XML qui indique les noms par défaut des pages
d'accueil
 Exemple

<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
Collaboration server.xml,
context.xml et web.xml
Exemple
https://www.lecoz.com/cours/javaee/tomact6
https: Connecteur Coyote avec support SSL (server.xml)
Analysé par Service qui passe la requête à Engine
www.lecoz.com: nom de host virtuel (server.xml)
Analysé par Engine et par un de ses Host
cours: path de Context (context.xml)
javaee: servlet mapping avec URL pattern /javaee/*
Fichier web.xml de l'application
tomcat6: exécuté par la servlet
TOMCAT

Applications
Application Web JAVA EE

 Représentée par une archive WAR


 Web Application Archive
 Structure
/

Pages JSP et ressources statiques: HTML, XML, images, CSS

META-INF/ WEB-INF/

context.xml web.xml

classes/ lib/
Déploiement

Local à une machine


Par simple copie dans le répertoire webapps
À l'aide de l'application manager de TOMCAT
De façon distante
Avec ANT
Avec un navigateur et l'application manager
Exemple de script ANT

...
<taskdef name=''deploy''
classname=''org.apache.catalina.ant.DeployTask''/>

<target name=''deploy'' depends=...


<deploy url=''${tomcat.manager.url}'' username=''tomcat'' password=''tomcat''
path=''nom application'' war=''nom archive war'' update=''true'' />

...
Architecture d'une application

Modèle MVC adapté aux applications Web


MVC2
Vue
Pages HTML et pages JSP
HTML, XHTML
JSF
Contrôleur
SERVLET
FILTRES
Architecture d'une application

Modèle MVC adapté aux applications Web


MVC2
Action
Classes POJO
Interfaces POJI
Modèle
Classes POJO persistantes
Avec JPA (Java Persistence API)
EJB3 Entity
Architecture d'une application

 MVC2 = mapping HTML/OBJET


 Reviens à faire correspondre une page JSP et une
instance de classe Action

get | post
JSP JSP
SERVLET ACTION
HTML HTML
invocation forward

set get
FILTER
POJO SESSION
METIER
Que des SERVLETS

TOMCAT n'exécute que des Servlets


Les pages JSP sont traduites en Servlets et
exécutées
Une Servlet est une instance d'une classe qui
spécialise la classe HttpServlet
Service non orthogonal
Les Servlets peuvent être filtrées
Classe Filter
TOMCAT

Sécurité
Sécurité d'une application

Avec la section <security-constraint> du fichier


web.xml
Les ressources protégées de l'application
Section <web-resource-collection>
Sous-sections
<web-resource-name>
<url-pattern>
<http-method>
Section <auth-constraint>
Sous-section <role-name>
Doit correspondre à un rôle géré par Realm
Sécurité d'une application

Section <auth-constraint>
Type de transmission des données entre client et
serveur
Sous-section <user-data-constraint>
Valeurs NONE, INTEGRAL, CONFIDENTIAL
Procédure d'authentification associée à la
section <security-constraint>
Section <login-config>
Sous-section <auth-method>
BASIC si page d'authentification fournie par TOMCAT
Exemple de web.xml
...
<security-constraint>
<web-resource-collection>
<web-resource-name>Professors</web-resource-name>
<url-pattern>/professors/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>professor</role-name>
</auth-constraint>
</security-constraint>

<login-config>
<auth-method>BASIC</auth-method>
<form-login-config>
</form-login-config>
</login-config>

<security-role>
<role-name>professor</role-name>
</security-role>
...
TOMCAT

En phase de test et d'évaluation


TOMCAT en phase de test

Règle principale
Séparation des fichiers d'installation et des fichiers
applicatifs
Grâce à CATALINA_HOME et CATALINA_BASE
Avantages
Mise à jour de TOMCAT sans impacter les applications
Mise à jour de la JVM
Évaluation aisée des versions de TOMCAT et de JVM
Plusieurs versions de TOMCAT

Création d'un script setenv.sh


Exécuter par le script catalina.sh
Le script setenv.sh permet de configurer
Les variables
CATALINA_HOME
CATALINA_BASE
CATALINA_PID
Plusieurs versions de JVM

Création d'un script setenv.sh


Exécuter par le script catalina.sh
Le script setenv.sh permet de configurer
JAVA_HOME
JRE_HOME
Exemple de setenv.sh

CATALINA_HOME=/usr/local/apache-tomcat-6.0.18
CATALINA_BASE=/usr/local/tomcat-instance-01
JAVA_HOME=/usr/local/jdk1.6.0_10
JRE_HOME=$JAVA_HOME/jre
CATALINA_PID=$CATALINA_BASE/logs/tomcat.pid
TOMCAT

Environnement de production
TOMCAT en production

Règle principale
Séparation des fichiers d'installation et des fichiers
applicatifs
Grâce à CATALINA_HOME et CATALINA_BASE
Avantages
Mise à jour de TOMCAT sans impacter les applications
Retour aisé à une version antérieure en cas d'instabilité
Permet d'affecter des droits différents sur les répertoires
Exemple
Une équipe projet peut écrire dans webapps/ mais ne peut
pas écrire dans les autres répertoires
TOMCAT en production

Stratégie
Découpler l'installation de TOMCAT des instances
qui hébergent les applications.
Avantages
Chaque instance s'exécute dans sa propre JVM
Chaque instance démarre plus rapidement car elle ne
lance que les applications qui y sont déployées
Architecture de production
/usr/javaee/production/
apache-tomcat-6.0.18/
bin/
conf/
lib/
logs/
temp/
webapps/
work/

instance_1
conf/
logs/
temp/
webapps/
work/

instance_2
idem instance_1
shared/
conf/

run.sh
Détail de l'architecture
/usr/javaee/production/
apache-tomcat-6.0.18/
installation standard
instance_1
bin/
setenv.sh // autre version de TOMCAT, autre JVM
conf/
catalina.properties // propriétés de port (shutdown, http, jmx)
web.xml // copie de l'installation standard
logs/
temp/
webapps/
work/
instance_2
idem instance_1
shared/
conf/
logging.properties // copie de l'installation standard
server.xml // minimal avec substitution des variables du
fichier catalina.properties des instances
tomcat-users.xml

run.sh
Le script run.sh

C'est le script run.sh qui gère le démarrage et


l'arrêt des instances de TOMCAT
Tâche principale
Exécuter catalina.sh [start | stop] -config [server.xml]
Le script catalina.sh de $CATALINA_HOME/bin
Le fichier server.xml de shared/conf
Avec variables de substitution lues dans les fichiers
catalina.properties de chaque instance
Bien démarrer son tigre

Dans le répertoire bin, se trouvent les scripts startup.sh et shutdown.sh, qui


délèguent le travail à catalina.sh. Après avoir détecté son environnement d'exécution
(AS400, Cygwin, VMWare...), celui-ci recherche et exécute les scripts
setclasspath.sh et setenv.sh dans CATALINA_BASE/bin s'ils existent, sinon dans
CATALINA_HOME/bin. C'est là l'occasion de redéfinir, globalement ou par instance,
des variables comme JAVA_HOME, JAVA_OPTS ou CATALINA_OPTS.

Au démarrage, Tomcat lit sa configuration qui est lue depuis les fichiers server.xml,
logging.properties, etc. Chaque instance possédant ses propres paramètres (port
d'écoute, répertoire de log...), il pourrait être tentant de copier et modifier ces fichiers
manuellement.
Mais Tomcat propose une solution plus élégante : les placeholders, ou variables de
substitution. Il est alors possible de créer un modèle universel de configuration
possédant des portions dynamiques de la forme "${variable}", dont les valeurs
spécifiques sont redéfinies au niveau de chaque instance.
Dans notre exemple d'installation, les fichiers de configuration placés dans
CATALINA_HOME/conf sont les modèles, et les valeur spécifiques sont définies
dans les fichiers CATALINA_BASE/conf/catalina.properties des instances.
TOMCAT

TOMCAT et APACHE
TOMCAT et serveurs HTTP

Certains administrateurs préfèrent coupler


TOMCAT et un serveur HTTP connu
APACHE, IIS, NETSCAPE
Parce qu'ils sont mieux connus
Ont une réputation de robustesse
Notamment dans des environnements de fermes de
serveurs
Intégration TOMCAT APACHE

Intégration de TOMCAT avec APACHE


Connecteur JK Connector
JK utilise le protocole Apache JServ Protocol (AJP)
TOMCAT

Sécurité avec Linux


Sécuriser Linux

Le problème du port HTTP 80


TOMCAT ne peut être accédé sur le port 80 que s'il
a été démarré avec le droit root.
Ce qui constitue un risque de sécurité majeur pour le
serveur Linux.
Solution :
Utiliser un autre port que 80 ce qui permet de
démarrer TOMCAT avec un autre compte que
root
TOMCAT est par défaut configuré sur le port 8080
Problèmes
Pare-feux à configurer et URL avec le port 8080
La solution xinetd

Daemon de service internet


Capable de redirection
Accepter les requêtes sur un port entrant
Passer ces requêtes sur un autre port et/ou adresse
Fichier de configuration
/etc/xinetd.conf
Attribut redirect
Redémarrage
/sbin/service xinetd restart
Exemple de xinetd.conf

# Redirects any requests on port 80


# to port 8080 (where Tomcat is listening)
service tomcat
{
socket_type = stream
protocol = tcp
user = root
wait = no
port = 80
redirect = localhost 8080
disable = no
}
Solution iptables

Les kernel Linux récents supportent iptables


Versions > 2.4.x
Tester iptables
/sbin/service iptables status
Redirection
Avec la table NAT (Network Address Translation)
Avec la chaîne PREROUTING

/sbin/iptables -t nat \
-A PREROUTING -j REDIRECT -p tcp \
--destination-port 80:80 --to-ports 8080
Sécuriser Linux avec chroot

La commande chroot
Crée une racine virtuelle de système de fichiers
Tomcat avec chroot
Interdit aux applications qui s'exécutent sous TOMCAT
d'accéder à l'extérieur du chroot
Nécessite la copie des ressources nécessaires à la
JVM et à TOMCAT au sein du chroot
/bin, /lib, /usr/bin, /usr/lib , Java (JRE ou JDK)
/etc/passwd, /etc/group, /etc/hosts
Nécessite la création des répertoires
/dev, /dev/null, /dev/zero
TOMCAT

Taille des fichiers logs


Limites

TOMCAT ne peut gérer de gros fichiers de


journalisation dans son répertoire logs/
La taille maximum est 2GB
Au delà de cette taille TOMCAT tombe en panne
Le fichier de log le plus critique est catalina.out
Beaucoup d'écritures car c'est le fichier de sortie par
défaut de TOMCAT
Solution

Mettre en place un système automatique de


compression du fichier catalina.out
Avec le système logrotate de Linux
Détails : man logrotate
Logrotate est pris en charge par le service cron
Possibilité de compresser
A une périodicité fixée (tous les jours)
Quand la taille du fichier dépasse une valeur fixée
Mise en œuvre

Création du fichier
/etc/logrotate.d/tomcat
Contenu du fichier pour une compression tout
les jours quand le fichier atteint 5M

/var/log/tomcat/catalina.out {
copytruncate
daily
rotate 7
compress
missingok
size 5M
}
Mise en œuvre

Lancement manuel du test avec cron


/usr/sbin/logrotate /etc/logrotate.conf
Fonctionnement
Chaque nuit cron exécute les tâches listées dans le
répertoire /etc/cron.daily/
Ceci déclenche /etc/cron.daily/logrotate
Qui exécute /usr/sbin/logrotate /etc/logrotate.conf
/etc/logrotate.conf contient tous ses scripts dans le
répertoire /etc/logrotate.d/
Dans lequel se trouve le script tomcat

Vous aimerez peut-être aussi