Vagrant pour Drupal et Symfony

Soumis par GoZ le ven 04/03/2016 - 16:45

Vagrant pour Drupal et Symfony

Cela fait plus d'un an maintenant que je travaille avec un environnement lamp géré par vagrant/ansible pour drupal/symfony, et je n'ai pas à m'en plaindre.

Passé les premiers moments de galères de performances, on est toujours en dessous de performances d'un vmware ou d'un intégration sans vm (il faudrait vérifier ça sur un linux sans vm), mais les performances restent bonnes pour un travail quotidien, même avec xdebug d'activé.

La base de ma configuration est un fork du repo de Julien Dubreuil.

Mon repo quand à lui ce trouve ici : https://github.com/GoZOo/vagrant-ansible-server-playbooks.

Outils disponibles

La configuration est traditionnelle et repose sur un Ubuntu:

* `ubuntu/trusty64`, soit 14.04.
* Apache 2.4.x + SSL + xdebug (a la demande) + xhprof (a la demande)
* PHP 5.5.x
* MySQL 5.5.x

Des outils plus "exotiques" sont ajoutés :

* Composer
* Drush
* Git
* Xdebug
* Varnish 4.1 auquel vous pouvez accéder via l'url http://33.33.33.20:6091, et bien sur pour vos différents vhosts en remplaçant l'ip par le domaine.

Configurations nécessaires

Spécifier le répertoire de travail

Par défaut, le répertoire synchronisé entre la VM et la machine local est le répertoire `data` situé dans l'arborescence du clone de mon repo vagrant. Le répertoire distant est situé dans `/home/vagrant/data`, sur la VM.
On retrouve cette configuration dans le fichier `Vagrantfile` :
config.vm.synced_folder "data", "/home/vagrant/data", create: true, id: "vagrant-root",
nfs: true

Vous pouvez ainsi changer le répertoire local où se trouve vos projets, en gardant toujours en tête que nfs devra gérer les fichiers entre les 2. Veillez à ne bien mettre que les sources utiles.

Si vous avez un répertoire `public_html` dans votre répertoire personnel où sont stockés tous vos projets et que votre user s'appelle goz, vous pourrez alors modifier la configuration de la sorte sous linux :
config.vm.synced_folder "/home/goz/public_html", "/home/vagrant/data", create: true, id: "vagrant-root",
nfs: true

ou sous osx :
config.vm.synced_folder "/Users/goz/public_html", "/home/vagrant/data", create: true, id: "vagrant-root",
nfs: true

Spécifier les virtualhosts

Pour chacun de vos projets, vous souhaitez avoir des domaines et virtualhosts différents, de manière à ne pas avoir un http://localhost/site1, http://localhost/site2.
Pour cela, modifiez le fichier `provisionning/vars/configuration.yml` et ajoutez une ligne à la configuration de apache_vhost :
####
# Apache
apache_vhost:
- { vhost: 'mysite.me', docroot: 'mysite/www' }
- { vhost: 'mysite2.me', docroot: 'mysite2/www' }

À chaque fois que vous modifiez ce fichier de configuration, vous devez recharger vagrant en le provisionnant pour que les modifications soient prisent en compte.

Pensez bien évidemment à ajouter dans votre fichier /etc/hosts sur votre machine local ce domaine et l'ip du serveur vagrant. Par défaut 33.33.33.20, soit :
33.33.33.20 mysite.me
33.33.33.20 mysite2.me

Spécifier les bases de données

Pour chacun de vos projets, vous souhaitez avoir des bases de données différentes.
Pour cela, modifiez le fichier `provisionning/vars/configuration.yml` et ajoutez une ligne à la configuration de mysql_db:

####
# mysql
mysql_db:
- { name: 'mysite' }
- { name: 'mysite2' }

Configuration générale

Le fichier `provisionning/vars/settings.yml` contient toutes les configurations relatives à votre système. Vous être libre de les modifier si vous le souhaitez.

* php.ini
* apc
* mysql
* apache
* ...

Fichiers templates

Les fichiers présents dans `provisionning/templates` sont tous les fichiers servant de templates pour la création de configuration. Vous êtes également libre de les adapter si vous le souhaitez:

* apache
* mysql
* php
* php-cli
* php-xdebug
* php-xhprof
* ...

Par défaut, xdebug et xhprof sont désactivés. Pour les activer, décommentez l'ensemble des lignes puis re-provisionnez votre vagrant.

Utilisation de vagrant
Commandes utiles
Voici les commandes utiles, en vous plaçant dans le répertoire vagrant que vous venez de cloner de mon repo (ou pas) :
# Lancer vagrant
vagrant up

# Lancer vagrant en provisionnant
vagrant up --provision

# Provisionner un vagrant qui tourne déjà
vagrant provision

# Arrêter un vagrant
vagrant halt

# Recharger un vagrant en le provisionnant
vagrant reload --provision

# Obtenir les commandes disponibles
vagrant help

Outils utiles
Il existe des outils qui peuvent vous aider au quotidien avec Vagrant.

* Vagrant manager pour afficher tous les vagrant qui tournent sur votre machine et les gérer depuis votre barre de tâche sous windows ou osx.
* Virtualbox GUI: n'oubliez pas que vagrant fonctionne sur Virtualbox, si vraiment vous avez besoin, la VM générée par vagrant est disponible également via l'interface de Virtualbox.
* Vagrant est intégré aux IDE tels que PHPStorm.

Problèmes rencontrés
Problèmes de performances
En venant d'une utilisation similaire (partage de fichier entre vm et local) avec vmware, la différence s'est fait cruellement sentir. La ou c'est le premier était transparent et sans douleurs, le second se faisait lourdement sentir, voir frôlait le rage quit.
Au début, j'utilisais la synchronisation de fichier fournit par défaut, à savoir celle de virtualbox. Je suis ensuite passé au nfs avec la modification de quelques configurations, qui ont abouti à ma configuration actuelle qui fonctionne correctement.

Le passage d'un disque dur à un SSD a également grandement contribué à l'amélioration des performances. Si vous n'êtes pas encore équipé, profitez-en, vous ne pourrez pas revenir en arrière !

Pas de swap
Rapidement, mon système ma très courtoisement indiqué qu'il lui manquait du SWAP.

Non je ne veux pas, donne moi du swap !

Qu'à cela ne tienne, la configuration a donc été de nouveau adaptée pour ajouter du swap.