Procédure pour avoir un environnement de dévelopement local facile à configurer avec Apache
best-practices favourites linux php techniques tutoriels - 📁 projets
Je ne sais pour vous, mais je ne peut plus programmer sans avoir l'environement serveur localement sur ma machine. Changer ou ajouter un fichier VirtualHost
pour chaque nouveau projet est assez répétitif. Il doit y avoir une façon automatique de le faire?
Oui.
Ça s'appelle VirtualDocumentRoot
J'ai ce tutoriel qui traîne dans mon Wiki personnel depuis des lustres, et c'est maintenant que je commence a migrer mes projets sous NGINX que je décide de le mettre en ligne. Il n'est jamais trop tard pour publier.
Cette méthode de configuration répond exactement au besoin précis de ne pas avoir a configurer un hôte virtuel apache pour chaque projet.
Avec cette procédure, vous n'aurez qu'a maintenir votre fichier
hosts
, le reste suivra tout seul.
Vous pouvez appliquer cette technique avec n'importe quelle version du serveur http "Apache". Cette procédure peut même être faite si vous développez sous Windows ou Mac OS avec les distributions du serveur HTTP Apache sous Windows telles que MAMP, XAMPP, et EasyPHP.
Pourtant avec un serveur web local, ce type de configuration est possible depuis longtemps, il faut simplement savoir comment ça s'appelle: VirtualDocumentRoot
.
Voici comment je configure mon environnement LAMP depuis quelques temps.
Procédure
Établissement du standard
Tout commence par une certaine convention. Avec celle-ci, tout devrait suivre automatiquement.
L'idée est de pouvoir accéder a un l'espace de travail du projet A du client B sur ma machine locale. L'adresse locale n'est plus localhost
, mais quelque chose de plus explicite.
Ce que j'apprécie le plus de cette méthode car elle permet de conserver dans un dossier parent tout ce qui est spécifique pour le projet et le client. Le code a exécuter qui soit dans un sous-dossier ne feait que du sens.
Par exemple, un projet appelé projectname
du client client
serait classé dans un dossier sous le chemin /home/renoirb/workspace/client/projectname
.
Le code du projet web serait accessible via le serveur web à l'adresse http://projectname.client.dev/
qui pointe vers l'adresse IP de la station de travail locale.
L'espace de travail du projet
IMPORTANT Il faut que les noms de dossiers soient en minuscule et aucun espace, ni caractères accentués, sinon le serveur Apache risque de ne pas trouver le dossier. Principalement parce que l'adresse entrée dans le navigateur est convertie en bas de case, et que généralement un système d'exploitation qui se respecte fait une différence entre, par exemple 'Allo' et 'allo'.
La convention suggérée va comme suit:
- chaque projet est classé dans un chemin prévisible, similaire à
/home/renoirb/workspace/client/projectname
- le projet a un dossier
web/
- les autres dossiers au même niveau que
web/
peuvent être n'importe quoi d'autre.
Idéalement, la logique applicative ne devrait pas être visible publiquement de toute façon. Seulement le fichier principal appelle l'"autoloader" en dehors du DocumentRoot.
De cette façon le vous pouvez classer tout vos projets du même client, et séparer par projets.
La procédure tient aussi en compte
* L'utilisateur courrant puisse écrire dans son dossier workspace/
avec Apache2 comme s'il était son propre utilisateur avec mpm-itk
* Le nom de domaine utilisé définit dans quel dossier de l'utilisateur chercher
Procédure
- Assurer que les modules sont chargés
sudo a2enmod vhost_alias
- Ajouter le fichier default a la config de apache
sudo vi /etc/apache2/ports.conf
- Vérifier qu'il y a ceci:
NameVirtualHost *:80
Listen 80
UseCanonicalName Off
- Modifier le fichier de config du VirtualHost par défaut
- Fichier de configuration par magique
sudo vi /etc/apache2/sites-available/default
- Verifier qu'il y a ce bloc dans
<VirtualHost ...>
:
<IfModule mpm_itk_module>
AssignUserId renoirb users
</IfModule>
- Remplacer la mention
DocumentRoot
par ce format:
VirtualDocumentRoot /home/renoirb/workspaces/%1/%0/web
Sources
- Apache 2.2 documentation on vhost_alias
- J'attribue le crédit a mon ex-associé Stephan Champagne, qui a trouvé la méthode et qui me l'a enseignée.
- How To Setup an Ubuntu LAMP Server for Development Purposes Only on Drupal groups
- ServerFault "Apache2 automatic Subdomains" thread