Simplifiez la gestion de vos hosts sous OSX
28 Février 2013
Gérer les hosts sur sa machine de développement peut vite devenir un casse tête énorme. De plus il n’est pas rare de devoir jongler avec de nombreux serveurs pour des projets web, du coup la gestion des hosts peut vous faire perdre beaucoup de temps.
Heureusement avec dnsmasq
, voici un moyen vraiment très simple de gérer les hosts de développement.
Je ne sais pas comment vous travaillez, mais personnellement j’aime bien avoir sur ma machine uniquement des sites dans le domaine .dev
ainsi je suis vraiment sur que je visualise uniquement mon travail local. Mais la mise en place de ces domaines est assez long à faire, il faut éditer la configuration Apache pour ajouter un nouveau vhost, il faut éditer le fichier /etc/hosts
pour ajouter le domaine voulu en IPv4 et IPv6 (pour éviter les problèmes de DNS).
Avec dnsmasq
vous pouvez oublier l’étape d’édition du fichier host.
dnsmasq
dnsmasq
est un petit utilitaire qui va faire tourner un daemon en arrière plan et qui va nous permettre de faire tourner un «mini-serveur» DNS sur notre machine. Ce petit serveur va «attraper» toutes les requêtes pour le domaine de son choix et le rediriger vers notre machine locale.
Tous d’abord, l’installation. Si vous avez brew installé sur votre machine, c’est super simple. Si vous n’avez pas brew installé, je vous conseille de le faire, cela vous fera gagner du temps.
Voici les trois commandes qui installeront dnsmasq
et qui préparerons le lancement automatique du daemon au démarrage de votre machine :
$> brew install dnsmasq
$> cp /usr/local/Cellar/dnsmasq/2.63/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf
$> sudo cp /usr/local/Cellar/dnsmasq/2.63/homebrew.mxcl.dnsmasq.plist /Library/LaunchDaemons
Configuration
Passons maintenant à la configuration, il faut configurer dnsmasq
pour répondre au domaine .dev
et il faut ajouter dnsmasq à la liste des resolver DNS de votre machine.
Tout d’abord, configurons dnsmasq
sur le domaine .dev
, on ajoute une ligne dans le fichier de configuration :
echo 'address=/dev/127.0.0.1' > /usr/local/etc/dnsmasq.conf
Ensuite, on ajoute le mini-serveur DNS dans la liste des resolver de la machine avec les commandes suivantes :
$> sudo mkdir /etc/resolver
$> sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/dev'
Il ne reste plus qu’à démarrer le service et vider le cache de DNS de votre machine pour vérifier que tout marche correctement :
$> sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
Tests
Je ne sais pas si faire un flush est nécessaire, mais ça ne mange pas de pain, donc je vous conseille de le faire et de vérifier que vous avez bien un resolver pour le domaine de votre choix avec les commandes suivantes :
$> dscacheutil -flushcache
$> scutil --dns
[...]
resolver #9
domain : dev
nameserver[0] : 127.0.0.1
[...]
Enfin, le dernier test et le plus important, faire un ping sur un domaine inconnu mais qui se termine par .dev
pour vérifier que dnsmasq
fonctionne correctement :
$> ping -c 1 mondomainequinexistepas.dev
PING mondomainequinexistepas.dev (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.029 ms
--- mondomainequinexistepas.dev ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.029/0.029/0.029/0.000 ms
Si le résultat est satisfaisant, vous pouvez nettoyer (commenter, on est jamais trop prudent) votre fichier hosts…
Conclusion
Voilà, maintenant pour créer un nouveau vhost, il suffit «juste» d’éditer la configuration d’Apache, plus besoin d’ajouter des noms de domaines dans votre fichier hosts.
Cette technique est tellement bien qu’elle peut être facilement étendue. Par exemple, je veux créer un sous-domaine .vm
qui redirige vers une machine virtuelle gérée avec Vagrant, c’est possible et très simple à mettre en place.
Note importante :
Enfin, si cette technique vous intéresse mais que vous ne voulez pas utiliser le domaine .dev
, je vous conseille tout de suite de ne pas essayer d’utiliser le domaine .local
, car c’est un domaine «réeservé» par OSX pour le protocole ZeroConf qui permet aux Macs d’un même réseau de communiquer facilement. En revanche, si vous êtes sous Linux et que vous vous tenez éloigné des Macs alors pas de soucis vous pouvez utiliser le domaine .local
.