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 :
Code bash : | Sélectionner tout |
1 2 | # apt-get update # apt-get install iptables |
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 :
Code bash : | Sélectionner tout |
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 :
Code bash : | Sélectionner tout |
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/
Code bash : | Sélectionner tout |
1 2 3 | # cd # tar -xzvf apache-tomcat-8.0.15.tar.gz # mv apache-tomcat-8.0.15 /usr/share/ |
On va donc créer un nouvel utilisateur, je l'ai appelé 'tomcat' !
Code bash : | Sélectionner tout |
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 :
Code bash : | Sélectionner tout |
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 |
Code bash : | Sélectionner tout |
# update-rc.d /etc/init.d/tomcat_script defaults
Une petite copie du fichier tomcat-users.xml puis on le modifie :
Code bash : | Sélectionner tout |
1 2 3 | # cd /usr/share/apache-tomcat-8.0.15/conf # cp tomcat-users.xml tomcat-users.xml.copy # vi tomcat-users.xml |
Code xml : | Sélectionner tout |
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"/> |
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.
Code bash : | Sélectionner tout |
1 2 3 | # cd /usr/share/apache-tomcat-8.0.15/conf # cp server.xml server.xml.copy # vi server.xml |
Code xml : | Sélectionner tout |
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> |
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 :
Code bash : | Sélectionner tout |
1 2 3 | # cd /usr/share/apache-tomcat-8.0.15 # cp -R webapps site1_webapps # cp -R webapps site2_webapps |
Code bash : | Sélectionner tout |
1 2 | # cd /usr/share/apache-tomcat-8.0.15/conf # vi server.xml |
Code xml : | Sélectionner tout |
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> |
Code bash : | Sélectionner tout |
# /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 :
Code xml : | Sélectionner tout |
<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 ! :-)