Comment installer Symfony sur son ordinateur ? Comment installer un environnement de développement facilement pour Symfony ? Quel est le meilleur environnement ?
Pour utiliser Symfony en local, il faut un serveur web (Apache ou Nginx), une base de donnée (MySQL, MariaDB, PostgreSQL ou MongoDB), PHP 7 et toutes les extensions.
Il y a toujours Wamp, Mamp et autres, mais c'est buggé, et vraiment pas pratique. En plus cette méthode est ancienne (ouai je sais, ça fout un coup de vieux 😉).
Il y a aussi la VM Linux, mais c'est très gourmand, c'est lent et ça prend du temps à installer.
Et si vous êtes comme moi, installer tous les packages en local ça m'embêtes...
Voilà j'ai laché l'idée...
Pour ceux qui connaissent, vous pouvez passer à la partie d'après.
Sinon, je vais vous présenter tous ces outils.
Ces deux outils sont disponible sur Linux, MacOs et Windows.
Si la VM est une bière, alors Vagrant est son verre. 🍺
Vagrant est un wrapper, une couche supérieur à VirtualBox ou VMWare.
Il va permettre de créer, et gérer des VMs.
Elle seront plus légères et facilement configurables.
Un Vagrant File permet de définir les configurations et de les échanger facilement avec un autre développeur.
Cet environnement préconfiguré s'appelle une Vagrant Box.
Vagrant c'est à mi chemin entre une VM et Docker.
Personnellement j'ai pas mal devéloppé dessus. C'est plus rapide et moins gourmand qu'une vrai VM.
Laravel Homestead est une surcouche Vagrant et une Vagrant Box préconfiguré contenant tout un tas d'outils.
C'est la boîte à outils parfaite (ou presque 😉).
Cette Box contient entre autre Ubuntu, plusieurs versions de PHP (avec Xdebug et compagnie), Nginx, MySQL, PostgreSQL, Composer, MailHog, Node (avec Yarn, Bower, Grunt et Gulp), Redis, ngrok, ...
Tout ce qu'il faut pour bien développer !
L'installation n'est pas bien complexe, mais un peu longue.
Je vais vous montrer la version avec VirtualBox.
Libre à vous de faire différement si besoin.
Trois outils de base ont besoin d'être installé :
Vérifiez que tout est bien installé :
$ vboxmanage --version
$ vagrant --version
$ git --version
Ensuite il faut télécharger la box Laravel/Homestead pour Virtualbox :
$ vagrant box add laravel/homestead
Ça prend du temps, c'est assez lourd. Elle prend plus de 2Go quand même.
Puis on récupère la configuration Vagrant pour Laravel/Homestead :
$ git clone https://github.com/laravel/homestead.git ~/development
Vous pouvez remplacez le répertoire final par ce que vous voulez.
La version sur le master
n'est pas toujours stable, alors jetez un coup d'oeil sur la liste des releases pour récupérer la version qui vous convient :
$ git checkout v8.2.0
Et vous pouvez lancer le fichier init.sh
ou init.bat
sur Windows pour générer le fichier de configuration Homestead.yaml
$ bash init.sh
Le fichier Homestead.yaml
permet de configurer rapidement la box.
C'est une surcouche au fichier Vagrantfile.
Il faut que vous le modifiez en fonction de vos besoin.
Une fois modifié, vous pourrez lancer un vagrant up
pour lancer la box.
Voici le fichier par défaut :
---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
- map: ~/code
to: /home/vagrant/code
sites:
- map: homestead.test
to: /home/vagrant/code/public
databases:
- homestead
# ports:
# - send: 50000
# to: 5000
# - send: 7777
# to: 777
# protocol: udp
# blackfire:
# - id: foo
# token: bar
# client-id: foo
# client-token: bar
# zray:
# If you've already freely registered Z-Ray, you can place the token here.
# - email: foo@bar.com
# token: foo
# Don't forget to ensure that you have 'zray: "true"' for your site.
C'est facilement compréhensible je trouve.
ip
définit l'IP de la VMmemory
et cpus
allouent les ressources nécessaires (RAM et CPU)provider
c'est le gestionnaire de VM (virtualbox
, vmware_fusion
, vmware_workstation
, parallels
ou hyperv
)authorize
et keys
correspondent au chemin pour la clé publique et la clé privée pour accèder à la VM en SSHfolders
pour le mapping des répertoires. Il est fortement recommandé de mapper un répertoire par projet plutôt qu'un répertoire pour tous les projetssites
permet de créer un fichier de configuration NginXdatabases
définit le nom de la base de donnéeports
pour modifier le mapping des ports. Si on veut que le port 80 soit redirigé vers 8080 par exempleblackfire
spécifie la configuration pour BlackFirezray
pareil pour Z-RayÀ ces Propriétés de bases, il y en a d'autres plus ou moins utiles :
verify_host_key
effectue une vérification stricte de la clé SSH de l'hôtenetworks
configure l'interface réseau de la boxdefault_ssh_port
pour changer le port par défaut pour SSHcopy
copie fichiers et répertoires de l'hôte from
vers la box to
variables
définie des variables d'environnement (ex: APP_ENV
)couchdb
déclenche l'installation de CouchDBelasticsearch
avec un numéro de version, installe d'Elasticsearchmariadb
déclenche l'installation de MariaDBminio
installe Miniomongodb
déclenche l'installation de MongoDBmysql8
installe MySQL 8neo4j
déclenche l'installation de Neo4jinfluxdb
installe InfluxDB et Grafanachronograf
déclenche l'installation de Chronografbackup
créer automatiquement un backup lors de la commande vagrant destroy
La propriété folders
accepte une clé type
pour spécifier le protocole de partage de fichier en réseau à utiliser nfs
ou smb
.
Si vous êtes sur Mac ou Windows, je vous conseille fortement NFS pour des soucis de performances (voir section Astuces).
La propriété sites
accepte une clé type
également.
Elle oriente la configuration Nginx pour le type de site et sa structure propre.
Symfony 2 et Symfony 4 n'ont pas du tout la même structure ni le même fichier d'entré pour le rewrite URL.
Les types disponibles sont : apache
, apigility
, expressive
, laravel
(par défaut), proxy
, silverstripe
, statamic
, symfony2
, symfony4
, et zf
.
On peut également ajouter la clé load_balancer
à true si on veut activer le load balancing avec Nginx. Le port d'écoute HTTP sera 8111 et 8112 pour le HTTPS.
Les commandes de bases sont intuitives :
$ vagrant help # permet d'afficher l'aide
$ vagrant up # lance la box
$ vagrant up --provision # lance la box en rechargeant le fichier Homestead.yaml
$ vagrant reload --provision # relance la box en rechargeant le fichier Homestead.yaml
$ vagrant halt # arrête la box
$ vagrant destroy # arrête et supprime tout trace de la machine vagrant
$ vagrant status # affiche le status de la box
$ vagrant plugin # permet d'installer, supprimer et mettre à jour des plugins vagrant
$ vagrant ssh # connexion à la box en SSH
$ vagrant suspend # suspend la box
$ vagrant resume # reprend la box après un `vagrant suspend`
Avantages :
after.sh
qui permet de lancer un script sur la box une fois qu'elle est lancé (composer install
, cache clear, insertion d'un dump, etc...), le réseau, etc...Inconvénients :
Notez qu'il est toujours possible de s'abstraire de Laravel/Homestead et de créer son propre Vagrantfile pour résoudre plusieurs des inconvénients. Et on peut largement s'inspirer de Laravel/Homestead pour faire ça bien !
Ces astuces m'ont été très utiles, alors je les partages avec vous :
Si on veut créer une deuxième box, il faudra changer le nom !
Pour ça, il faut modifier le fichier Homestead.yaml
et ajouter la ligne suivante :
name: monNouveauNom
Si comme moi vous utilisez VirtualBox, vous pouvez installer le plugin VirtualBox Guest Additions
.
Il s'agit d'un ensemble de drivers et d'applications système conçus améliorer l'intégration le système hôte et invité.
Pour ceux qui n'ont rien compris, sachez juste que c'est mieux de l'installer 😉 :
$ vagrant plugin install vagrant-vbguest
$ vagrant provision
Si vous êtes sur Mac ou Windows, je vous conseille fortement d'installer NFS pour tous vos dossiers dans folders
.
Pour les utilisateurs Windows : Vous pouvez installer le plugin Vagrant WinNFSd qui ajoute le support NFS à windows (je ne l'ai pas testé)
Pour les utilisateurs d'Ubuntu : Apparement vous devez installer le support NFS (je ne l'ai pas testé non plus) $ apt-get install nfs-kernel-server
Et pour les utilisateurs de Mac, il suffit d'installer vagrant-bindfs :
$ vagrant plugin install vagrant-bindfs
N'oubliez pas d'ajouter le type dans le fichier de configuration Homestead.yaml
:
folders:
- map: ~/www/monProjet
to: /home/vagrant/www/monProjet
type: "nfs"
L'option watch
de webpack ne va pas fonctionner sur la box. C'est un soucis connu.
Pour corriger ça, il faut activer l'option de polling dans la configuration de Webpack :
module.exports = {
//...
watchOptions: {
poll: true
}
};
Pour les utilisateurs de Symfony Webpack Encore, il suffit de remplacer la dernière ligne du fichier webpack.config.js
:
// Remplacer cette ligne
module.exports = Encore.getWebpackConfig();
// Par celles-ci
let config = Encore.getWebpackConfig();
config.watchOptions = { poll: true, ignored: /node_modules/ };
module.exports = config;
Voici un exemple de fichier Homestead.yaml
pour un projet Symfony 4 :
---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
- map: ~/www/monProjet
to: /home/vagrant/www/monProjet
type: "nfs"
sites:
- map: monProjet.local
to: /home/vagrant/www/monProjet/public
type: symfony4
databases:
- symfony
Vagrant est vraiment pratique pour le développement avec ou sans Symfony.
Mais il a tout de même quelques inconvénients.
Utilisez-vous Vagrant pour le développement ? Quelles sont vos astuces ?
N'hésitez-pas à commenter et partager cette article 😉.
Documentation Vagrant
Documentation Laravel/Homestead
NFS sur Ubuntu
Fichier principal de Laraval/Homestead qui permet de mieux comprendre
Image : Entête