Gérer ses environnements dedéveloppement avec Vagrant                   RMLL 2012                               1
Jean-Marc FontainePassionné de web depuis 1996, de PHP depuis 2000 et demusique depuis 1977  ‣ Consultant PHP chez Alter W...
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 le développementcommencé ?                                     ...
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
Virtualisation complèteEmulation quasi-complète du matériel ‣ Pas de modification du système d’exploitation invité ‣ Outils...
ParavirtualisationPas d’émulation du matériel ‣ Nécessite des modifications du système d’exploitation   invité ‣ Outils   •...
Virtualisation matériellement assistéeUsage des fonctionnalités spécialisées des CPU ‣ CPU de type Intel VT-x et AMD-V ‣ P...
Virtualisation logiciellement assistéeUsage des fonctionnalités spécialisées de l’OS hôte ‣ Implémentation au niveau du sy...
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          27
Vagrantvagrantup.com ‣ Outil en ligne de commande ‣ Utilise VirtualBox ‣ Ecrit en Ruby                                28
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                            31
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::...
Fichier VagrantfileGestion de plusieurs VM                       Première VMVagrant::Config.run do |config|  …  config.vm.d...
Provisionnement                  41
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) ...
Démo       53
DémonstrationUsage de Vagrant avec Puppet ‣ L’ensemble des fichiers de la démonstration sont   disponibles sur Github :   h...
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...
Merci ! ‣ Slides : http://www.slideshare.net/JMF ‣ Blog : http://www.industrialisation-php.com/ ‣ Twitter : @jmfontaine / ...
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 - RMLL 2012

4,506

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
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,506
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
57
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Gérer ses environnements de développement avec Vagrant - RMLL 2012

  1. 1. Gérer ses environnements dedéveloppement avec Vagrant RMLL 2012 1
  2. 2. Jean-Marc FontainePassionné de web depuis 1996, de PHP depuis 2000 et demusique depuis 1977 ‣ Consultant PHP chez Alter Way ‣ Ex-Président de l’AFUP ‣ Co-Auteur du livre blanc «Industrialisation PHP» ‣ Auteur du blog industrialisation-php.com 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 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. Virtualisation complèteEmulation quasi-complète du matériel ‣ Pas de modification du système d’exploitation invité ‣ Outils • VirtualBox • VMWare 20
  21. 21. ParavirtualisationPas d’émulation du matériel ‣ Nécessite des modifications du système d’exploitation invité ‣ Outils • Xen 21
  22. 22. Virtualisation matériellement assistéeUsage des fonctionnalités spécialisées des CPU ‣ CPU de type Intel VT-x et AMD-V ‣ Pas de modification du système d’exploitation invité ‣ Outils • KVM • VirtualBox • VMWare • Xen 22
  23. 23. Virtualisation logiciellement assistéeUsage des fonctionnalités spécialisées de l’OS hôte ‣ Implémentation au niveau du système d’exploitation hôte ‣ Le système d’exploitation invité partage le kernel de l’hôte ‣ Pas de modification du système d’exploitation invité ‣ Outils • OpenVZ • LXC 23
  24. 24. 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 24
  25. 25. 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 25
  26. 26. 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é ? 26
  27. 27. Vagrant 27
  28. 28. Vagrantvagrantup.com ‣ Outil en ligne de commande ‣ Utilise VirtualBox ‣ Ecrit en Ruby 28
  29. 29. Installation ‣ Paquets disponibles pour la plupart des systèmes d’exploitation : downloads.vagrantup.com ‣ Via Ruby Gem : gem install vagrant 29
  30. 30. Créer sa première instance$ vagrant box add precise32 http://files.vagrantup.com/precise32.box$ vagrant init precise32$ vagrant up 30
  31. 31. Se connecter à l’instance$ vagrant ssh 31
  32. 32. 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 32
  33. 33. 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 33
  34. 34. 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 34
  35. 35. 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é 35
  36. 36. Fichier VagrantfileRéseau «bridged»Vagrant::Config.run do |config| … config.vm.network :briged …end 36
  37. 37. 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 37
  38. 38. 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) 38
  39. 39. Fichier VagrantfileParamétrage fin de la VM Identifiant de la VM injecté par VagrantVagrant::Config.run do |config| … db_config.vm.customize [ "modifyvm", :id, "--memory", 1024 ] db_config.vm.customize [ "modifyvm", :id, "--cpus", 2 ] db_config.vm.customize [ "modifyvm", :id, "--chipset", "ich9" ] …end 39
  40. 40. 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 40
  41. 41. Provisionnement 41
  42. 42. 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 42
  43. 43. 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 43
  44. 44. 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 44
  45. 45. Provisionnement avec PuppetExemple d’arborescence Application de démonstration Configuration de Puppet Fichier de configuration de Vagrant 45
  46. 46. 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} 46
  47. 47. 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!"} 47
  48. 48. 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 <| |> … 48
  49. 49. 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, }} 49
  50. 50. 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"] } … 50
  51. 51. 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, }} 51
  52. 52. 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> 52
  53. 53. Démo 53
  54. 54. DémonstrationUsage de Vagrant avec Puppet ‣ L’ensemble des fichiers de la démonstration sont disponibles sur Github : https://github.com/jmfontaine/vagrant-talk 54
  55. 55. 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) 55
  56. 56. Merci ! ‣ Slides : http://www.slideshare.net/JMF ‣ Blog : http://www.industrialisation-php.com/ ‣ Twitter : @jmfontaine / @indusphp ‣ Email : jean-marc.fontaine@alterway.fr 56
  57. 57. 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/ ‣ Photo de Jérôme Bonaldi d’origine inconnue 57
  1. A particular slide catching your eye?

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

×