Création d’un serveur web virtualisé dédié au webmapping – partie 1

Février 2010, avec l’un de mes collègues du Cirad Alain Clopès, j’ai donné un cours sur la création d’un serveur web virtualisé dédié au webmapping. Alors, autant que ça serve à d’autres, voici un petit topo du cours.

Nous allons mettre en œuvre un serveur web fonctionnant sous Linux (avec Ubuntu 9.10 Karmic Koala) virtualisé sous Windows XP à l’aide du logiciel gratuit VirtualBox de Sun MicroSystem.

Il s’agit ici de se créer un environnement de développement avec les serveurs installés sur une machine virtuelle pour ne pas ralentir sa machine lorsqu’on ne développe pas. La sécurisation réalisée dans ces notes est donc extrêmement faible. Vous devez, pour un serveur en production, impérativement consulter les ressources disponibles sur internet (notamment sur http://doc.ubuntu-fr.org/tutoriel/securiser_apache2 pour sécuriser votre serveur web correctement).

Installation d’une machine virtuelle de type Linux

Logo Virtualbox

Sous Windows, installer VirtualBox (dans notre cas, en version 3.1.4). De nombreux tutoriels existent pour l’installation de VirtualBox couplée à une installation d’Ubuntu. Recherchez en un avec Google si nécessaire (mots clé: tutoriel VirtualBox Ubuntu)

Télécharger la dernière version de Ubuntu (http://www.ubuntu-fr.org/telechargement, il faut récupérer un fichier iso de Ubuntu 9.10 par exemple mais il n’est pas nécessaire de la graver sur un support optique, VirtualBox va se charger d’émuler grace à ce fichier iso, un CD-ROM)

Dans VirtualBox, créez une machine virtuelle de type Linux Ubuntu, avec un disque dur virtuel d’au minimum 10Go. Vous pouvez également créer un disque dur virtuel dynamique.

A ce stade, les ressources clavier et souris sont capturées par la machine virtuelle lorsque vous cliquez dans celle-ci. Pour récupérer la souris dans Windows, il faut utiliser la touche [CTRL] droite qui désactive la capture. Cette touche [CTRL] droite est la touche ressource dans VirtualBox pour tout ce qui concerne les fonctions « facilitatrices » de VirtualBox.

Après l’installation d’Ubuntu, lancez les mises à jours qui sont nécessaires. Il se peut que le système vous demande de redémarrer la machine virtuelle.

Installation des VBoxGuestAdditions

Afin de rendre plus agréable l’utilisation conjointe de Windows XP et d’une machine virtuelle, VirtualBox propose d’installer un ensemble d’utilitaires appelés VBoxGuestAdditions. Pour cela, montez le disque iso nommé VboxGuestAddition.iso accessible depuis le menu « Périphériques/Périphériques optiques » de votre machine virtuelle.

Pour information, ce fichier iso se situe dans le répertoire d’installation de VirtualBox (C:/Program Files/Sun/VirtualBox). Un CD apparaît sur le bureau d’Ubuntu. Ne le lancez pas comme il vous l’est proposé (en fait, ce CD n’est pas bootable, cela ne servirait à rien).

Dans Ubuntu, dans la console (menu Application/Accessoires/Terminal), installez les VBoxGuestAddition par la commande suivante:

sudo /media/cdrom/VBoxLinuxAddition-x86.run

La commande sudo permet d’exécuter le script en mode superutilisateur (Super Utilisateur Do).

Après avoir redémarré, il n’est plus utile d’utiliser la touche [CTRL] droite pour récupérer dans Windows la souris ou le clavier. C’est l’un des grands avantages des VBoxGuestAdditions. Vous pouvez également passer en mode plein écran. Par exemple [CTRL]  + [F] (fait passer ou sortir la machine virtuelle en mode plein écran ). [CTRL]  + [G] permet par exemple d’ajuster la taille de l’écran automatiquement.

Partage de ressource de type disques durs et répertoires

Pour partager une ressource disque de Windows vers votre Ubuntu virtualisé, créez un répertoire partagé (menu Périphérique/Répertoires partagés). Partagez en accès complet par exemple votre disque D: de Windows XP (utilisez par exemple le nom de partage donné par défaut D_DRIVE.

Sous Ubuntu, créez, par exemple sur votre Bureau, un nouveau dossier (ce sera le dossier avec lequel nous accèderons à votre disque dur D: partagé sous le nom de D_DRIVE). Nommez ce dossier explicitement, par exemple DISQUE_D_WINDOWS sur le bureau et dans une console, tapez cette ligne de commande:

sudo mount -t vboxsf /home/farah/Bureau/D_DRIVE DISQUE_D_WINDOWS

Après cette commande, en le dossier du bureau nommé  DISQUE_D_WINDOWS, vous aurez accès à votre disque dur D: en lecture et écriture (faites d’ailleurs attention…)

Pour rendre permanent le partage de ressources, il faut éditer le fichier rc.local par la commande

sudo gedit /etc/init.d/rc.local

et ajouter la ligne suivante en fin de fichier

mount –t vboxsf D_DRIVE /home/farah/Bureau/DISQUE_D_WINDOWS

Rendre accessible depuis votre réseau votre machine virtuelle Ubuntu

VirtualBox configure par défaut les machines virtuelles en mode NAT, c’est-à-dire que la machine virtuelle Ubuntu (VM) accède au LAN (le réseau local) à travers la machine hôte par un routage NAT. La machine virtuelle partage donc l’adresse IP de la machine hôte. Internet est accessible depuis votre VM Ubuntu, mais votre VM Ubuntu n’est pas accessible depuis votre réseau local.

Confirmons cela: dans la console Ubuntu, trouvez votre adresse ip (de votre contrôleur réseau eth0) par la commande:

ifconfig

La réponse a ce format:

eth0      Link encap:Ethernet  HWaddr 08:00:27:2d:23:17
inet adr:10.0.2.15 Bcast:192.168.0.122  Masque:255.255.255.0
adr inet6: fe8c::ac0:27fc:fa2d:2317/64 Scope:Lien
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
Packets reçus:451 erreurs:0 :0 overruns:0 frame:0
TX packets:118 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
Octets reçus:58668 (58.6 KB) Octets transmis:19732 (19.7 KB)
Interruption:10 Adresse de base:0xd020

Votre adresse IP est signalée en rouge ci-dessus. On voit que l’adresse IP de votre machine virtuelle est de la forme 10.0.2.15. Sous Windows exécutez la console par la commande (menu Démarrer/Exécuter…):

cmd

puis  pinguez votre machine virtuelle par la commande windows:

ping 10.0.2.15

L’adresse n’est pas pinguable… votre machine virtuelle n’est donc pas accessible depuis votre machine hôte (ici Windows XP ou Vista) et d’une façon générale, depuis votre réseau local.

Passage du réseau du mode « NAT » en mode « Pont réseau »:

Pour rendre accessible votre MV Ubuntu, il faut modifier les préférences de la machine virtuelle dans VirtualBox et passer de mode réseau NAT à mode « Accès par pont ». Arrêtez votre machine virtuelle et allez dans ses préférences depuis VirtualBox. Dans l’onglet réseaux, choisissez le mode « Accès par un pont réseau » et choisissez la carte réseau par laquelle la machine hôte est connectée au réseau local. La machine virtuelle sera alors vue par le routeur du réseau comme une machine à part entière, avec une adresse MAC propre, et votre VM Ubuntu récupèrera du DHCP (s’il existe) une adresse « normale ». S’il n’y a pas de DHCP, il vous faudra attribuer à votre VM Ubuntu une adresse IP (masque et DNS) que vous donnera votre administrateur réseau

Relancez votre machine virtuelle Ubuntu et confirmez que votre machine est accessible depuis le réseau local.

Dans la console Ubuntu, trouvez votre adresse ip (de votre contrôleur réseau eth0) par la commande:

ifconfig

La réponse a ce format:

eth0      Link encap:Ethernet  HWaddr 08:00:27:2d:23:17
inet adr:192.168.0.154 Bcast:192.168.0.255  Masque:255.255.255.0
adr inet6: fe80::a00:27ff:fe2d:2317/64 Scope:Lien
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
Packets reçus:451 erreurs:0 :0 overruns:0 frame:0
TX packets:118 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
Octets reçus:58668 (58.6 KB) Octets transmis:19732 (19.7 KB)
Interruption:10 Adresse de base:0xd020

Votre adresse IP est signalée en rouge ci-dessus. On voit que l’adresse IP de votre machine virtuelle est maintenant de la forme 192.168.0.154. Sous Windows exécutez la console par la commande (menu Démarrer/Exécuter…):

cmd

puis  pinguez votre machine virtuelle par la commande windows:

ping 192.168.0.154

L’adresse est accessible !!! Votre machine virtuelle est accessible depuis votre réseau local et répondra, par exemple, une fois un serveur web créée, à toute requête de type http://192.168.0.154/

Nous avons à ce niveau une machine, soit virtuelle, mais qui se comporte exactement comme n’importe quelle autre machine du réseau local, comme n’importe quel serveur…

A partir de maintenant, toutes les commandes ci-dessous se réaliserons uniquement sous la machine virtuelle Ubuntu.

Virtualbox en action: Ubuntu, Ubuntu tournant sous Windows Seven

Petits rappels sur Linux:

La commande man dans une console, donne l’aide d’un programme. Exemple:

man crontable

Pour sortir de l’aide, taper

:q

D’autres méthodes permettent d’obtenir l’aide d’une commande, notamment le – – help

ln --help

Voir les processus:

sudo ps -e

Les droits sur Linux

Une référence: http://www.ac-creteil.fr/reseaux/systemes/linux/debian/deb-tp-droits.html

Une autre référence: http://www.tuteurs.ens.fr/unix/droits.html

L’utilisateur par défaut sur serveur web apache sera nommé www-data. Il appartiendra au groupe www-data (noté www-data:www-data).

Un utilisateur appartient forcément à un groupe. Il peut être seul dans son propre groupe. Un groupe peut avoir plusieurs utilisateurs. Un utilisateur peut être dans plusieurs groupes.

La commande chmod modifier les droits. La commande suivante les droits d’exécution à tout le monde:

chmod a+x /mondossier

Elle est l’équivalement des 3 commandes suivantes:

chmod u+x /mondossier
chmod g+x /mondossier
chmod o+x /mondossier

… ce qui est aussi l’équivalent de

chmod 711 /mondossier

Ajout d’un utilisateur:

Cette commande créée l’utilisateur et le groupe s’il n’existe pas ainsi que le répertoire /home/toto/

sudo adduser toto:totogr

Arborescence des fichiers linux

Rappel rapide sur l’arborescence des fichiers linux (avec en mémoire cet adage: sous Linux, tout est fichier):

/   (c'est la racine )
|---boot (noyaux linux nécessaires au démarrage de la machine)
|---etc (contient tous les fichiers de configuration)
|---bin (contient tous les exécutables et utilitaires de Linux)
|---usr (contient le bazar utilisateurs compléments au répertoire bin)
|---|---bin
|---|---local / bin
|---|---lib
|---└---sbin (c'est là où il y apache notamment)
|---home (c'est le homedirectory : les données utilisateur y sont
|                 stockées)
|---|---farah           (répertoire perso de Farah)
|---└---abderrazzak     (répertoire perso d'Abderrazzak)
|---var (contient la messagerie, les mails arrivant, partants,
|   |             les spool d'impression, les logs système, ...)
|---|---www (fichiers affichés à la racine du serveur
|   |                   ex: http://localhost/ )
|---|---mail (les mails entrants, sortants, ..)
|---|---spool
|---└---log

Enfin, si vous avez une longue série de commande en sudo à taper, passer en sudo permanent (attention, d’une façon générale, c’est déconseillé) par la commande:

sudo -s

Prochaine étape, la partie 2: Serveur web Apache et PostgreSQL