IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

stc074

[Actualité] Les virtualhosts, tomcat et le port 80

Noter ce billet
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 :

Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
# 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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 &quot;%r&quot; %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 :

Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
1
2
# cd /usr/share/apache-tomcat-8.0.15/conf
# vi server.xml
Après la balise <Host appBase="webapps" [...]>[...]</Host>, mettez ceci :

Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
# /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 - Visualiser dans une fenêtre à part
<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).
Nom : tomcat.png
Affichages : 7582
Taille : 51,0 Ko

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

Envoyer le billet « Les virtualhosts, tomcat et le port 80 » dans le blog Viadeo Envoyer le billet « Les virtualhosts, tomcat et le port 80 » dans le blog Twitter Envoyer le billet « Les virtualhosts, tomcat et le port 80 » dans le blog Google Envoyer le billet « Les virtualhosts, tomcat et le port 80 » dans le blog Facebook Envoyer le billet « Les virtualhosts, tomcat et le port 80 » dans le blog Digg Envoyer le billet « Les virtualhosts, tomcat et le port 80 » dans le blog Delicious Envoyer le billet « Les virtualhosts, tomcat et le port 80 » dans le blog MySpace Envoyer le billet « Les virtualhosts, tomcat et le port 80 » dans le blog Yahoo

Mis à jour 09/09/2018 à 14h47 par LittleWhite (Coloration du code)

Catégories
Sans catégorie

Commentaires