Gérer ses environnements dedéveloppement avec Vagrant             PHP Tour Nantes 2012                                    1
Jean-Marc FontainePassionné de web depuis 1996, de PHP depuis 2000 et demusique depuis 1977  ‣ Responsable de la qualité l...
Quest-ce quun environnement de        développement ?                                   3
Développement   Recette   Production                                       4
Développement   Recette   Production                                       5
Plusieurs approches                      6
Copie sur l’environnement de production ‣ Rapide à mettre en œuvre ‣ Risque important d’impact sur la production ‣ Très ma...
Environnement dédié‣ Serveur spécifique‣ Espace pour chacun des développeurs‣ Configuration centralisée‣ Effets de bords pos...
Machine locale‣ Indépendance totale des autres développeurs‣ Possibilité de travailler sans connexion réseau‣ Difficulté à ...
Les problèmes                10
Comment maintenir (facilement)la parité entre dévelopemment etproduction ?                                   11
Comment lutter contre le syndrome«Pourtant ça marche chez moi» ?                                    12
Comment faire cohabiter sur une mêmemachine des projets très différents ?                                        13
Comment permettre à un nouveaudéveloppeur d’être rapidementopérationnel sur le projet ?                                 14
Comment faire évoluer la configurationdu sytème une fois le développementcommencé ?                                        15
Comment tester sans risque desmontées de versions, de nouveaux outilsou une nouvelle configuration ?                       ...
La virtualisation à la rescousse                                   17
DéfinitionPossibilité d’installer un ou plusieurs systèmesd’exploitation invités sur un système d’exploitationhôte.        ...
Là encore, plusieurs approches                                 19
Là encore, plusieurs approches ‣ Virtualisation complète ‣ Paravirtualisation ‣ Virtualisation matériellement assistée ‣ V...
Avantages de la virtualisation ‣ Possibilité de lancer (presque) n’importe quel système   d’exploitation sur (presque) n’i...
Inconvénients de la virtualisation ‣ La plupart des solutions Open Source nécessitent d’avoir   un hôte Unix ‣ Certaines s...
Peut mieux faireLa virtualisation n’est pas toute la solution            ✓     Lutter contre le syndrome «Pourtant ça marc...
Vagrant          24
Vagrantvagrantup.com ‣ Outil en ligne de commande ‣ Utilise VirtualBox (Pour le moment) ‣ Ecrit en Ruby                   ...
Installation ‣ Paquets disponibles pour la plupart des systèmes   d’exploitation : downloads.vagrantup.com ‣ Via Ruby Gem ...
Créer sa première instance$ vagrant box add precise32 http://files.vagrantup.com/precise32.box$ vagrant init precise32$ va...
Se connecter à l’instance$ vagrant ssh                            28
Aperçu des commandes# Suspendre l’instance$ vagrant suspend# Reprendre l’instance$ vagrant resume# Stopper l’instance$ vag...
Fichier VagrantfileExample simplifiéVagrant::Config.run do |config|  config.vm.box     = "precise32"  config.vm.box_url = "h...
Fichier VagrantfileBox de baseVagrant::Config.run do |config|  …  config.vm.box     = "precise32"       Nom de la box de ba...
Fichier VagrantfileRéseau «hostonly»                                             IP de l’instanceVagrant::Config.run do |co...
Fichier VagrantfileRéseau «bridged»Vagrant::Config.run do |config|  …  config.vm.network :briged  …end                     ...
Fichier VagrantfileRépertoires partagés                             Identifiant   Chemin invité   Chemin hôteVagrant::Config...
Performances des partages NFSExécution de 6 000 tests d’une application Ruby on Rails                                     ...
Fichier VagrantfileParamétrage fin de la VM                              Identifiant de la VM injecté par VagrantVagrant::Con...
Fichier VagrantfileGestion de plusieurs VM                       Première VMVagrant::Config.run do |config|  …  config.vm.d...
Provisionnement                  38
Outils de provisionnementGestion de la configuration des VM‣Créé en 2009                       ‣Créé en 2005‣Syntaxe Ruby  ...
Provisionnement avec PuppetQuelques précisions sur le langage proposé ‣ Langage spécifique (DSL) ‣ Langage déclaratif ‣ Con...
Fichier VagrantfileProvisionnement avec PuppetVagrant::Config.run do |config|  …  config.vm.provision :puppet do |puppet|  ...
Provisionnement avec PuppetExemple d’arborescence                                   Application de démonstration          ...
manifests/application.ppFichier de déclaration de base  # Set default path for Exec callsExec {    path => [ "/bin/", "/sb...
manifests/params.ppFichier de configuration  class params {    # Apache server name    # Make sure this server name points ...
modules/system/manifests/init.pp (1/2)Fichier de déclaration du module «system»  class system {    # Create "puppet" group...
modules/system/manifests/init.pp (2/2)Fichier de déclaration du module «system»      …    # Define message of the day    f...
modules/apache/manifests/init.pp (1/2)Fichier de déclaration du module «apache»  class apache {    package { "apache" :   ...
modules/apache/manifests/init.pp (2/2)Fichier de déclaration du module «apache»      …    Exec["apache.reload"],        re...
modules/apache/templates/vhost.erbGabarit pour le VirtualHost Apache  NameVirtualHost *:<%= scope.lookupvar(params::port) ...
ExemplesUsage de Vagrant avec Puppet ‣ L’ensemble des fichiers d’exemple sont disponibles sur   Github :   https://github.c...
Créer ses propres boxesCe n’est pas parce que je suis paranoïaque qu’ils ne sont pasaprès moi ‣ Veewee (https://github.com...
Plugin vbguest‣ Mise à jour automatique des Addons Invités de  VirtualBox                                                 ...
Plugin hosts ‣ Définition automatique des noms de domaine   dans /etc/hostsconfig.vm.host_name = www.exemple.com           ...
Merci ! ‣ Slides : www.slideshare.net/JMF ‣ Twitter : @jmfontaine ‣ Email : jm@jmfontaine.net ‣ Blog : jmfontaine.net     ...
Crédits photographiquesLes photos et illustrations suivantes ont été utilisées dans cetteprésentation. Merci à leurs auteu...
Upcoming SlideShare
Loading in...5
×

Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012

2,715

Published on

Gérer un environnement de développement efficace est une tâche plus complexe qu'il n'y paraît à première vue. D'une part parce qu'en réalité nous devons souvent en avoir plusieurs, des projets différents nécessitant généralement des configurations différentes, d'autre part parce que nous travaillons rarement seul sur un projet. Il faut donc trouver un moyen de garder une relative synchronisation entre les environnements des différents développeurs tout en évitant de polluer leurs machines avec des composants trop spécifiques ou incompatibles entre eux. Nous verrons comment Vagrant simplifie cette gestion des environnements de développement. Il s'agit d'un outil basé sur VirtualBox qui permet d'utiliser Puppet ou Chef pour gérer les configurations de machines virtuelles.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,715
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
113
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012

  1. 1. Gérer ses environnements dedéveloppement avec Vagrant PHP Tour Nantes 2012 1
  2. 2. Jean-Marc FontainePassionné de web depuis 1996, de PHP depuis 2000 et demusique depuis 1977 ‣ Responsable de la qualité logicielle chez Profilsoft 2
  3. 3. Quest-ce quun environnement de développement ? 3
  4. 4. Développement Recette Production 4
  5. 5. Développement Recette Production 5
  6. 6. Plusieurs approches 6
  7. 7. Copie sur l’environnement de production ‣ Rapide à mettre en œuvre ‣ Risque important d’impact sur la production ‣ Très mauvaise idée ! 7
  8. 8. Environnement dédié‣ Serveur spécifique‣ Espace pour chacun des développeurs‣ Configuration centralisée‣ Effets de bords possibles entre développeurs‣ Obligation d’être connecté au serveur 8
  9. 9. Machine locale‣ Indépendance totale des autres développeurs‣ Possibilité de travailler sans connexion réseau‣ Difficulté à gérer des projets avec des besoins incompatibles‣ Limité à un seul système d’exploitation 9
  10. 10. Les problèmes 10
  11. 11. Comment maintenir (facilement)la parité entre dévelopemment etproduction ? 11
  12. 12. Comment lutter contre le syndrome«Pourtant ça marche chez moi» ? 12
  13. 13. Comment faire cohabiter sur une mêmemachine des projets très différents ? 13
  14. 14. Comment permettre à un nouveaudéveloppeur d’être rapidementopérationnel sur le projet ? 14
  15. 15. Comment faire évoluer la configurationdu sytème une fois le développementcommencé ? 15
  16. 16. Comment tester sans risque desmontées de versions, de nouveaux outilsou une nouvelle configuration ? 16
  17. 17. La virtualisation à la rescousse 17
  18. 18. DéfinitionPossibilité d’installer un ou plusieurs systèmesd’exploitation invités sur un système d’exploitationhôte. 18
  19. 19. Là encore, plusieurs approches 19
  20. 20. Là encore, plusieurs approches ‣ Virtualisation complète ‣ Paravirtualisation ‣ Virtualisation matériellement assistée ‣ Virtualisation logiciellement assistée 20
  21. 21. Avantages de la virtualisation ‣ Possibilité de lancer (presque) n’importe quel système d’exploitation sur (presque) n’importe quelle machine ‣ Possibilité d’installer les mêmes versions qu’en production ‣ Fonctionnement en «bac à sable» ‣ Possibilité de distribuer les images des VM ‣ Possibilité de travailler hors-ligne 21
  22. 22. Inconvénients de la virtualisation ‣ La plupart des solutions Open Source nécessitent d’avoir un hôte Unix ‣ Certaines solutions nécessitent des connaissances avancées 22
  23. 23. Peut mieux faireLa virtualisation n’est pas toute la solution ✓ Lutter contre le syndrome «Pourtant ça marche chez moi» ? ✓ Faire cohabiter sur une même machine des projets très différents ? ✓ Permettre à un nouveau développeur d’être rapidement opérationnel sur le projet ? ✓ Tester sans risque des montées de versions, de nouveaux outils ou une nouvelle configuration ? Maintenir (facilement) la parité entre dévelopemment et ✗ production ? Permettre de faire évoluer la configuration du système une fois ✗ le le développement commencé ? 23
  24. 24. Vagrant 24
  25. 25. Vagrantvagrantup.com ‣ Outil en ligne de commande ‣ Utilise VirtualBox (Pour le moment) ‣ Ecrit en Ruby 25
  26. 26. Installation ‣ Paquets disponibles pour la plupart des systèmes d’exploitation : downloads.vagrantup.com ‣ Via Ruby Gem : gem install vagrant 26
  27. 27. Créer sa première instance$ vagrant box add precise32 http://files.vagrantup.com/precise32.box$ vagrant init precise32$ vagrant up 27
  28. 28. Se connecter à l’instance$ vagrant ssh 28
  29. 29. Aperçu des commandes# Suspendre l’instance$ vagrant suspend# Reprendre l’instance$ vagrant resume# Stopper l’instance$ vagrant halt# Recharger l’instance$ vagrant reload# Détruire l’instance$ vagrant destroy# Connaître l’état de l’instance$ vagrant status 29
  30. 30. Fichier VagrantfileExample simplifiéVagrant::Config.run do |config| config.vm.box = "precise32" config.vm.box_url = "http://files.vagrantup.com/precise32.box" # config.vm.boot_mode = :gui config.vm.network :bridged # config.vm.forward_port 80, 8080 # config.vm.share_folder "v-data", "/vagrant_data", "../data"end 30
  31. 31. Fichier VagrantfileBox de baseVagrant::Config.run do |config| … config.vm.box = "precise32" Nom de la box de base config.vm.box_url = "http://files.vagrantup.com/precise32.box" …end URL de la box de base 31
  32. 32. Fichier VagrantfileRéseau «hostonly» IP de l’instanceVagrant::Config.run do |config| … config.vm.network :hostonly, "192.168.33.10" config.vm.forward_port 80, 8080 …end Port hôte Port invité 32
  33. 33. Fichier VagrantfileRéseau «bridged»Vagrant::Config.run do |config| … config.vm.network :briged …end 33
  34. 34. Fichier VagrantfileRépertoires partagés Identifiant Chemin invité Chemin hôteVagrant::Config.run do |config| … config.vm.share_folder "v-app", "/vagrant_app", "./application" config.vm.share_folder "v-other-app", "/vagrant_other_app", "./other_application", :nfs => true …end Partage NFS 34
  35. 35. Performances des partages NFSExécution de 6 000 tests d’une application Ruby on Rails Durée Système de fichiers hôte 10s Système de fichiers invité 13sRépertoires partagés VirtualBox 5m 14s Répertoire partagé NFS 22s Répertoire partagé NFS 14s (Cache chaud) 35
  36. 36. Fichier VagrantfileParamétrage fin de la VM Identifiant de la VM injecté par VagrantVagrant::Config.run do |config| … config.vm.customize [ "modifyvm", :id, "--memory", 1024 ] config.vm.customize [ "modifyvm", :id, "--cpus", 2 ] config.vm.customize [ "modifyvm", :id, "--chipset", "ich9" ] …end 36
  37. 37. Fichier VagrantfileGestion de plusieurs VM Première VMVagrant::Config.run do |config| … config.vm.define :web do |web_config| web_config.vm.box = "precise32" web_config.vm.network :hostonly, "192.168.33.10" web_config.vm.share_folder "v-app", "/vagrant_app", "./application" Seconde VM end config.vm.define :db do |db_config| db_config.vm.box = "lucid32" db_config.vm.network :hostonly, "192.168.33.11" db_config.vm.customize [ "modifyvm", :id, "--memory", 1024 ] end …end 37
  38. 38. Provisionnement 38
  39. 39. Outils de provisionnementGestion de la configuration des VM‣Créé en 2009 ‣Créé en 2005‣Syntaxe Ruby ‣Syntaxe spécifique‣Versions indépendante et serveur ‣Versions indépendante et serveur 39
  40. 40. Provisionnement avec PuppetQuelques précisions sur le langage proposé ‣ Langage spécifique (DSL) ‣ Langage déclaratif ‣ Concepts de base • Utilisateurs / Groupes / Droits • Commandes • Paquets • Services 40
  41. 41. Fichier VagrantfileProvisionnement avec PuppetVagrant::Config.run do |config| … config.vm.provision :puppet do |puppet| puppet.manifests_path = "puppet/manifests" puppet.manifest_file = "application.pp" puppet.module_path = "puppet/modules" end …end 41
  42. 42. Provisionnement avec PuppetExemple d’arborescence Application de démonstration Configuration de Puppet Fichier de configuration de Vagrant 42
  43. 43. manifests/application.ppFichier de déclaration de base # Set default path for Exec callsExec { path => [ "/bin/", "/sbin/" , "/usr/bin/", "/usr/sbin/" ]}node default { include params include system Inclusion de manifests include apache} 43
  44. 44. manifests/params.ppFichier de configuration class params { # Apache server name # Make sure this server name points to the IP defined in theVagranfile $servername = "www.application.local" # Apache port $port = "80" # Message of the day to be displayed at login $motd = "Welcome to your application development virtualmachine!"} 44
  45. 45. modules/system/manifests/init.pp (1/2)Fichier de déclaration du module «system» class system { # Create "puppet" group group { "puppet": ensure => "present", } # Define default files permissions File { owner => 0, group => 0, mode => 0644 } # Update packages list before doing anything exec { "apt.update" : command => "apt-get update", } Exec["apt.update"]->Package <| |> … 45
  46. 46. modules/system/manifests/init.pp (2/2)Fichier de déclaration du module «system» … # Define message of the day file { "motd" : path => "/etc/motd.tail", ensure => present, content => $motd } # Install some useful packages package { [ "htop" ] : ensure => present, }} 46
  47. 47. modules/apache/manifests/init.pp (1/2)Fichier de déclaration du module «apache» class apache { package { "apache" : ensure => "present", name => "apache2", } file { "apache.vhost" : path => "/etc/apache2/sites-available/default", ensure => present, content => template("apache/vhost.erb"), owner => "root", group => "root", notify => Exec["apache.reload"], require => Package["apache"] } … 47
  48. 48. modules/apache/manifests/init.pp (2/2)Fichier de déclaration du module «apache» … Exec["apache.reload"], require => Package["apache"] } service { "apache" : ensure => "running", name => "apache2", enable => true, require => Package["apache"], } exec { "apache.reload" : command => "service apache2 reload", refreshonly => true, }} 48
  49. 49. modules/apache/templates/vhost.erbGabarit pour le VirtualHost Apache NameVirtualHost *:<%= scope.lookupvar(params::port) %><VirtualHost *:<%= scope.lookupvar(params::port) %>> ServerName <%= scope.lookupvar(params::servername) %> ## Apache AddDefaultCharset UTF-8 DocumentRoot "/vagrant_app/" <Directory "/vagrant_app/"> Injection de paramètres ## Apache Options -Indexes AllowOverride None Order allow,deny Allow from all </Directory></VirtualHost> 49
  50. 50. ExemplesUsage de Vagrant avec Puppet ‣ L’ensemble des fichiers d’exemple sont disponibles sur Github : https://github.com/jmfontaine/vagrant-talk 50
  51. 51. Créer ses propres boxesCe n’est pas parce que je suis paranoïaque qu’ils ne sont pasaprès moi ‣ Veewee (https://github.com/jedi4ever/veewee/) ‣ Recettes de création d’une box ‣ Possibilité de modifier la recette ‣ Nombreuses recettes disponibles • Linux (Debian, Fedora, CentOS, ArchLinux, OpenSUSE) • BSD (FreeBSD) • Windows (Windows 2008, Windows 7, Windows 8) 51
  52. 52. Plugin vbguest‣ Mise à jour automatique des Addons Invités de VirtualBox 52
  53. 53. Plugin hosts ‣ Définition automatique des noms de domaine dans /etc/hostsconfig.vm.host_name = www.exemple.com 53
  54. 54. Merci ! ‣ Slides : www.slideshare.net/JMF ‣ Twitter : @jmfontaine ‣ Email : jm@jmfontaine.net ‣ Blog : jmfontaine.net 54
  55. 55. Crédits photographiquesLes photos et illustrations suivantes ont été utilisées dans cetteprésentation. Merci à leurs auteurs ! ‣ https://secure.flickr.com/photos/wiccked/69537422/ ‣ https://secure.flickr.com/photos/r000pert/136999467 ‣ https://secure.flickr.com/photos/knolleary/6212065238 ‣ https://secure.flickr.com/photos/kevinomara/4665065738/ ‣ Logo de Vagrant tiré du site officiel : http://vagrantup.com/ 55
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×