« 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.

3 commentaires

  1. Celtiore dit :
    17 mai 2009 à 4:10

    Bonjour,
    Pour éviter des warnings :

    NameVirtualHost projetrun.dev

  2. Antoine Leclair dit :
    17 mai 2009 à 9:39

    Par défaut, Apache2 sous Ubuntu a déjà une directive NameVirtualHost, dans ports.conf, qui ressemble à ceci:

    NameVirtualHost *:80

    À moins que je me trompe, ajouter une autre directive NameVirtualHost dans 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.

  3. Laurent dit :
    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.

Laisser un commentaire

« retourner à la page principale du blog