Plusieurs instances de Tomcat sur Ubuntu
Pourquoi plusieurs instances ?
- Pour pouvoir déployer plusieurs applications partageant les même adresses, sur plusieurs virtuals hosts, sans pour autant gérer ces virtuals hosts dans Tomcat
- Pour pouvoir arrêter / démarrer les JVM de manière indépendante
- Pouvoir utiliser des environnements Java différents (version de la JVM, librairies partagées, propriétés système, …)
- Isoler complètement les applications, une fuite mémoire sur l’une ne peut pas impacter l’autre.
Variables d’environnement.
Tomcat utilise deux variables d’environnement :
- CATALINA_HOME pointe vers le répertoire d’installation de Tomcat
- CATALINA_BASE est utilisée pour tous les chemins relatifs : configuration, applications.
Si CATALINA_BASE n’est pas précisée, c’est CATALINA_HOME qui est utilisée.
Mise en oeuvre avec Ubuntu
- Installer tomcat et OpenJDK et le paquet “tomcat6-user” qui permet de créer d’autres instances tomcat :
tom@ubuntu:~$ sudo apt-get install -y tomcat6 openjdk-6-jdk tomcat6-user
- Pour ne pas créer de confusion, désactiver l’instance principale de tomcat :
tom@ubuntu:~$ sudo update-rc.d -f tomcat6 remove tom@ubuntu:~$ sudo service tomcat6 stop
- Créer une nouvelle instance, nommée tomcat6-www, dans notre exemple :
tom@ubuntu:~$ cd /opt tom@ubuntu:/opt$ sudo tomcat6-instance-create -p 8081 -c 8006 tomcat6-www tom@ubuntu:/opt$ sudo mkdir tomcat6-www/conf/policy.d tom@ubuntu:/opt$ sudo touch tomcat6-www/conf/policy.d/empty.policy tom@ubuntu:/opt$ sudo chown -R tomcat6:tomcat6 tomcat6-www tom@ubuntu:/opt$ cd /etc/init.d/ tom@ubuntu:/etc/init.d$ sudo cp tomcat6 tomcat6-www
8081 est le port http et 8006 est port d’arrêt.
- Editer le script de lancement /etc/init.d/tomcat6-www, y changer les variables suivantes :
NAME=tomcat6-www JVM_TMP=/tmp/tomcat6-www-tmp DEFAULT=/etc/default/tomcat6 CATALINA_HOME=/usr/share/tomcat6 CATALINA_BASE=/opt/tomcat6-www
- Activer le démarrage automatique, démarrer l’instance :
tom@ubuntu:/etc/init.d$ sudo update-rc.d tomcat6-www defaults 90 tom@ubuntu:/etc/init.d$ sudo service tomcat6-www start
C’est un point que je trouvais pénible avec Tomcat, mais je ne connaissais pas ce paquet tomcat6-user et la commande “tomcat6-instance-create”…
En plus il semble aussi dispo sur Debian (Squeeze pour nous)
Merci donc Thomas de m’éduquer
(même si maintenant on utilise glassfish qui possède cette fonctionnalité out-of-the-box)
Et comment sont géré les mises à jour de séurité dans pareil cas ? imaginons que le script /etc/init.d/tomcat6 présente une faille, qu’une nouvelle version du paquet tomcat6 va venir corriger, comment être certain que /etc/init.d/tomcat6-www sera bien mis à jour ? sans avoir à lire les changelog de toutes les mises à jour ?
En effet, les fichiers dupliqués ne seront pas mis à jour : script de démarrage, server.xml, ..
Ca limite quand même le nombre de fichiers dupliqués par rapport à une installation hors des paquets de la distribution.