Jacques Bodin-Hullin Développeur d'applications Web

La perfection est atteinte non quand il ne reste rien à ajouter, mais quand il ne reste rien à enlever.

Antoine de Saint Exupéry

Comment utiliser Vagrant et Magento ?

Ça fait plusieurs fois qu'on me demande comment on utilise Vagrant chez Monsieur Biz.

J'ai donc décidé de faire un article malgré le peu de temps que j'ai à ma disposition en ce moment.

L'idée c'est de vous montrer comment on fonctionne. Après libre à vous de nous faire quelques PR sur Github, ou encore de ne pas utiliser notre box, tout simplement !

Je vous expliquerai aussi pourquoi nous ne passons pas sur Docker pour le moment.

Pour les plus impatients, vous trouverez la Vagrant Box Magento de Monsieur Biz sur Github.


Pour ceux qui ne sont pas habitués à Vagrant, sachez que ça n'est pas très compliqué.
Par ailleurs je vais essayer de donner un maximum d'explications.

NB : Je suis exclusivement sur Mac. Donc il est très très fort probable que la box ne fonctionne pas pour vous si vous êtes sur Windows ou Linux.

Le Vagrantfile

Ce fichier est le point de départ de votre Vagrant. Je vais tenter d'expliquer celui que j'ai réalisé.

Au tout début il s'agit de quelques commentaires pour dire à Vim d'utiliser la syntax de ruby.
Ensuite vient le nom d'hôte de votre projet, ici vagrant-mage.dev. On utilise .dev car ça permet d'éviter la résolution des DNS. Juste en dessous on a l'IP utilisée pour Virtualbox. Si vous utilisez Virtualbox, faites en sorte ici d'avoir une IP différente pour chacun de vos projets.

Bon ensuite viennent les deux lignes qui permettent de rentrer dans la configuration de la box à proprement parler :

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

Là on entre simplement dans la configuration, comme l'indique bien le Vagrant.configure.

Au tout début on a la configuration pour VMWare :

  • On sélectionne précisément la box qu'on veut télécharger (elle ne l'est qu'une seule fois) ;
  • On précise la puissance de la VM ;
  • On ajoute une seconde interface ethernet. L'idée ici c'est d'avoir une seconde adresse IP dispo sur VM sur le même sous-réseau que la machine hôte. On utilise cette interface pour tester nos sites sur des machines virtuelles Windows.

Ensuite il y a une configuration pour Virtual Box :

  • Même chose on précise la box qu'on veut utiliser ;
  • On améliore un peu les perfs de Virtual Box ;
  • On assigne l'adresse IP qui est en haut du fichier.

Pourquoi choisir VM Ware et pas Virtual Box ?

Je suis parti du constat que Virtual Box est lent. La copie des fichiers, si ça n'est pas en NFS, est basée sur la solution native de Virtual Box : une horreur.
Finalement au bout de quelques mois j'ai tout simplement testé VMWare. Il s'avère que ma machine de dev basée sur Vagrant et VMWare est tout aussi rapide, voire plus rapide, que les serveurs de prod. Donc je n'ai pas cherché plus longtemps, le choix était fait.

Ensuite on a un peu de configuration réseau. Et surtout l'assignation du hostname à la ligne config.vm.hostname.

Le plus important c'est les dossiers partagés. On utilise NFS afin de gagner en performances (c'est "juste" ce qu'on utilise entre les serveurs pour partager des dossiers…).
Ivan Chepurnyi et moi-même nous sommes amusés fin 2013 lors d'un Hackathon à Leipzig en Allemagne à améliorer les performances de NFS. C'est pour cette raison qu'on y trouve plein de trucs étranges du genre :

mount_options: ["nolock", "async"],
bsd__nfs_options: ["alldirs","async","nolock"]

À noter que les options bsd__nfs_options sont dédiées à OSX (et à BSD du coup…) ;

Les lignes suivantes permettent de modifier le fichier /etc/hosts de votre machine afin de ne pas s'embêter avec l'IP auto-assignée par VMWare à la machine virtuelle :

# "Provision" with hostmanager
config.vm.provision :hostmanager

Ensuite on initialise la Vagrant avec Puppet !

On y retrouve quelques paramètres de personnalisation. Les voici expliqués avec des commentaires :

Le dernier truc sympa c'est ça :

Ici c'est très simple. Si vous avez un fichier LocalVagrantfile.rb à la racine de votre projet (au même endroit que le Vagrantfile et bien celui-ci sera chargé.
Ça permet d'avoir un fichier dédié à votre projet, ou un fichier juste pour vous.
Personnellement ce fichier est dans mon ~/.gitignore. Ainsi je peux ajouter des interfaces réseau, faire un peu de custom, etc. et ça uniquement pour moi !

Et sinon, elle contient quoi ta Vagrant ?

La box contient plein de choses !

Entre autres :

  • L'Installer pour Magento (a PHP command line tool for Magento extension development and scaffolding) accessible par défaut ;
  • Magerun ;
  • Modman ;
  • Deux certificats SSL : *.vagrant-mage.dev et [www.]vagrant-mage.dev (car ici le hostname est sur vagrant-mage.dev mais si vous le changez alors les certificats seront adaptés par Puppet) ;
  • Du coup 3 VirtualHost sur Apache qui gèrent les domaines suivants en http et https : *.vagrant-mage.dev et vagrant-mage.dev. C'est super pratique si vous voulez tester votre projet avec un SSL. Surtout que maintenant c'est une bonne pratique d'être full SSL.
  • Mailcatcher : Afin qu'aucun email ne se disperse dans l'Internet Mondial hein. Pour le lancer c'est simple : mailcatcher --ip=0.0.0.0.
  • Quelques outils : git, tmux (avec config perso), screen (avec config perso, htop et vim.
  • CasperJS, et donc du coup PhantomJS.
  • Composer
  • PHPUnit
  • MySQL évidemment. Du coup si vous avez un fichier database.sql.gz à la racine de votre projet (avec votre Vagrantfile) alors il sera importé au premier lancement.

Installer hostmanager

hostmanager est un petit plugin vagrant qui permet de modifier votre fichier /etc/hosts comme je l'indique un peu plus haut dans l'article. Pour l'installer :

vagrant plugin install vagrant-hostmanager

Comment démarrer un projet avec la Vagrant Box Magento ?

Commencez par cloner le projet où vous voulez : git clone https://github.com/monsieurbiz/vagrant-magento.git

Ensuite créez le dossier de votre projet et copiez-y les fichiers et dossiers Vagrantfile et puppet/.
Le dossier htdocs/ doit exister également, c'est dans celui-ci que vous mettrez votre projet Magento.

C'est parti pour un vagrant up !

Là ça va tout installer et tout et tout…

Ensuite rendez-vous dans votre navigateur sur http://vagrant-mage.dev ou https://vagrant-mage.dev.

Pensez à aller en SSH dans votre dossier Magento : vagrant ssh puis cd /vagrant/htdocs.
Là vous pouvez lancer magerun par exemple ! Ou encore installer !

C'est fini !

J'ai rédigé cet article très très rapidement, alors si vous avez des remarques ou questions, n'hésitez pas !

:)


Commentaires

blog comments powered by Disqus

Quelques infos

  • Par Jacques Bodin-Hullin
  • Publié le 04 February 2015
  • Les tags Vagrant, Magento

Contact

Mon QRcode

le QRcode