Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Les virtualhosts, ou comment avoir plusieurs sites sur votre serveur tomcat accessibles sur le port 80 sans utiliser apache,
Par stc074

Le , par stc074

0PARTAGES

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 :

Code bash : Sélectionner tout
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 :

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/
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' !

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
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 :

Code bash : Sélectionner tout
# 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 :

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
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)

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"/>
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.

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
Fouillez un peu votre server.xml vous devriez tomber sur ces lignes :

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>
La configuration d'un virtualhost se fait grâce aux balises , 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 :

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
Enfin nous allons configurer nos 2 virtualhosts dans notre conf/server.xml

Code bash : Sélectionner tout
1
2
# cd /usr/share/apache-tomcat-8.0.15/conf 
# vi server.xml
Après la balise [...], mettez ceci :

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>
On peut (re)lancer tomcat, en utilisant notre script tomcat_script

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 ! :-)

Une erreur dans cette actualité ? Signalez-le nous !