Tomcat - e

publicité
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
Engine
Logger
Valve
Realm
Connector
Host
Logger
Valve
Realm
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/
web.xml
context.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
HTML
SERVLET
JSP
HTML
ACTION
forward
invocation
set
FILTER
POJO
METIER
get
SESSION
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
Téléchargement