« retourner à la page principale du blog
Environnement de développement web: Serveurs Virtuels
Il y a quelques mois, je vous montrais comment installer un environnement de développement web de base sous Ubuntu.
Aujourd’hui je continue là où je vous avais laissé, c’est-à-dire: vous venez d’installer Apache, MySQL, PHP et phpMyAdmin et avez vérifié que le tout fonctionnait bien. Votre dossier web est /var/www. Le but de l’article d’aujourd’hui est de vous permettre d’utiliser un autre dossier. En fait, vous pourrez utiliser un dossier différent pour chaque projet et y accéder avec des noms de domaines différents. Je vous introduis donc aux serveurs virtuels.
Serveurs virtuels
Un serveur virtuel, c’est quoi? C’est ce qui permet à Apache de servir plusieurs domaines ou sous-domaines à partir du même serveur. Par exemple, Apache peut servir www.example.com et blog.example.com en même temps. Chacun ayant son propre serveur virtuel.
Le dossier d’Apache
Tout d’abord, dans le dossier de configuration d’Apache, /etc/apache2, il y a, entre autres, les dossiers sites-available et sites-enabled.
Le dossier sites-available contient tous les fichiers de configurations de vos sites web. Pour l’instant, il n’en contient qu’un seul: default, qui dirige vers le dossier /var/www. Nous partirons de ce default pour se créer d’autres serveurs virtuels.
Le dossier sites-enabled contient des symlinks vers les fichiers de configurations contenus dans sites-available. Ces symlinks existent uniquement lorsque ces sites sont actifs. Lorsqu’Apache s’initialise, il vérifie les fichier dans sites-enabled.
Pour activer ou désactiver un site, on utilise les commandes a2ensite et a2dissite.
Créer un serveur virtuel
On commence par aller dans le dossier où les fichiers de configuration se situent:
cd /etc/apache2/sites-available
Ensuite, on se fait une copie du fichier default pour notre premier projet:
sudo cp default projetun
Et on modifie le nouveau fichier:
sudo gedit projetun
Première chose à modifier, c’est le DocumentRoot, c’est à dire, le dossier racine à partir duquel Apache va servir les pages pour ce site web. J’utilise générallement un dossier dans mon home. Quelque chose comme /home/hooba/web/projetun/htdocs. Remplacez donc /var/www par le dossier de votre choix pour ce projet. Remplacez aussi le nom du dossier dans la configuration du dossier en tant que tel quelque lignes plus bas (<Directory /var/www/>).
Ensuite, on veut ajouter le nom de domaine du serveur virtuel. Par défaut, Apache utilisait localhost. Après l’ouverture du tag VirtualHost, ajoutez le nom du serveur que vous voulez utiliser avec ServerName. Par exemple: ServerName projetun.dev.
Le haut de votre fichier devrait donc ressembler à:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName projetun.dev
DocumentRoot /home/hooba/web/projetun/htdocs
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/hooba/web/projetun/htdocs>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
# ...
Vous pouvez donc sauvegarder le fichier et fermer gedit.
Activer le serveur virtuel
Vous avez maintenant un fichier de configuration prêt à être utilisé dans sites-available. Il faut maintenant laisser savoir Apache qu’il a un nouveau site à servir.
Pour commencer, aller créer un fichier index.html dans le dossier que vous avez spécifié à l’étape précédente. Un fichier très simple suffira. Par exemple:
<html><body>
<h1>Tadam!</h1>
</body></html>
Si vous allez à http://projetun.dev/, vous devriez avoir une erreur du genre « Serveur introuvable ». C’est, en premier lieu, parce qu’Apache n’est pas au courant qu’il doit servir quelque chose à partir de cette URL. On va donc l’avertir qu’il y a un nouveau site:
sudo a2ensite projetun
Cette commande crée le symlink nécessaire dans le dossier sites-enabled. Si vous n’utilisez pas le site default, vous pouvez égallement en profiter pour le désactiver avec:
sudo a2dissite default
Lorsque vous avez fait les modifications nécessaires, vous pouvez dire au daemon Apache qu’il doit recharger sa configuration:
sudo /etc/init.d/apache2 reload
Hosts
Si vous allez à l’adresse http://projetun.dev/, vous aurez la même erreur que tout à l’heure. La raison, c’est que votre navigateur demande à des serveurs DNS « à quelle adresse IP dois-je faire ma requête pour le domaine projetun.dev? ». Comme ces serveurs ne sont pas au courant que vous venez de créer un serveur virtuel, il faut empêcher la demande d’avoir lieu et spécifier immédiatement à quel ordinateur (à quelle adresse IP) on doit faire la requête.
Heureusement, c’est plutôt simple. Il suffit d’ajouter une ligne dans le fichier hosts. Il se situe dans le dossier /etc.
sudo gedit /etc/hosts
Ajoutez simplement une ligne à la fin qui indique votre adresse IP, ainsi que le domaine que vous venez de créer. L’adresse 127.0.0.1 correspond toujours à l’ordinateur sur lequel s’exécute le code. La ligne ajouté ressemblera donc à:
127.0.0.1 projetun.dev
Sauvegardez le fichier et quittez gedit.
Un serveur virtuel fonctionnel
Si vous avez bien suivi les étapes, lorsque vous allez à l’adresse http://projetun.dev/ vous devriez voir le contenu du fichier index.html que vous avez créé tout à l’heure. Vous pouvez donc répéter l’opération pour chacun de vos projets.
Si ça ne fonctionne pas, voici quelques pistes afin de trouver votre problème: avez vous réinitialiser Apache (sudo /etc/init.d/apache2 reload)? Vous pouvez peut-être essayer de le redémarrer au complet avec sudo /etc/init.d/apache2 restart. Est-ce qu’Apache a les droits nécessaires pour accéder au dossier que vous avez spécifié? Est-ce que le fichier projetun existe bel et bien dans /etc/apache2/sites-enabled? Sinon, il faudrait simplement activer le site avec sudo a2ensite projetun. Si le fichier n’apparrait pas (ce n’est pas supposé), vous pourriez toujours essayer de directement faire un symlink vers le fichier dans sites-available.

17 mai 2009 à 4:10
Bonjour,
Pour éviter des warnings :
NameVirtualHost projetrun.dev
17 mai 2009 à 9:39
Par défaut, Apache2 sous Ubuntu a déjà une directive
NameVirtualHost, dansports.conf, qui ressemble à ceci:À moins que je me trompe, ajouter une autre directive
NameVirtualHostdans notre fichier de virtual host causerait problème.Merci tout de même pour la remarque. Ça m’a fait fouiller dans la documentation d’Apache et ça m’a permis d’éclaircir quelques trucs.
9 novembre 2009 à 10:26
Bonjour,
Merci pour ce tuto très bien expliqué!!
j’ai suivi plusieurs autres tuto pour avoir un serveur virtuel mais soit ça marchait pas soit je ne comprenais pas.
Encore merci!
Laurent.