Création de virtualhosts

18 May 2012

L'une des premières choses à faire lorsque l'on initialise un projet web est de créer un répertoire de travail (workspace) et un hôte virtuel (virtual host). Ici, nous allons écrire un script Shell qui nous permettra d'automatiser cette phase d'initialisation.

Les étapes :

  • créer le répertoire de travail
  • ajouter les permissions sur le répertoire créé précédemment
  • créer le virtual host
  • assurer la résolution du nom de domaine en local
  • activer le virtual host
  • redémarrer Apache

Le script :

On va commencer par créer un fichier nommé vhost.sh dans lequel nous allons renseigner la première ligne qui est commune à tous les scripts Bash :

#!/bin/bash

Nous allons ensuite définir quelques constantes utiles :

VHOST_DIR=/etc/apache2/sites-available
WORKSPACE=/home/mbrunot/workspace
OWNER=mbrunot:mbrunot
CHMOD=0755

Valider que l'utilisateur qui exécute le script est bien l'utilisateur root :

if [ "$(whoami)" != 'root' ]; then
  echo "Il est nécessaire d'exectuer ce script avec l'utilisateur root !"
  exit 1;
fi

Récupèrer le nom de domaine à créer en local :

read -p "Entrer le nom de domaine à créer :" DOMAIN

Créer le répertoire de travail :

if ! mkdir -p $WORKSPACE/$DOMAIN; then
  echo "ERREUR: impossible de créer le répertoire de travail."
else
  echo "Répertoire de travail créé avec succès."
fi

Ajouter les permissions sur le répertoire :

chown $OWNER $WORKSPACE/$DOMAIN
chmod $CHMOD $WORKSPACE/$DOMAIN

Créer le virtual host :

VHOST_STR="Alias /$DOMAIN $WORKSPACE/$DOMAIN\n\
<VirtualHost *:80>\n\
 ServerName $DOMAIN\n\
 ServerAlias www.$DOMAIN\n\
 DocumentRoot $WORKSPACE/$DOMAIN\n\
 <Directory $WORKSPACE/$DOMAIN>\n\
  DirectoryIndex index.php\n\
  Options -Indexes FollowSymLinks SymLinksifOwnerMatch\n\
  AllowOverride all\n\
  Allow from all\n\
 </Directory>\n\
 ErrorLog /var/log/apache2/$DOMAIN-error.log\n\
 CustomLog /var/log/apache2/$DOMAIN-access.log combined\n\
</VirtualHost>"

if ! echo -e $VHOST_STR > $VHOST_DIR/$DOMAIN; then
  echo "ERREUR: le virtual host n'a pas été créé."
else
  echo "Virtual host ajouté."
fi

Assurer la résolution du nom de domaine en local :

HOST_STR="127.0.0.1 $DOMAIN"
if ! echo $HOST_STR >> /etc/hosts; then
  echo "ERREUR: impossible d'ajouter le domaine dans le fichier /etc/hosts."
else
  echo "Domaine ajouté dans le fichier /etc/hosts."
fi

Activer le virtual host :

a2ensite $DOMAIN

Redémarrer apache :

/etc/init.d/apache2 restart

Éxecution du script :

Il faut maintenant rendre le script exécutable avant de pouvoir le lancer :

mbrunot:~/utils$ chmod +x script.sh

mbrunot:~/utils$ sudo ./vhost.sh
Entrer le nom de domaine à créer :website
Répertoire de travail créé avec succès.
Virtual host ajouté.
Domaine ajouté dans le fichier /etc/hosts.
Site website already enabled
 * Restarting web server apache2 [ OK ]

Les mots de la fin :

Certes, ce script est un peu rigide. Il propose une seule version de virtual host ; et nous savons bien que suivant le type de projet web, le contenu d'un vhost peut différer. Prenons exemple sur le framework symfony, qui propose un répertoire web à l'intérieur de son arborescence. Mais ne pourrait on pas imaginer que le script nous propose plusieurs gabarits de virtual hosts ? Suivant les besoins !

Il en va de même pour la configuration que j'ai définie dans des 'constantes' en début de script. Certaines valeurs peuvent être passées en paramètre ou même demandées par le script.

Pour terminer, n'hésitez pas à automatiser. Même si vous vous dites que cela risque de vous prendre du temps. Au final, vous vous simplifierez le travail. Et peut-être même celui de vos collègues.


Commentaires

comments powered by Disqus