Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Speeding up your development team with vagrant

Robin Müller
November 07, 2013

Speeding up your development team with vagrant

Mein Talk zu Vagrant auf der Developer Conference 2013 in Hamburg.

Robin Müller

November 07, 2013
Tweet

More Decks by Robin Müller

Other Decks in Technology

Transcript

  1. 1
    SPEEDING UP YOUR
    DEVELOPMENT TEAM
    WITH VAGRANT
    Robin Müller | @_RobM | 2013-11-07

    View full-size slide

  2. 4
    PHP 5.4.21
    PHP 5.5.5
    MySQL
    MariaDB
    PHP 5.3.27
    Percona

    View full-size slide

  3. 5
    Entwickler
    Versch. Testumgebungen
    Alte Versionen
    Versch. Projekte
    Manuelle Verwaltung
    Arbeitgeber
    Versch. Projekte
    Alte Projekte
    Neue Entwickler im Team

    View full-size slide

  4. Lösung? Virtualisierung!
    6
    Host
    Guest (Testing) Dev tools
    Webserver DB Server JVM …

    View full-size slide

  5. Entwickler
    Versch. Testumgebungen
    Alte Versionen
    Versch. Projekte
    Manuelle Verwaltung
    Arbeitgeber
    Versch. Projekte
    Alte Projekte
    Neue Entwickler im Team
    7

    ✔ ✔


    View full-size slide

  6. •  2010 gestartet
    •  Tool um komplette Entwicklungs-/Testumgebungen zu erstellen
    •  Einfacher Workflow
    •  Fokus auf Automatisierung
    •  Wichtige Begriffe:
    •  Base box
    •  Provider
    •  Provisioner
    •  Synced folder
    9

    View full-size slide

  7. 10
    Host
    Dev tools
    Webserver DB Server JVM …
    Guest (Testing)
    Provisioners

    View full-size slide

  8. Erste Schritte
    11
    •  VirtualBox auf Host installieren => virtualbox.org
    •  Vagrant auf Host installieren => vagrantup.com
    $ vagrant box add precise64 http://
    files.vagrantup.com/precise64.box
    $ vagrant init precise64
    $ vagrant up

    View full-size slide

  9. Befehle
    12
    •  vagrant init
    •  Erstellt ein Vagrantfile im aktuellen Verzeichnis
    •  vagrant up
    •  Erstellt und startet die Guests wie im Vagrantfile definiert
    •  vagrant halt
    •  Herunterfahren des Guest
    •  vagrant destroy
    •  Herunterfahren und löschen des Guest
    •  vagrant ssh
    •  Per SSH mit Guest verbinden

    View full-size slide

  10. Lifecycle
    13
    Base boxes
    Working
    box add
    init
    precise64
    Vagrantfile
    up
    Defined box
    destroy
    halt
    Defined box
    up
    Defined box

    View full-size slide

  11. Vagrantfile
    14
    Vagrant.configure("2") do |config|
    config.vm.box = "precise64"
    config.vm.box_url = "http://files.vagrantup.com/precise64.box"
    config.vm.network :forwarded_port, guest: 80, host: 8080
    config.vm.synced_folder "./data", "/vagrant_data”
    config.vm.provider :virtualbox do |vb|
    vb.gui = false
    vb.customize [
    "modifyvm", :id, "--memory", "3072", "--cpus", "3"
    ]
    end
    end

    View full-size slide

  12. Synced folders
    •  Default: VirtualBox shared folder
    •  Performance bei vielen Dateien gering
    •  Alternative: NFS
    •  Host (nfsd) und Guest müssen NFS unterstützen
    15
    ...
    # synced folders
    config.vm.synced_folder ”folder1", "/home/vagrant/folder1”
    config.vm.synced_folder ”data", "/vagrant_data”, nfs: true
    ...

    View full-size slide

  13. Synced folder benchmark
    16
    Test Zeit
    VirtualBox Shared folder 5m 14s
    Host Dateisystem (ohne Vagrant) 10s
    Natives VM Dateisystem 13s
    NFS Shared folder 22s
    NFS Shared folder (warm cache) 14s

    View full-size slide

  14. Eigene Base box erstellen
    •  Neue VirtualBox VM anlegen
    •  Konventionen
    •  User: vagrant / vagrant
    •  Root PW: vagrant
    •  Spezielle SSH Keys hinterlegen
    •  Minimale Installation
    •  USB/Audio deaktivieren
    •  So wenig Ressourcen wie möglich
    •  Ruby, Puppet & Chef installieren
    •  VirtualBox Guest additions installieren
    17

    View full-size slide

  15. Eigene Base box erstellen
    •  Ins Verzeichnis der VirtualBox VM wechseln
    •  .box Datei erstellen
    18
    $ vagrant package --base VMName

    View full-size slide

  16. Dos & Don’ts
    •  DO
    •  Eigene Base box erstellen wenn eine spezielle Distribution benötigt
    wird
    •  Konfiguration über Provisioner
    •  DON’T
    •  Alles in der Base box installieren
    •  Vagrant (in der Standardkonfiguration) für die Live Server einsetzen
    19

    View full-size slide

  17. Praxisbeispiel: Workflow für Entwickler
    •  Anforderung: Zum Wochenstart eine frische Datenbank
    für alle Entwickler
    •  Sonntag Abend: Neuen DB Dump generieren
    •  Montag Morgen:
    20
    $ git pull
    $ vagrant destroy
    $ vagrant up

    View full-size slide

  18. Entwickler
    Versch. Testumgebungen
    Alte Versionen
    Versch. Projekte
    Manuelle Verwaltung
    Arbeitgeber
    Versch. Projekte
    Alte Projekte
    Neue Entwickler im Team
    21

    ✔ ✔




    View full-size slide

  19. Speeding up?
    •  JBoss, Activiti, PlayFramework (Netty), MySQL, Latex, …
    •  Setup Time: 5-6h
    •  Setup Time mit Vagrant: 90 Minuten
    22

    View full-size slide

  20. Szenarien
    •  Agenturen und Freelancer
    •  Abgeschlossene Projekte noch einmal aktualisieren
    •  Schnell wachsende Entwicklerteams
    •  Komplexer Softwarestack zum Test nötig
    23

    View full-size slide

  21. Probiert es aus!
    •  Repository bei github
    •  Branch “quickstart” mit allen Chef recipes
    •  How To
    •  VirtualBox herunterladen & installieren
    •  Vagrant herunterladen & installieren
    •  Magento herunterladen
    •  Repository auschecken
    •  Magento in ./magento Ordner entpacken
    •  vagrant up (aus Verzeichnis in dem Vagrantfile liegt)
    24

    View full-size slide

  22. 25
    @_RobM
    https://github.com/RobM84/devparadise-vagrant/
    https://speakerdeck.com/robm84

    View full-size slide

  23. Weiterführende Informationen
    26
    •  http://www.codinghorror.com/blog/2007/03/the-works-on-
    my-machine-certification-program.html
    •  http://www.vagrantup.com/about.html
    •  https://coderwall.com/p/uaohzg

    View full-size slide