par , 15/03/2015 à 16h37 (1266 Affichages)
INTRODUCTION
N'avez vous pas rêvé d'avoir plusieurs sites sur votre serveur tomcat accessible sur le port 80 sans utiliser apache en front-end ? C'est possible, vous allez voir que grâce au virtualhosts, tomcat permet de faire cela de façon aisée.
Pour ce tuto je me base sur ma config, si la votre est différente, essayez d'adapter, un peu de recherche sur google ou sur le forum et on arrive vite à nos fin.
Voici ce que j'utilise actuellement :
Netbeans IDE 8.0.2
Debian wheezy 7.5
tomcat 8.0.15
iptables (normalement installé par défaut)
Connectez vous en SSH à votre serveur, c'est parti !
IpTables
Au cas ou iptables ne serait pas installé, un petit :
1 2
| # apt-get update
# apt-get install iptables |
Si iptables est installé vous aurez un gentil message vous le signalant.
Comme vous ne vous en doutez pas, nous allons utiliser iptables pour rediriger notre port 80 (par défaut utilisé par tout bon navigateur en http) sur le port de tomcat, en général il s'agit du port 8080.
Nous allons pour ça lancer une commande iptables en ligne de commande, le mieux est de prévoir un script entier pour iptables, il y a, chez openclassrooms, une telle chose, elle se trouve ICI .
la ligne à ajouter à votre script ou à lancer en ligne de commande pour les plus fainéants est :
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
Voila, maintenant les requêtes allant vers http://www.monsitequitue.com iront vers http://www.monsitequitue.com:8080
Avec tomcat, on se logue en général sur leur serveur et on upload une archive war sur le localhost du serveur, la racine de l'appli correspond au chemin défini dans le path du context.xml.
C'est en utilisant les virtualhosts que l'on supprime ce path, on utilise un virtualhost par site et on déploie à la racine / .
TOMCAT
Ci-dessous quelques précision sur l'installation de tomcat, ceux qui l'ont déjà installé peuvent passer à la suite.
On peut depuis quelques temps installer tomcat sur les distributions debian et ubuntu via apt, bien sûr ce n'est jamais la dernière version, je pense donc qu'il n'est pas inutile de l'installer à la main.
Pour ma part, j'ai pris la dernière version a l'heure ou j'écris ce billet, à savoir la version 8.0.15.
Pour récupérer l'archive compresser de la dernière version de tomcat, rendez-vous à http://tomcat.apache.org/ , sur le menu de gauche -> download.
une fois téléchargée, envoyez votre archive directement sur votre serveur grâce à la commande de copie sécurisée scp :
1 2 3
| $ scp apache-tomcat-8.0.15.tar.gz root@NOM_DE_VOTRE_SERVEUR:
root@NOM_DE_VOTRE_SERVEUR's password:
apache-tomcat-8.0.15.tar.gz 100% 9021KB 152.9KB/s 00:59 |
Remplacez NOM_DE_VOTRE_SERVEUR par... le nom de votre serveur !
Le mot de passe est le même que pour votre SSH.
N'oubliez pas les 2 points ( : ) après le nom de votre serveur, vous devriez retrouver l'archive tar.gz dans le dossier perso du super-utilisateur root ( /root).
On se connecte en SSH et en root sur le serveur pour la ligne de commande.
on va extraire l'archive et la déplacer dans le dossier /usr/share/
1 2 3
| # cd
# tar -xzvf apache-tomcat-8.0.15.tar.gz
# mv apache-tomcat-8.0.15 /usr/share/ |
Pour le moment le dossier de tomcat appartient à root, pour des raisons de sécurité (et pour que ce ne soit pas root qui exécute tomcat) on va changer ça.
On va donc créer un nouvel utilisateur, je l'ai appelé 'tomcat' !
1 2 3 4 5 6
| # useradd -m -s /bin/bash tomcat
# passwd tomcat
Entrez le nouveau mot de passe UNIX :
Retapez le nouveau mot de passe UNIX :
passwd : le mot de passe a été mis à jour avec succès
# chown -R tomcat:tomcat /usr/share/apache-tomcat-8.0.15 |
Voila qui est fait, on va en profiter pour créer un petit script 'tomcat_script' que l'on mettra dans /etc/init.d et qui nous permettra de lancer ou de stopper à loisir tomcat avec la session de l'utilisateur tomcat.
/etc/init.d/tomcat_script :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #! /bin/bash
### BEGIN INIT INFO
# Provides: tomcat-8.0.15
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $network $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: tomcat
# Description: tomcat
### END INIT INFO
export TOMCAT_HOME=/usr/share/apache-tomcat-8.0.15
function tomcatStart {
su - tomcat -c $TOMCAT_HOME/bin/startup.sh
echo "démarage tomcat 8.0.15...."
}
function tomcatStop {
$TOMCAT_HOME/bin/shutdown.sh
echo "arrêt tomcat 8.0.15.."
}
case $1 in
start)
tomcatStart;;
stop)
tomcatStop;;
restart)
tomcatStop
tomcatStart;;
*)
echo "utilisation : tomcat start|stop|restart"
exit 1;;
esac
exit 0 |
Ne vous préoccupez pas des lignes 2 à 10, il s'agit de directives que l'on communique à Debian dans le but de faire en sorte que ce script se lance à chaque redémarrage du serveur, ce que nous allons réaliser grâce à cette commande :
# update-rc.d /etc/init.d/tomcat_script defaults
Petite précision : on doit spécifier les bons utilisateurs dans notre configuration tomcat, notament pour se logguer au manager (dans lequel on déploie notre appli (war))
Une petite copie du fichier tomcat-users.xml puis on le modifie :
1 2 3
| # cd /usr/share/apache-tomcat-8.0.15/conf
# cp tomcat-users.xml tomcat-users.xml.copy
# vi tomcat-users.xml |
Dans tomcat-users, on défini les bons utilisateurs (manager, manager-gui, admin, admin-gui) et on leur attribue un nom d'utilisateur et un mot de passe (lesquels serviront à se loguer au manager)
1 2 3 4 5
| <role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<user username="utilisateur_tomcat" password="mot_de_passe_tomcat" roles="admin,admin-gui,manager,manager-gui"/> |
Virtualhosts et domaines
Le plus gros a été fait nous allons maintenant configurer les virtualhost de tomcat et les associer à chaque domaine présent sur notre serveur. Ceci se fait dans le fichier conf/server.xml te tomcat. On associe à chaque virtualhost un dossier, il en existe un par défaut en localhost dont le dossier et webapps et qui correspond à l'interface tomcat que vous avez par défaut quand vous accéder à l'adresse de votre serveur.
1 2 3
| # cd /usr/share/apache-tomcat-8.0.15/conf
# cp server.xml server.xml.copy
# vi server.xml |
Fouillez un peu votre server.xml vous devriez tomber sur ces lignes :
1 2 3 4 5 6 7 8 9 10 11
| <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log" suffix=".txt"/>
</Host> |
La configuration d'un virtualhost se fait grâce aux balises <Host>, ci-dessus la configuration du virtualhost de base en localhost, on voit bien l'attribut appBase auquel est associé notre dossier webapps (C'est là qu'il y a le manager de base entre autre).
On suppose qu'on veut héberger 2 sites sur notre serveur disons site1.com et site2.fr, on va, en premier lieu, créer les dossiers d'application, pour ça on va tout simplement copier notre dossier webapps dans lequel se trouve l'application manager dont on se servira ultérieurement :
1 2 3
| # cd /usr/share/apache-tomcat-8.0.15
# cp -R webapps site1_webapps
# cp -R webapps site2_webapps |
Enfin nous allons configurer nos 2 virtualhosts dans notre conf/server.xml
1 2
| # cd /usr/share/apache-tomcat-8.0.15/conf
# vi server.xml |
Après la balise <Host appBase="webapps" [...]>[...]</Host>, mettez ceci :
1 2
| <Host name="www.site1.com" appBase="site1_webapps" unpackWARs="true" autoDeploy="true"></Host>
<Host name="www.site2.fr" appBase="site2_webapps" unpackWARs="true" autoDeploy="true"></Host> |
On peut (re)lancer tomcat, en utilisant notre script tomcat_script
# /etc/init.d/tomcat_script start
Il faut aussi prendre en considération certains réglages dans notre appli web : l'archive war doit se nommer ROOT.war et le chemin de contexte doit pointer sur la racine :
Sur netbeans, par exemple, pour changer le nom de l'archive, cliquez droite sur le nom de votre projet java web, cliquez sur properties (ou propriétés si vous êtes configuré en Français), puis cliquez sur packaging, en haut il y a le nom de l'archive war : mettez ROOT.war puis cliquez sur ok.
Il faut aussi changer le path, qui doit pointer à la racine de notre virtualhost, cela se passe dans le fichier META-INF/context.xml de votre projet : mettez / dans le path comme ceci :
<Context antiJARLocking="true" path="/"/>
Faites un built de votre projet, vous obtenez une archive ROOT.war
CONCLUSION
Tout est réglé, le port 80, les virtualhosts, notre archive est prête, déployons notre site1.com, lancez votre navigateur et tapez dans la barre d'adresse l'url http://www.site1.com/manager, après renseignement des identifiants (que l'on a précédemment mis dans notre conf/tomcat-users.xml ( utilisateur_tomcat/mot_de_passe_tomcat dans l'exemple)) vous tombez sur le manager (dont la base est site1.com).
http://www.site1.com/manager/http://...1.com/manager/
Il faut préalablement retirer la page de présentation tomcat qui occupe la racine du host (en rouge sur l'image ci-dessous).
Puis allez plus bas -> fichier WAR à déployer, cliquez sur parcourir, sélectionnez l'archive ROOT.war de votre site sur votre disque dur et cliquez sur déployez.
Voila cette fois c'est fini, votre appli web est déployéeà la racine de votre virtualhost, vous pouvez répéter cela pour chaque virtualhost.
Au revoir ! :-)