WAMP virtuel mini howto
1. Audience ciblée
Ceci est un court Howto pour développeurs Web souhaitant gérer indépendemment de multiples
sites web, la plupart du temps sur leur propre PC, en utilisant un environnement soit
LAMP soit WAMP.
2. Introduction
En effet, de nombreux développeurs web commencent par développer un seul site et on leur
demande rapidement d'en développer un ou plusieurs autres, et ce qu'ils font naturellement
dans cette situation est créer un sous-répertoire sur leur PC de développement pour héberger
le nouveau site, mais ceci entraîne quelques désavantages, le principal étant l'impossibilité
d'utiliser des références absolues dans leur code car le site est destiné à être déplacé
en production d'une racine étant un sous-répertoire vers une racine étant la racine du serveur.
Alternativement, ce qu'ils font parfois est reproduire leur environnement de développement
sur le site de production avec le désavantage de présenter aux internautes un niveau
d'indentation inutile dans les URL's.
Un autre situation dans laquelle ce howto peut être utile est celle des développeurs web
héritant d'un seul site d'entreprise présentant une arborescence extrêment boisée incluant
de nombreuses fonctionalités hétérogènes telles que, entre autres, le site de l'entreprise,
un extranet pour les clients, un extranet pour les employés, un webmail, un agenda partagé,
etc... le tout sous la racine du site principal.
Cette situation se présente la plupart du temps lorsque l'infrastructure a été développée
depuis plusieurs années par de multiples développeurs, dont certains prestataires externes.
Donc, lorsque le site s'étoffe tellement et rapidement avec trop peu de contrôle, vu du
point de vue de l'administrateur système préposé à la gestion du serveur sous-jacent, cela
se transforme souvent en cauchemar lorsque le besoin se fait sentir de déplacer l'infrastructure
sur un autre serveur, car plus personne ne sait précisément ce qui se trouve sous la racine
du site et l'on se retrouve obligé de déplacer l'environnement complet d'un seul coup,
ce-inclu les bases de données sous-jacentes et possiblement d'autres extensions, avec le
risque très réel de voir le système complet s'effondrer d'un seul spectaculaire coup
également.
Donc, ce qui suit est une proposition très simple à destination de ces devéloppeurs web,
qui consiste en ceci: au lieu d'utiliser un seul environnement de développement ressemblant
à ceci:
http://localhost/client-a/
http://localhost/client-b/
de les aider à utiliser un environnement de développement ressemblant, en sus et non pas
en remplacement du précédent, à ceci:
http://client-a.local/
http://client-b.local/
en utilisant les capacités de gestion des hôtes virtuels de leur installation locale de
Apache sans nécessité particulière de déplacer leur code source vers d'autres emplacements
et sans les empêcher de continuer à utiliser leur première forme d'environnement de
développement (le tout sous localhost dans des sous-répertoires), les deux emplacements
devenant dorénavant disponibles.
3. WAMP
A la date d'aujourd'hui (2007) le plateau (n.d.l.t. 'tray) de WAMP leur permet aisément
d'enclancher les fonctionalités d'hôtes virtuels d'Apache, mais ne permet pas de diviser
l'environnement de développement en sites web multiples.
Donc, vous aurez besoin d'utiliser votre éditeur favori, que ce soit le bloc notes ou
n'importe quel autre, pour effectuer de très simples changements aux configurations
d'Apache et de votre pile TCP/IP.
3.1. Le fichier hosts
Ce fichier est situé sous "%SystemRoot%\system32\drivers\etc", ce qui la plupart du temps
signifie "C:\WINDOWS\system32\drivers\etc".
Par défaut, le contenu consiste en un bon nombre de lignes de commentaire commençant par
un # (à ce propos, vous pouvez ajoutez les vôtres de la même façon si vous le souhaitez
sur des lignes commençant par un #) et une seule ligne ressemblant à ceci:
127.0.0.1 localhost
ce qui signifie que, lorsque votre navigateur web essaye d'atteindre le nom spécial d'hôte
'localhost', le système lui retournera l'adresse IP spéciale 127.0.0.1 que le navigateur
va effectivement utiliser pour joindre votre server Apache tournant sur votre PC.
Ne supprimez ou commentez PAS cette ligne, sans quoi de nombreuses fonctionalités de votre
PC pourraient se briser et votre système pourrait s'en trouver fortement endommagé.
Ce fichier fait partie de ce que l'on appelle la pile TCP/IP de votre PC et est par conséquent
important car il est interrogé avant le DNS.
Par contre, ce que vous pouvez faire sans trop de craintes dans ce fichier est d'y ajouter
des lignes ou des aliases sur le nom d'hôte spécial 'localhost'.
Pour cela, il est vivement conseillé d'utiliser une extension spéciale, à savoir '.local'
aux noms que vous ajouterez de manière à éviter les conflits avec les véritables noms Internet.
Donc, vous devez éviter de mettre des noms d'hôtes tels que p. exple. www.masociete.com
pointant vers une adresse de type 127.x.y.z sans quoi vous ne seriez plus à même d'atteindre
le site de votre société car toutes les adresses IP commençant par 127 renvoyent à votre
propre PC et parce que ce fichier est interrogé avant le DNS.
Donc, de grâce, utilisez seulement des extensions .local pour fonctionner en toute sécurité.
A présent nous avons en réalité 2 possibilités, soit ajouter sur la ligne:
127.0.0.1 localhost
les alias:
client-a.local client-b.local
separés par des espaces ou tabulations du début et entre les mots de manière à ce qu'elle
ressemble à ceci:
127.0.0.1 localhost client-a.local client-b.local
ou, une autre possibilité (les différences sont très subtiles et vous ne devriez pas en
avoir besoin à ce stade, donc choisissez la méthode que vous préférez) est d'ajouter des
lignes telle que:
127.1.2.3 client-a.local
127.1.2.4 client-b.local
Vous pouvez utiliser n'importe quel nombre plus petit que 256 après le premier 127. mais
le dernier nombre ne peut être 0 ni 255.
Notez que d'autres valeurs ont des significations particulières mais considérons que les
valeurs entre 1 et 126 sont un excellent choix.
De toutes façons, si vous gérez plus de 126 sites, je soupçonne que vous n'avez pas besoin
de lire ce howto car vous connaissez déjà tout ceci ;-)
Je ne vous conseillerais pas davantage de dupliquer la ligne 127.0.0.1: soit vous placez
les alias sur la première ligne, soit vous créez de multiples lignes avec de multiples
adresses IP sur ce que l'on appelle l'interface de la boucle locale (n.d.l.t. 'loopback')
( adresses commençant par 127 et pointant seulement vers votre PC).
C'est tout pour le fichier hosts et dorénavant votre navigateur peut joindre des URL's
telles que:
http://client-a.local/
A présent assurons nous qu'Apache répond à ces requêtes de la manière qui vous convient.
3.2 Chargement du module d'hôtes virtuels de Apache
Par défaut (à la date d'aujourd'hui, 2007) WAMP ne l'a pas activé lors de l'installation,
donc, de manière à l'activer, vous pouvez cliquer sur l'icône du serveur WAMP dans votre
plateau système (n.d.l.t. 'systray') (côté droit de votre barre de tâches de Windows),
aller dans le menu:
Apache > Apache Modules
faire défiler un peu vers le bas si nécessaire à l'aide de la petite flèche noire en bas
et cliquer sur la ligne:
vhost_alias_module
de manière à ce qu'un V apparaissent à sa gauche la prochaine fois que vous affichez ce
menu.
C'est tout.
Nous ne redémarrerons pas encore Apache maintenant car nous devons encore effectuer
quelques autres modifications à sa configuration.
3.3 Création de confettis de fichiers de configuration Apache pour la gestion des
hôtes virtuels et création du répertoire destiné à les héberger.
Historiquement, la plupart des serveurs originaires du monde *nix tels qu'Apache avaient
un seul fichier de configuration mais à présent, la tendance s'affirme d'avoir un fichier
de configuration principal et de nombreux petits morceaux de configurations répartis au
travers de plusieurs fichiers qui sont chargés par le fichier principal.
Ceci peut en effet s'avérer utile.
Sur une installation WAMP par défaut (à la date d'aujourd'hui, je répète), la dernière
ligne de votre fichier de configuration d'Apache que vous pouvez ouvrir avec le bloc notes
au départ de votre icône de plateau en sélectionnant le menu:
Apache > httpd.conf
est une directive d'inclusion qui charge des confettis de fichiers de configuration
contenant les alias (PHPMyadmin, etc...), ce qui constitue une autre technique assez
pratique dont nous parlerons brièvement plus bas.
Donc, à présent que vous l'avez ouvert, je vous suggérerais d'y ajouter une ligne telle
que:
Include "C:\wamp\virtual"
ou, si vous craignez que ce sous-répertoire puisse être utilisé à l'avenir par l'équipe
de développement de WAMP à d'autres fins, disons par exemple:
Include "C:\wamp-virtual"
A présent il vous est nécessaire de créer ce répertoire ou sous-répertoire qui n'existe
pas encore.
Utilisez l'explorateur de Windows à cette fin et veuillez le laisser ouvert à cet
emplacement car nous allons à présent y créer quelques fichiers.
Pour ce faire, utilisez votre éditeur de fichiers préféré, qu'il s'agisse du bloc-notes
ou de n'importe quel autre et créez un fichier appellé:
000-default.conf
dans lequel vous écrivez au minimum ceci:
NameVirtualHost *
<VirtualHost *>
ServerName localhost
DocumentRoot "c:\wamp\www\"
<Directory "c:\wamp\www\">
AllowOverwrite all
Order deny,allow
Allow from 127.
</Directory>
</VirtualHost>
Sauvegardez le fichier et maintenant créez en un autre nommé:
001-client-a.conf
dans lequel vous écrivez au minimum ceci:
<VirtualHost *>
ServerName client-a.local
DocumentRoot "c:\wamp\www\client-a\"
<Directory "c:\wamp\www\client-a\">
AllowOverwrite all
Order deny,allow
Allow from 127.
</Directory>
</VirtualHost>
Sauvegardez le fichier et maintenant créez en un troisième nommé:
002-client-b.conf
dans lequel vous écrivez:
<VirtualHost *>
ServerName client-b.local
DocumentRoot "c:\wamp\www\client-b\"
<Directory "c:\wamp\www\client-b\">
AllowOverwrite all
Order deny,allow
Allow from 127.
</Directory>
</VirtualHost>
Ceci devrait suffire et vous pouvez à présent redémarrer Apache à partir de votre icône
de plateau en sélectionnant:
Restart services.
Patientez quelques (dizaines de) secondes et ensuite ouvrez quelques onglets dans votre
navigateur préféré (Firefox) et ouvrez les URL's suivantes:
http://localhost/client-a/
http://client-a.local/
Si vous avez seulement un site statique qui ne contient pas de références absolues, les
deux pages doivent être identiques.
Veuillez noter les conventions de nomination 000-, 001-, etc... qui sont supposées
assurer que celle contenant NameVirtualHost * est chargée la première car,
si je ne me trompe pas, ellles sont chargées par ordre alphabétique.
3.4 Le chemin d'inclusion de PHP (n.d.l.t. include path)
Si vous avez des pages utilisant des instructions include, include_once, require ou
require_once qui incluent de nombreuses autres pages PHP qui peuvent ne pas se trouver
dans le même répertoire ou un quelconque sous-répertoire, celles-ci pourraient ne pas
être trouvées sur le site .local pour cause d'absence de ce sous-répertoire.
Mais ne vous tracassez pas, il existe une pléthore de solutions possible pour contourner
ceci, en fonction du type de problème.
3.4.1 Pages inclues utilisant des chemins absolus.
Votre site pourrait être constitué de pages PHP contenant des instructions include ou
require utilisant des chemins codés en dur soit de la forme:
include '/client-a/page.php';
soit:
include $_SERVER['DOCUMENT_ROOT'] . '/client-a/page.php';
soit encore (mais moins répandu je suppose):
include 'c:\wamp\www\client-a\page.php';
Si vous utilisez la dernière forme, je vous conseillerais de vous promener parmi vos pages
et de changer votre style de référencement car votre site web n'est pas portable du tout
avec cette sorte de références.
Mais si vous utilisez l'une des 2 premières, vous pouvez temporairement contourner
l'absence du sous-répertoire client-a sur le site client-a.local en utilisant un alias
dans le confetti de configuration d'Apache ( les alias sont aussi utilisés par WAMP pour
permettre de stocker phpmyadmin ailleurs que sous c:\wamp\www\phpmyadmin tout en préservant
la possibilités d'y accéder via l'URL http://localhost/phpmyadmin/)
Pour cela, insérez dans:
001-client-a.conf
à l'intérieur des balises ouvrante et fermantes <VirtualHost> mais hors des balises
<Directory> (de préférence avant) la ligne suivante:
Alias /client-a/ "c:\wamp\www\client-a\"
et redémarrez WAMP de la manière présentée plus haut.
Ceci devrait vous dépanner pour l'instant.
Nous discuterons plus bas de la manière d'optimiser vos techniques d'inclusions.
3.4.2 Inclusions portables
En fait, pour s'assurer que vos votre site et pages PHP soient bien portables, il existe
différentes techniques.
3.4.2.1 PHP.INI
Vous pouvez l'ouvrir à partir du plateau du serveur WAMP dans le bloc notes et chercher
la ligne:
;include_path=".:c:\php\includes"
Vous pouvez la décommenter en supprimant le point-virgule de début de ligne et inscrire
entre les guillemets un répertoire de telles façons que cela à ressemble à disons ceci:
include_path=".:c:\wamp\library"
ou
include_path=".:c:\wamp-library"
Ensuite créez ce répertoire qui n'existe pas encore et, à l'intérieur, un sous-répertoire
que nous appellerons par exemple 'mesincludes'.
Ensuite déplacez-y toutes vos pages de librairies et, maintenant, commencez dans toutes
vos pages à remplacer votre style d'inclusion actuel par le suivant:
include 'mesincludes/pages.php';
Ceci vous permettra de minimiser les risques d'occurence de ce que l'on appelle les
conflits dans l'espace de noms (n.d.l.t. 'namespace clashes') où il y a plusieurs
répertoires contenant 'page.php', certaines d'entre elles écrites par vous, d'autres pas.
Comme le répertoire supérieur (PAS le répertoire lui-même, mais bien celui du niveau
supérieur) à 'mesincludes' est défini globalement dans le fichier PHP.INI, il sera
utilisable dorénavant par tous vos sites (client-a, client-b, ...) et vous pouvez à
présent commencer comfortablement à développer votre charpente (n.d.l.t. 'framework')
en conservant un code centralisé et non dupliqué.
Ne vous en faites pas à propos de l'éventualité de ne pas pouvoir l'utiliser sur un serveur
web partagé (sur lequel vous il ne vous serait pas permis de modifier le PHP.INI du système).
Dans une telle situation, envoyez simplement une copie de votre répertoire 'mesincludes'
à la racine du serveur et c'est (presque) tout.
En fait, vous devriez normalement avoir la possibilité de changer répertoire par
répertoire le chemin d'inclusion de PHP dans les fichiers .htaccess en utilisant une
syntaxe similaire à ceci:
php_value include_path ".:c\php\includes"
Donc, comme vous le voyez, il existe de nombreuses façons de rendre votre environnement
de développement plastique et compatible avec le système nerveux (limité) de votre
administrateur système.
4. Linux, MacOSX (?).
Je serai moins long car si vous utilisez Linux comme environnement de développement, il
y a des chances que vous connaissiez déjà l'essentiel de ceci mais, si non,
les principes sont exactement les mêmes mais les fichiers sont généralement localisés
sous:
/etc
(p.exple le fichier hosts) et vous redémarrez Apache en utilsant (ne tapez pas le #):
# /etc/init.d/apache2 restart
Ceci pouvant être apache2, apache ou encore httpd en fonction de votre distribution.
Vous devez être root (n.d.l.t. ma plume ne se résoud pas à écrire Racine, trop théâtral)
pour modifier les fichiers et redémarrer Apache et, bien sûr, vous n'utiliserez pas le
bloc-notes ;-)
Sur les dérivatifs de Debian tels qu'Ubuntu vous pouvez trouver la configuration d'Apache sous
/etc/apache2
et vous ne devriez pas avoir besoin de modifier le httpd.conf ou apache2.conf car il
existe déjà des sous-répertoires contenant des confettis relatifs aux alias ou hôtes
virtuels appellés:
sites-available
et
sites-enabled
Vous pouvez sauvegarder vos confettis dans sites-enabled car sites-available est ignoré.
Mais d'abord, vous activez le module de gestion des hôtes virtuels en liant un fichier appellé:
vhost_alias.load
à partir de:
modules-available
vers:
../modules-enabled
de cette façon:
# cd /etc/apache2/mods-enabled
# ln -s ../mods-available/vhost_alias.load
(j'ai vaguement aperçu qu'il existait un outil en ligne de commande qui faisait très
précisément ceci, vous pourriez devoir gougler quelque peu...),
après quoi vous redémarrez Apache.
Sur MAcOSX, je me suis laissé dire que quelques fichiers devaient se trouver sous
/Library mais hosts reste sous /etc (je l'ai vu une fois, je vous l'assure).
5. Conclusion
En espérant que vous appréciez et en vous souhaitant de vous sentir rapidement gêné par
la pseudo (Je pense que la théorique est au-dessus de 16.000.000 mais votre PC, Apache
ou votre tête pourraient ne pas souffrir cela) limitation à 126 hôtes virtuels évoquée
plus haut.
v. 0.1, E. LURQUIN, 2007