SlideShare une entreprise Scribd logo
1  sur  55
Télécharger pour lire hors ligne
Gérer ses environnements de
développement avec Vagrant
             PHP Tour Nantes 2012




                                    1
Jean-Marc Fontaine
Passionné de web depuis 1996, de PHP depuis 2000 et de
musique depuis 1977



  ‣ Responsable de la qualité logicielle chez Profilsoft




                                                          2
Qu'est-ce qu'un 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 mauvaise idée !



                                                 7
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
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
Les problèmes
                10
Comment maintenir (facilement)
la parité entre dévelopemment et
production ?




                                   11
Comment lutter contre le syndrome
«Pourtant ça marche chez moi» ?




                                    12
Comment faire cohabiter sur une même
machine des projets très différents ?




                                        13
Comment permettre à un nouveau
développeur d’être rapidement
opérationnel sur le projet ?




                                 14
Comment faire évoluer la configuration
du sytème une fois le développement
commencé ?




                                        15
Comment tester sans risque des
montées de versions, de nouveaux outils
ou une nouvelle configuration ?




                                          16
La virtualisation à la rescousse
                                   17
Définition
Possibilité d’installer un ou plusieurs systèmes
d’exploitation invités sur un système d’exploitation
hôte.




                                                       18
Là encore, plusieurs approches




                                 19
Là encore, plusieurs approches




 ‣ Virtualisation complète
 ‣ Paravirtualisation
 ‣ Virtualisation matériellement assistée
 ‣ Virtualisation logiciellement assistée


                                            20
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
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
Peut mieux faire
La 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
Vagrant
          24
Vagrant
vagrantup.com




 ‣ Outil en ligne de commande
 ‣ Utilise VirtualBox (Pour le moment)
 ‣ Ecrit en Ruby



                                         25
Installation




 ‣ Paquets disponibles pour la plupart des systèmes
   d’exploitation : downloads.vagrantup.com
 ‣ Via Ruby Gem : gem install vagrant




                                                      26
Créer sa première instance

$ vagrant box add precise32 http://files.vagrantup.com/precise32.box
$ vagrant init precise32
$ vagrant up




                                                                       27
Se connecter à l’instance

$ vagrant ssh




                            28
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
Fichier Vagrantfile
Example 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
Fichier Vagrantfile
Box de base

Vagrant::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
Fichier Vagrantfile
Réseau «hostonly»
                                             IP de l’instance

Vagrant::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
Fichier Vagrantfile
Réseau «bridged»

Vagrant::Config.run do |config|
  …
  config.vm.network :briged
  …
end




                                  33
Fichier Vagrantfile
Répertoires partagés
                             Identifiant   Chemin invité   Chemin hôte


Vagrant::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
Performances des partages NFS
Exé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é                   13s

Répertoires partagés VirtualBox             5m 14s

    Répertoire partagé NFS                    22s

    Répertoire partagé NFS
                                              14s
       (Cache chaud)                                       35
Fichier Vagrantfile
Paramétrage fin de la VM
                              Identifiant de la VM injecté par Vagrant

Vagrant::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
Fichier Vagrantfile
Gestion de plusieurs VM
                       Première VM

Vagrant::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
Provisionnement
                  38
Outils de provisionnement
Gestion 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
Provisionnement avec Puppet
Quelques précisions sur le langage proposé



 ‣ Langage spécifique (DSL)
 ‣ Langage déclaratif
 ‣ Concepts de base
   •   Utilisateurs / Groupes / Droits
   •   Commandes
   •   Paquets
   •   Services
                                             40
Fichier Vagrantfile
Provisionnement avec Puppet

Vagrant::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
Provisionnement avec Puppet
Exemple d’arborescence

                                   Application de démonstration




                                   Configuration de Puppet




                     Fichier de configuration de Vagrant
                                                                  42
manifests/application.pp
Fichier de déclaration de base

  # Set default path for Exec calls
Exec {
    path => [ "/bin/", "/sbin/" , "/usr/bin/", "/usr/sbin/" ]
}

node default {
    include params
    include system            Inclusion de manifests
    include apache
}




                                                                43
manifests/params.pp
Fichier de configuration

  class params {
    # Apache server name
    # Make sure this server name points to the IP defined in the
Vagranfile
    $servername = "www.application.local"

   # Apache port
   $port = "80"

    # Message of the day to be displayed at login
    $motd = "Welcome to your application development virtual
machine!"
}




                                                                   44
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
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
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
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
modules/apache/templates/vhost.erb
Gabarit 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
Exemples
Usage de Vagrant avec Puppet




 ‣ L’ensemble des fichiers d’exemple sont disponibles sur
   Github :
   https://github.com/jmfontaine/vagrant-talk




                                                           50
Créer ses propres boxes
Ce n’est pas parce que je suis paranoïaque qu’ils ne sont pas
aprè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
Plugin vbguest


‣ Mise à jour automatique des Addons Invités de
  VirtualBox




                                                  52
Plugin hosts

 ‣ Définition automatique des noms de domaine
   dans /etc/hosts

config.vm.host_name = 'www.exemple.com'




                                               53
Merci !




 ‣ Slides : www.slideshare.net/JMF
 ‣ Twitter : @jmfontaine
 ‣ Email : jm@jmfontaine.net
 ‣ Blog : jmfontaine.net



                                     54
Crédits photographiques
Les photos et illustrations suivantes ont été utilisées dans cette
pré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

Contenu connexe

Tendances

Déploiements avec Docker
Déploiements avec DockerDéploiements avec Docker
Déploiements avec DockerLuis Lopez
 
CasperJs, votre nouveau meilleur ami
CasperJs, votre nouveau meilleur amiCasperJs, votre nouveau meilleur ami
CasperJs, votre nouveau meilleur amiMickaël Andrieu
 
Julien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printempsJulien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printempsWeb à Québec
 
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Fabien Arcellier
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Jérôme Petazzoni
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinLudovic Piot
 
Docker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à DockerDocker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à DockerThibaut Marmin
 
Introduction à Docker et Gaudi
Introduction à Docker et GaudiIntroduction à Docker et Gaudi
Introduction à Docker et GaudiEmmanuel Quentin
 
Installation et configuration d'openbravo
Installation et configuration d'openbravoInstallation et configuration d'openbravo
Installation et configuration d'openbravoSoumia Brabije
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?Membré Guillaume
 
Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]
Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]
Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]Silicon Comté
 
NightClazz Docker Découverte
NightClazz Docker Découverte NightClazz Docker Découverte
NightClazz Docker Découverte Zenika
 
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
Docker nice meetup #1   construire, déployer et exécuter vos applications, ...Docker nice meetup #1   construire, déployer et exécuter vos applications, ...
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...adri1s
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache MavenArnaud Héritier
 
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...Silicon Comté
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et DockerStephane Manciot
 
A la découverte de docker
A la découverte de dockerA la découverte de docker
A la découverte de dockerjean pasqualini
 
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec DockerSupport formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec DockerSmartnSkilled
 

Tendances (20)

Déploiements avec Docker
Déploiements avec DockerDéploiements avec Docker
Déploiements avec Docker
 
CasperJs, votre nouveau meilleur ami
CasperJs, votre nouveau meilleur amiCasperJs, votre nouveau meilleur ami
CasperJs, votre nouveau meilleur ami
 
Julien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printempsJulien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printemps
 
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Docker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à DockerDocker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à Docker
 
Introduction à Docker et Gaudi
Introduction à Docker et GaudiIntroduction à Docker et Gaudi
Introduction à Docker et Gaudi
 
Installation et configuration d'openbravo
Installation et configuration d'openbravoInstallation et configuration d'openbravo
Installation et configuration d'openbravo
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
 
Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]
Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]
Docker ! De la découverte à la mise en production / Digital apéro [19/03/2015]
 
NightClazz Docker Découverte
NightClazz Docker Découverte NightClazz Docker Découverte
NightClazz Docker Découverte
 
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
Docker nice meetup #1   construire, déployer et exécuter vos applications, ...Docker nice meetup #1   construire, déployer et exécuter vos applications, ...
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
 
Meetup Systemd vs sysvinit
Meetup Systemd vs sysvinitMeetup Systemd vs sysvinit
Meetup Systemd vs sysvinit
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
 
Docker - YaJUG
Docker  - YaJUGDocker  - YaJUG
Docker - YaJUG
 
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et Docker
 
A la découverte de docker
A la découverte de dockerA la découverte de docker
A la découverte de docker
 
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec DockerSupport formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
 

En vedette

Hands on para (web)Developers Docker vs Vagrant
Hands on para (web)Developers Docker vs VagrantHands on para (web)Developers Docker vs Vagrant
Hands on para (web)Developers Docker vs VagrantIngo Jauch
 
D-DAY 2015 Paas ORACLE
D-DAY 2015 Paas ORACLED-DAY 2015 Paas ORACLE
D-DAY 2015 Paas ORACLEDEVOPS D-DAY
 
Introduction à DevOps
Introduction à DevOpsIntroduction à DevOps
Introduction à DevOpsMicrosoft
 
Agile Wake Up #3 : Lean UX
Agile Wake Up #3 : Lean UXAgile Wake Up #3 : Lean UX
Agile Wake Up #3 : Lean UXZenika
 
Introduction à la démarche Devops
Introduction à la démarche DevopsIntroduction à la démarche Devops
Introduction à la démarche DevopsRomain Chalumeau
 

En vedette (7)

Hands on para (web)Developers Docker vs Vagrant
Hands on para (web)Developers Docker vs VagrantHands on para (web)Developers Docker vs Vagrant
Hands on para (web)Developers Docker vs Vagrant
 
D-DAY 2015 Paas ORACLE
D-DAY 2015 Paas ORACLED-DAY 2015 Paas ORACLE
D-DAY 2015 Paas ORACLE
 
Introduction à DevOps
Introduction à DevOpsIntroduction à DevOps
Introduction à DevOps
 
DevOps
DevOpsDevOps
DevOps
 
DevOps 101
DevOps 101DevOps 101
DevOps 101
 
Agile Wake Up #3 : Lean UX
Agile Wake Up #3 : Lean UXAgile Wake Up #3 : Lean UX
Agile Wake Up #3 : Lean UX
 
Introduction à la démarche Devops
Introduction à la démarche DevopsIntroduction à la démarche Devops
Introduction à la démarche Devops
 

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

Gérer ses environnements de développement avec Vagrant - RMLL 2012
Gérer ses environnements de développement avec Vagrant - RMLL 2012Gérer ses environnements de développement avec Vagrant - RMLL 2012
Gérer ses environnements de développement avec Vagrant - RMLL 2012Jean-Marc Fontaine
 
Virtualisation par logiciels libres
Virtualisation par logiciels libresVirtualisation par logiciels libres
Virtualisation par logiciels libresguest3be047
 
Déploiement et débogage à distance
Déploiement et débogage à distanceDéploiement et débogage à distance
Déploiement et débogage à distancepprem
 
Docker - un outil pour faciliter le développement et le déploiement informatique
Docker - un outil pour faciliter le développement et le déploiement informatiqueDocker - un outil pour faciliter le développement et le déploiement informatique
Docker - un outil pour faciliter le développement et le déploiement informatiquesdenier
 
cours-supcom-virt.pptx
cours-supcom-virt.pptxcours-supcom-virt.pptx
cours-supcom-virt.pptxManellansari
 
HOWTO Gestion porte-feuilles crypto-monnaies en environnement virtualisé
HOWTO Gestion porte-feuilles crypto-monnaies en environnement virtualiséHOWTO Gestion porte-feuilles crypto-monnaies en environnement virtualisé
HOWTO Gestion porte-feuilles crypto-monnaies en environnement virtualiséAnthony Le Goff
 
Gestion des dépendances dans un projet PHP - RMLL 2012
Gestion des dépendances dans un projet PHP - RMLL 2012Gestion des dépendances dans un projet PHP - RMLL 2012
Gestion des dépendances dans un projet PHP - RMLL 2012Jean-Marc Fontaine
 
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...AbdellahELMAMOUN
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsHugo Hamon
 
alphorm.com - Formation proxmoxVE 3
alphorm.com - Formation proxmoxVE 3alphorm.com - Formation proxmoxVE 3
alphorm.com - Formation proxmoxVE 3Alphorm
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+ekino
 
Sec day cuckoo_workshop
Sec day cuckoo_workshopSec day cuckoo_workshop
Sec day cuckoo_workshopThomas Roccia
 
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging Anne Nicolas
 
Soirée du Test Logiciel - Mise en place d’une plateforme de test automatisé a...
Soirée du Test Logiciel - Mise en place d’une plateforme de test automatisé a...Soirée du Test Logiciel - Mise en place d’une plateforme de test automatisé a...
Soirée du Test Logiciel - Mise en place d’une plateforme de test automatisé a...TelecomValley
 
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdfJFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdfqsdqsd4
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsJulien Wittouck
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesChristophe Furmaniak
 
DevMobCA: Continuous integration
DevMobCA: Continuous integrationDevMobCA: Continuous integration
DevMobCA: Continuous integrationOlivier Destrebecq
 

Similaire à Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012 (20)

Gérer ses environnements de développement avec Vagrant - RMLL 2012
Gérer ses environnements de développement avec Vagrant - RMLL 2012Gérer ses environnements de développement avec Vagrant - RMLL 2012
Gérer ses environnements de développement avec Vagrant - RMLL 2012
 
Virtualisation par logiciels libres
Virtualisation par logiciels libresVirtualisation par logiciels libres
Virtualisation par logiciels libres
 
Déploiement et débogage à distance
Déploiement et débogage à distanceDéploiement et débogage à distance
Déploiement et débogage à distance
 
Docker - un outil pour faciliter le développement et le déploiement informatique
Docker - un outil pour faciliter le développement et le déploiement informatiqueDocker - un outil pour faciliter le développement et le déploiement informatique
Docker - un outil pour faciliter le développement et le déploiement informatique
 
What is Docker
What is Docker What is Docker
What is Docker
 
cours-supcom-virt.pptx
cours-supcom-virt.pptxcours-supcom-virt.pptx
cours-supcom-virt.pptx
 
HOWTO Gestion porte-feuilles crypto-monnaies en environnement virtualisé
HOWTO Gestion porte-feuilles crypto-monnaies en environnement virtualiséHOWTO Gestion porte-feuilles crypto-monnaies en environnement virtualisé
HOWTO Gestion porte-feuilles crypto-monnaies en environnement virtualisé
 
Gestion des dépendances dans un projet PHP - RMLL 2012
Gestion des dépendances dans un projet PHP - RMLL 2012Gestion des dépendances dans un projet PHP - RMLL 2012
Gestion des dépendances dans un projet PHP - RMLL 2012
 
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec Jenkins
 
alphorm.com - Formation proxmoxVE 3
alphorm.com - Formation proxmoxVE 3alphorm.com - Formation proxmoxVE 3
alphorm.com - Formation proxmoxVE 3
 
A Libre Ouvert : Virtual box
A Libre Ouvert : Virtual boxA Libre Ouvert : Virtual box
A Libre Ouvert : Virtual box
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+
 
Sec day cuckoo_workshop
Sec day cuckoo_workshopSec day cuckoo_workshop
Sec day cuckoo_workshop
 
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
Open Recipes - hubs : du packaging en solo à l'industrialisation du packaging
 
Soirée du Test Logiciel - Mise en place d’une plateforme de test automatisé a...
Soirée du Test Logiciel - Mise en place d’une plateforme de test automatisé a...Soirée du Test Logiciel - Mise en place d’une plateforme de test automatisé a...
Soirée du Test Logiciel - Mise en place d’une plateforme de test automatisé a...
 
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdfJFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantes
 
DevMobCA: Continuous integration
DevMobCA: Continuous integrationDevMobCA: Continuous integration
DevMobCA: Continuous integration
 

Plus de Jean-Marc Fontaine

Revue de code - PHP Tour Nantes 2012
Revue de code - PHP Tour Nantes 2012Revue de code - PHP Tour Nantes 2012
Revue de code - PHP Tour Nantes 2012Jean-Marc Fontaine
 
La qualité au delà du code - Forum PHP 2012
La qualité au delà du code - Forum PHP 2012La qualité au delà du code - Forum PHP 2012
La qualité au delà du code - Forum PHP 2012Jean-Marc Fontaine
 
Reprise sur incident - ConFoo 2012
Reprise sur incident - ConFoo 2012Reprise sur incident - ConFoo 2012
Reprise sur incident - ConFoo 2012Jean-Marc Fontaine
 
La qualité au-delà du code - ConFoo 2012
La qualité au-delà du code - ConFoo 2012La qualité au-delà du code - ConFoo 2012
La qualité au-delà du code - ConFoo 2012Jean-Marc Fontaine
 
Industrialiser PHP - Open World Forum 2011
Industrialiser PHP - Open World Forum 2011Industrialiser PHP - Open World Forum 2011
Industrialiser PHP - Open World Forum 2011Jean-Marc Fontaine
 
Reprise sur incident - RMLL 2011
Reprise sur incident - RMLL 2011Reprise sur incident - RMLL 2011
Reprise sur incident - RMLL 2011Jean-Marc Fontaine
 
Organiser efficacement son dépôt de code - RMLL 2011
Organiser efficacement son dépôt de code - RMLL 2011Organiser efficacement son dépôt de code - RMLL 2011
Organiser efficacement son dépôt de code - RMLL 2011Jean-Marc Fontaine
 
Maintenir du code historique - RMLL 2011
Maintenir du code historique - RMLL 2011Maintenir du code historique - RMLL 2011
Maintenir du code historique - RMLL 2011Jean-Marc Fontaine
 
Comment monter son business grâce à l'Open Source ?
Comment monter son business grâce à l'Open Source ?Comment monter son business grâce à l'Open Source ?
Comment monter son business grâce à l'Open Source ?Jean-Marc Fontaine
 
Industrialiser ses développements PHP - RMLL 2010
Industrialiser ses développements PHP - RMLL 2010Industrialiser ses développements PHP - RMLL 2010
Industrialiser ses développements PHP - RMLL 2010Jean-Marc Fontaine
 
Revues de code - Forum PHP 2010
Revues de code - Forum PHP 2010Revues de code - Forum PHP 2010
Revues de code - Forum PHP 2010Jean-Marc Fontaine
 
Industrialisation de PHP - Be Zend 2010
Industrialisation de PHP - Be Zend 2010Industrialisation de PHP - Be Zend 2010
Industrialisation de PHP - Be Zend 2010Jean-Marc Fontaine
 
Solutions Linux 2010 - Maîtrise du développement PHP
Solutions Linux 2010 - Maîtrise du développement PHPSolutions Linux 2010 - Maîtrise du développement PHP
Solutions Linux 2010 - Maîtrise du développement PHPJean-Marc Fontaine
 
PHP 5.3 : Une étape importante sur la route vers PHP 6
PHP 5.3 : Une étape importante sur la route vers PHP 6PHP 5.3 : Une étape importante sur la route vers PHP 6
PHP 5.3 : Une étape importante sur la route vers PHP 6Jean-Marc Fontaine
 
Déboguer une application web avec FirePHP
Déboguer une application web avec FirePHPDéboguer une application web avec FirePHP
Déboguer une application web avec FirePHPJean-Marc Fontaine
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPJean-Marc Fontaine
 

Plus de Jean-Marc Fontaine (17)

Revue de code - PHP Tour Nantes 2012
Revue de code - PHP Tour Nantes 2012Revue de code - PHP Tour Nantes 2012
Revue de code - PHP Tour Nantes 2012
 
La qualité au delà du code - Forum PHP 2012
La qualité au delà du code - Forum PHP 2012La qualité au delà du code - Forum PHP 2012
La qualité au delà du code - Forum PHP 2012
 
Reprise sur incident - ConFoo 2012
Reprise sur incident - ConFoo 2012Reprise sur incident - ConFoo 2012
Reprise sur incident - ConFoo 2012
 
La qualité au-delà du code - ConFoo 2012
La qualité au-delà du code - ConFoo 2012La qualité au-delà du code - ConFoo 2012
La qualité au-delà du code - ConFoo 2012
 
Industrialiser PHP - Open World Forum 2011
Industrialiser PHP - Open World Forum 2011Industrialiser PHP - Open World Forum 2011
Industrialiser PHP - Open World Forum 2011
 
Reprise sur incident - RMLL 2011
Reprise sur incident - RMLL 2011Reprise sur incident - RMLL 2011
Reprise sur incident - RMLL 2011
 
Organiser efficacement son dépôt de code - RMLL 2011
Organiser efficacement son dépôt de code - RMLL 2011Organiser efficacement son dépôt de code - RMLL 2011
Organiser efficacement son dépôt de code - RMLL 2011
 
Maintenir du code historique - RMLL 2011
Maintenir du code historique - RMLL 2011Maintenir du code historique - RMLL 2011
Maintenir du code historique - RMLL 2011
 
Comment monter son business grâce à l'Open Source ?
Comment monter son business grâce à l'Open Source ?Comment monter son business grâce à l'Open Source ?
Comment monter son business grâce à l'Open Source ?
 
Industrialiser ses développements PHP - RMLL 2010
Industrialiser ses développements PHP - RMLL 2010Industrialiser ses développements PHP - RMLL 2010
Industrialiser ses développements PHP - RMLL 2010
 
Revues de code - Forum PHP 2010
Revues de code - Forum PHP 2010Revues de code - Forum PHP 2010
Revues de code - Forum PHP 2010
 
Industrialisation de PHP - Be Zend 2010
Industrialisation de PHP - Be Zend 2010Industrialisation de PHP - Be Zend 2010
Industrialisation de PHP - Be Zend 2010
 
Solutions Linux 2010 - Maîtrise du développement PHP
Solutions Linux 2010 - Maîtrise du développement PHPSolutions Linux 2010 - Maîtrise du développement PHP
Solutions Linux 2010 - Maîtrise du développement PHP
 
PHP : Etat des lieux
PHP : Etat des lieuxPHP : Etat des lieux
PHP : Etat des lieux
 
PHP 5.3 : Une étape importante sur la route vers PHP 6
PHP 5.3 : Une étape importante sur la route vers PHP 6PHP 5.3 : Une étape importante sur la route vers PHP 6
PHP 5.3 : Une étape importante sur la route vers PHP 6
 
Déboguer une application web avec FirePHP
Déboguer une application web avec FirePHPDéboguer une application web avec FirePHP
Déboguer une application web avec FirePHP
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHP
 

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

  • 1. Gérer ses environnements de développement avec Vagrant PHP Tour Nantes 2012 1
  • 2. Jean-Marc Fontaine Passionné de web depuis 1996, de PHP depuis 2000 et de musique depuis 1977 ‣ Responsable de la qualité logicielle chez Profilsoft 2
  • 3. Qu'est-ce qu'un environnement de développement ? 3
  • 4. Développement Recette Production 4
  • 5. Développement Recette Production 5
  • 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. 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. 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
  • 11. Comment maintenir (facilement) la parité entre dévelopemment et production ? 11
  • 12. Comment lutter contre le syndrome «Pourtant ça marche chez moi» ? 12
  • 13. Comment faire cohabiter sur une même machine des projets très différents ? 13
  • 14. Comment permettre à un nouveau développeur d’être rapidement opérationnel sur le projet ? 14
  • 15. Comment faire évoluer la configuration du sytème une fois le développement commencé ? 15
  • 16. Comment tester sans risque des montées de versions, de nouveaux outils ou une nouvelle configuration ? 16
  • 17. La virtualisation à la rescousse 17
  • 18. Définition Possibilité d’installer un ou plusieurs systèmes d’exploitation invités sur un système d’exploitation hôte. 18
  • 19. Là encore, plusieurs approches 19
  • 20. Là encore, plusieurs approches ‣ Virtualisation complète ‣ Paravirtualisation ‣ Virtualisation matériellement assistée ‣ Virtualisation logiciellement assistée 20
  • 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. 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. Peut mieux faire La 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. Vagrant 24
  • 25. Vagrant vagrantup.com ‣ Outil en ligne de commande ‣ Utilise VirtualBox (Pour le moment) ‣ Ecrit en Ruby 25
  • 26. Installation ‣ Paquets disponibles pour la plupart des systèmes d’exploitation : downloads.vagrantup.com ‣ Via Ruby Gem : gem install vagrant 26
  • 27. Créer sa première instance $ vagrant box add precise32 http://files.vagrantup.com/precise32.box $ vagrant init precise32 $ vagrant up 27
  • 28. Se connecter à l’instance $ vagrant ssh 28
  • 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. Fichier Vagrantfile Example 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. Fichier Vagrantfile Box de base Vagrant::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. Fichier Vagrantfile Réseau «hostonly» IP de l’instance Vagrant::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. Fichier Vagrantfile Réseau «bridged» Vagrant::Config.run do |config| … config.vm.network :briged … end 33
  • 34. Fichier Vagrantfile Répertoires partagés Identifiant Chemin invité Chemin hôte Vagrant::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. Performances des partages NFS Exé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é 13s Répertoires partagés VirtualBox 5m 14s Répertoire partagé NFS 22s Répertoire partagé NFS 14s (Cache chaud) 35
  • 36. Fichier Vagrantfile Paramétrage fin de la VM Identifiant de la VM injecté par Vagrant Vagrant::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. Fichier Vagrantfile Gestion de plusieurs VM Première VM Vagrant::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
  • 39. Outils de provisionnement Gestion 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. Provisionnement avec Puppet Quelques précisions sur le langage proposé ‣ Langage spécifique (DSL) ‣ Langage déclaratif ‣ Concepts de base • Utilisateurs / Groupes / Droits • Commandes • Paquets • Services 40
  • 41. Fichier Vagrantfile Provisionnement avec Puppet Vagrant::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. Provisionnement avec Puppet Exemple d’arborescence Application de démonstration Configuration de Puppet Fichier de configuration de Vagrant 42
  • 43. manifests/application.pp Fichier de déclaration de base # Set default path for Exec calls Exec { path => [ "/bin/", "/sbin/" , "/usr/bin/", "/usr/sbin/" ] } node default { include params include system Inclusion de manifests include apache } 43
  • 44. manifests/params.pp Fichier de configuration class params { # Apache server name # Make sure this server name points to the IP defined in the Vagranfile $servername = "www.application.local" # Apache port $port = "80" # Message of the day to be displayed at login $motd = "Welcome to your application development virtual machine!" } 44
  • 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. 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. 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. 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. modules/apache/templates/vhost.erb Gabarit 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. Exemples Usage de Vagrant avec Puppet ‣ L’ensemble des fichiers d’exemple sont disponibles sur Github : https://github.com/jmfontaine/vagrant-talk 50
  • 51. Créer ses propres boxes Ce n’est pas parce que je suis paranoïaque qu’ils ne sont pas aprè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. Plugin vbguest ‣ Mise à jour automatique des Addons Invités de VirtualBox 52
  • 53. Plugin hosts ‣ Définition automatique des noms de domaine dans /etc/hosts config.vm.host_name = 'www.exemple.com' 53
  • 54. Merci ! ‣ Slides : www.slideshare.net/JMF ‣ Twitter : @jmfontaine ‣ Email : jm@jmfontaine.net ‣ Blog : jmfontaine.net 54
  • 55. Crédits photographiques Les photos et illustrations suivantes ont été utilisées dans cette pré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