Nous allons apprendre comment utiliser Dnsmasq car comme de nombreux développeurs web, vous avez l’habitude de mettre à jours votre fichier /etc/hosts pour faire pointer votreprojet.dev vers 127.0.0.1. Le plus souvent, c’est du temps perdu :

  • Vous devez mettre à jours à chaque fois que vous ajoutez ou retirer un projet,
  • Et ça requière les droits d’administration pour effectuer ces changements.

L’avantage d’installer un serveur de DNS en local comme Dnsmasq, c’est que ce processus devient automatique.

La manière la plus simple à ce jours, c’est de l’installer au travers des paquets d’Homebrew. Je vous laisse découvrir Homebrew, si vous ne l’avez pas encore.

# On met à jours notre installation d'Homebrew à jours
$ brew up
$ brew install dnsmasq

Le processus d’installation va executer pas mal de commandes permettant de configurer Dnsmasq par défaut. Nous allons copier les fichiers de configuration et permettre à Dnsmasq de démarrer automatiquement avec notre machine.

# On copie les fichiers de configuration par défaut
$ cp $(brew list dnsmasq | grep /dnsmasq.conf.example$) /usr/local/etc/dnsmasq.conf
# On copie la configuration du deomon
$ sudo cp $(brew list dnsmasq | grep /homebrew.mxcl.dnsmasq.plist$) /Library/LaunchDaemons/
# On permet à Dnsmasq de démarrer automatiquement
$ sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

Configuration de Dnsmasq

Dans cette configuration, nous n’allons pas utiliser 127.0.0.1 pour la configuration étant donné que nous allons utiliser Docker pour le faire, récupérer l’adresse IP de votre machine virtuelle :

$ docker-machine ip prl-dev

Maintenant que tout est installé et démarré correctement, il est temps de le configurer, le fichier de configuration est situé ici par défaut /usr/local/etc/dnsmasq.conf. Ce que nous avons envie de faire, c’est par exemple de rediriger toutes les requêtes terminant par « .dev » et de les envoyer sur notre machine virtuelle.

$ sudo vi /usr/local/etc/dnsmasq.conf

Localiser la ligne où vous verrez address=/double-click.net/127.0.0.1 et rajoutez en dessous (en remplaçant 10.211.55.8 par l’ip de votre machine virtuelle):

address=/dev/10.211.55.8

Nous devons redémarrer le service pour prendre en compte cette nouvelle configuration.

$ sudo launchctl stop homebrew.mxcl.dnsmasq
$ sudo launchctl start homebrew.mxcl.dnsmasq

Pour tester que les requêtes DNS traverse bien notre Dnsmasq, nous allons utiliser l’utilitaire « dig » :

$ dig mon.super.site.internet.en.point.dev @127.0.0.1

Si tout c’est bien passé, la réponse va être :

;; ANSWER SECTION:
mon.super.site.internet.en.point.dev. 0 IN	A	127.0.0.1

Configuration OS X

Maintenant que nous avons un serveur DNS configuré et fonctionnel, nous devons dire à OS X de rediriger uniquement « .dev » vers notre serveur DNS. Beaucoup de système UNIX-Like ont des configurations permettant de controller la façon dont les requêtes DNS se comportent et OS X en fait partie.Cela vous permet d’ajouter des configurations additionnelles au répertoire « resolver ». Ce répertoire par défaut n’existera probablement pas sur votre système, nous allons donc le créer :

$ sudo mkdir -p /etc/resolver

Maintenant, nous allons devoir créer un fichier avec le même nom que notre extension « .dev » dans notre nouveau répertoire et d’y rajouter notre « nameserver ».

$ sudo tee /etc/resolver/dev >/dev/null <<EOF
nameserver 127.0.0.1
EOF

Tester notre configuration DNS

Pour tester la configuration, nous allons tout simplement utiliser la commande « ping ».

# s'assurer que l'on a pas cassé nos DNS
$ ping -c 1 google.com
# On vérifie que notre .dev fonctionne
$ ping -c 1 mon.super.site.internet.en.point.dev
$ ping -c 1 lalala.dev

Configuration de Docker et nginx-proxy

La prochaine étape va être de configurer docker pour lui permettre de répondre automatiquement à nos « .dev ». Pour cela, nous allons utiliser le container « nginx-proxy« , ce qui nous permettra d’assigner automatiquement les requêtes de nos « .dev » vers notre container web.

Pour démarrer notre container « nginx-proxy », on peut le faire en une ligne :

$ docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy

Dès que l’on voudra associer un nom de domaine en « .dev » vers notre container, on aura besoin de rajouter une variable d’environnement à Docker VIRTUAL_HOST :

$ docker run -e VIRTUAL_HOST=mon.super.site.internet.en.point.dev ...
# Par exemple
$ docker run -d -p 80 -e VIRTUAL_HOST=inrage.dev -v /var/www/inrage:/app tutum/apache-php