Dans ce tutoriel je vous propose de découvrir Vagrant, un outil pour mettre en place un environnement de développement et de test très rapidement. En effet, Vagrant va vous permettre d'installer et de lancer une machine virtuelle (VM) en quelques lignes de commandes.
Pourquoi utiliser une VM
La première question que vous devez vous poser est "Mais pourquoi utiliser une VM quand on a WAMP ou MAMP ?"
WAMP et MAMP sont de formidables outils quand il s'agit de mettre en place les outils pour commencer à travailler sur PHP mais ils comportent quelques problèmes :
- L'environnement Window ou Mac peut être très différent de l'environnement final, lors de la mise en ligne on peut se retrouver avec des erreurs inattendu.
- On ne peut pas tester de configuration avancée comme l'utilisation d'apc ou même de Varnish
- On ne peut pas partager facilement notre configuration des différents outils
Une machine virtuelle au contraire va nous permettre de créer plusieurs environnements au plus proche de l'environnement final. On va pouvoir y installer une distribution linux et les différents outils de travail (apache2, PHP et MySQL).
Mais installer tout ça c'est un peu chiant (par rapport au simple installer de WAMP). C'est là que vagrant intervient
Vagrant
Vagrant va vous permettre d'installer une machine en un clin d'oeil. Pour cela il va nous falloir 2 outils :
- VirtualBox pour gérer les VM
- Vagrant
Une fois ces 2 outils installés vous êtes en mesure d'installer votre première machine virtuelle, pour cela il vous suffit de trouver la box vagrant qui vous intérèsse et en ligne de commande :
# vagrant init <box-name> <dox-url>
# Dans le cas de debian :
$: vagrant init boxdetest https://s3-eu-west-1.amazonaws.com/ffuenf-vagrant-boxes/debian/debian-7.2.0-amd64.box
$: vagrant up
Et voila votre machine va s'installer toute seule avec la commande vagrant up et vous pourrez vous y connecter directement via ssh avec
$: vagrant ssh
Chef Solo
Installer une machine c'est bien, la configurer c'est mieux. Vous avez remarqué lors de l'initalisation vagrant a créé un fichier Vagrantifle. Ce fichier va vous permettre de configurer la machine mais aussi de lui demander d'éxécuter des commandes particulières au démarrage. Indiquer manuellement les apt-get à faire ne serais pas très pratique (surtout si on veut faire varier les environnements), on va utiliser Chef Solo pour provisionner la machine.
Chef nous permet de télécharger des "cookbooks" qui serve à installer certains outils. L'avantage de ces cookbooks est double. D'une part il est possible d'y injecter des variables de configurations pour les adapter à nos besoin mais il est aussi possible d'utiliser un même cookbook pour plusieurs environnement (des conditions à l'intérieur des recettes permet d'adapter les commandes au système d'exploitation).
Pour éviter de devoir installer manuellement ces cookbooks on peut utiliser une gem plutôt utile : Berkshelf. On commence par installer le plugin Berkshelf pour vagrant
$: vagrant plugin install vagrant-berkshelf
Ensuite on peut indiquer la liste des cookbooks à télécharger en créant un fichier Berksfile :
site :opscode
cookbook 'apt'
cookbook 'apache2'
Ce fichier indique les cookbooks que l'on souhaite utiliser, ils seront automatiquement téléchargé (berkshelf permet de ne pas avoir à les télécharger, ils sont téléchargés automatiquement depuis les dépôt github). Ensuite si vous souhaité utilisé une recipe dans le fichier vagrantfile :
config.berkshelf.enabled = true
config.vm.provision :chef_solo do |chef|
chef.add_recipe "apt"
chef.add_recipe "apache2"
end
Si votre machine virtuelle est déjà lancée il faudra utiliser la commande
$: vagrant provision
Ceci installerant les différents cookbooks et lancera chef solo pour utiliser les recipes.
Une bonne base pour commencer
Tout ça c'est bien jolie mais si vous ne voulez pas perdre une demi journée à configurer votre base de travail vous pouvez utiliser une configuration vagrant déjà travaillée. Je vous conseille d'utilise Vagrant Lamp Stack de MiniCodeMonkey.
Ce dépôt vous permet d'installer rapidement
- une box Ubuntu pricse 32 avec le couple Apache / MySQL et PHP
- Memcached, Composer, Curl, git et vim
- utilise le plugin vagrant-hostmanager pour rendre le site accessible via site.local (plutôt que de taper l'ip)
- Relie le dossier local dans le dossier /var/www
Evidemment vous pouvez personnaliser cette base pour l'adapter à vos besoins.