Lorsqu'on développe une application web il est souvent plus aisé de la
tester localement avant de la mettre en gestion de conf. Pour tester votre
application localement il vous faut un serveur web (Apache, IIS, etc.) et il se
peut que vous utilisiez un environnement de développement (Eclipse, IntelliJ,
NetBeans, etc..), nous utiliserons ici Apache et Eclipse pour illustrer ce
billet.
L'objet de ce billet est de vous proposer des méthodologies pour tester
votre application web localement...
Premier constat : le répertoire de travail est différent du répertoire
de déploiement
Dans ce cas plusieurs solutions s'offrent à vous :
- Fusionner les deux répertoires
- Copier le contenu du répertoire de travail dans le répertoire de
déploiement
- Faire en sorte que le serveur web pointe sur le répertoire de travail
- ...
Avant de détailler chacune de ces solutions, il convient de rappeler que ces
répertoires pour Apache et Eclipse sont : APACHE_HOME/htdocs et
ECLIPSE_HOME/workspace/Project_name
Fusionner les deux répertoires
Certainement la solution la plus immédiate, au démarrage d'Eclipse il
suffira d'indiquer le répertoire APACHE_HOME/htdocs comme répertoire de
travail. Cette solution nous assure de tester les bons fichiers et dans leur
dernière version, toutefois l'inconvénient que je note dans cette solution
vient des fichiers qui n'ont rien à faire dans l'environnement de test :
.project pour Eclipse, code source pour les langages compilés, etc. En plus le
serveur web devient difficilement utilisable pour plusieurs projets en
parallèle.
Copier le contenu du répertoire de travail dans le répertoire de
déploiement
Cette approche est intéressante car elle permet au développeur de
sélectionner les fichiers à déployer et donc à tester. L'inconvénient immédiat
est bien entendu de systématiser le déploiement avant les tests pour éviter de
tester des fichiers obsolètes... Pour cette solution il convient de mettre en
place un petit script de déploiement pour faciliter la tâche du développeur. Le
framework ANT est souvent
utilisé pour effectuer ce genre d'opération, exemple
<project name="deploiement" basedir="." default="deploy">
<property name="targetDir" value="C:\apache\htdocs\test" />
<target name="deploy">
<delete dir="${targetDir}" />
<mkdir dir="${targetDir}"/>
<copy todir="${targetDir}">
<fileset dir="." includes="**\*.php"/>
</copy>
</target>
</project>
le serveur web pointe sur le répertoire de travail
Cette opération est me semble t-il la plus intéressante car les ressources
sont à un seul endroit (dans le répertoire de travail). De plus comme le
serveur web peut référencer plusieurs répertoires de travail on peut travailler
sur plusieurs projets en parallèle. Certains plug-ins de vos environnements de
développement vous permettent d'automatiser cette opération (PHPEclipse, PDT,
WTP, etc...). Mais ayant souvent rencontré des problèmes, je décris ici comment
paramétrer votre serveur web pour qu'il référence votre répertoire de
travail.
Définir le répertoire de travail et ses droits
Cette opération se fait dans le fichier de configuration du serveur web.
Pour Apache, il s'agit du fichier APACHE_HOME/conf/httpd.conf dans lequel le
répertoire se définit de la manière suivante :
<Directory "C:\eclipse\workspace\Test">
Options Indexes MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
A l'intérieur de la balise <Directory>, il est possible de spécialiser
les droits qu'auront les utilisateurs sur ce répertoires. Si rien n'est
spécialiser ce sont les droits par défaut qui s'appliquent. Pour plus
d'information sur la balise <directory> se référer au site d'Apache
Référencer le répertoire de travail
Cette opération peut se faire de deux manières dans le fichier
httpd.conf : via un Alias ou un VirtualHost
Un alias est un bout d'URL à placer juste après
http://IP_DU_SERVEUR:PORT/ALIAS pour pointer sur votre répertoire de travail.
Il se définira ainsi dans le fichier httpd.conf
Alias /www "C:\eclipse\workspace\Test"
Ainsi vous accèderez à votre répertoire de travail en tapant l'adresse
suivante : http://127.0.0.1:80/www
Un VirtualHost est intéressant lorsqu'on veut faire cette aiguillage sur un
nom le nom de domaine ou le numéro de port. Pour mettre en place un tel
aiguillage il nous faut déjà un système pour résoudre les noms de
domaine : serveur DNS à l'échelle d'Internet ou fichier Host à l'échelle
de votre machine. Ici nous présenterons le second cas en étant bien conscient
que la portée est locale (mais c'est bien se que nous cherchions initialement,
non?). Si vous êtes sous windows il vous faut éditer le fichier suivant :
C:\Windows\System32\drivers\etc\hosts pour lui ajouter la ligne
suivante :
127.0.0.1 local.mywebapp.com
Ainsi lorsque vous taperez http://local.mywebapp.com/ dans votre navigateur
ce sera équivalant à http://127.0.0.1
Maintenant effectuons l'aiguillage dans le fichier httpd.conf, pour celà
complétez le comme suit :
<VirtualHost local.mywebapp.com:80>
DocumentRoot C:\eclipse\workspace\Test
ServerName local.mywebapp.com:80
ErrorLog logs/jc.log
CustomLog logs/jc.log common
</VirtualHost>
Notez qu'en plus de l'aiguillage, il vous est possible de spécifier les
fichiers de log dans lesquels seront consignés les erreurs et autres messages
de votre application, pratique pour avoir un fichier de log par application!
Pour plus d'information sur les VirtualHosts référez vous à ce document sur la documentation Apache.