Vagrant - Version control your dev environment
Upcoming SlideShare
Loading in...5
×
 

Vagrant - Version control your dev environment

on

  • 1,410 views

Vagrant facilitates the creation and configuration of lightweight, reproducible, and portable development environments. ...

Vagrant facilitates the creation and configuration of lightweight, reproducible, and portable development environments.
It is currently in use at companies like Disqus, BBC, Mozilla, Nokia, and O'Reilly Media. More information about Vagrant is available at: http://www.vagrantup.com/

Links:
Boxes: https://github.com/opscode/bento
Cookbooks: http://community.opscode.com/
LAMP demo: https://github.com/bocribbz/cookbook-lampdemo

Statistics

Views

Total Views
1,410
Views on SlideShare
996
Embed Views
414

Actions

Likes
4
Downloads
9
Comments
2

1 Embed 414

http://bocribbz.com 414

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • @sepehrnow thanks for the recommendation. I'll explore Salt on some personal projects.
    Are you sure you want to
    Your message goes here
    Processing…
  • Cool, Vagrant+Chef can save so much time. But I'm hearing a lot of good things about Vagrant+Salt too. Salt is python based so it seems like a more natural option for a python guy.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Vagrant - Version control your dev environment Vagrant - Version control your dev environment Presentation Transcript

  • Vagrant Version control your dev environment Bob Cribbs
  • Bob Cribbs Software developer. Focused mainly on Python, junior on Ruby and getting started with mobile. bocribbz bocribbz bocribbz bocribbz bocribbz bocribbz.com
  • Development environments made easy. www.vagrantup.com Brasov Tech Meet | September 2013 View slide
  • You’re hired. Get the project up and running on your new machine. newguy$ git clone git://path-to-code-repo/super_project.git Cloning into super_project newguy$ cd super_project newguy$ ... newguy$ ./start.sh Server listening on 127.0.0.1 View slide
  • We have a setup script! newguy$ ./setup.sh Installing software. Installing dependencies. Configuring. Success!
  • We have a setup script! ● multiple ecosystems Win/Linux/MacOS ● multiple package managers yum, apt, homebrew, macports ● its likely some configuration will be done differently ● its likely it will diverge from the production environment
  • We have a README! It gives precise instructions about what should be installed and how it should be configured. For a mature project, the README file ends up being a few screens long.
  • We have a README! ● multiple ecosystems Win/Linux/MacOS ● very high chances something will be misconfigured ● unlikely to be maintained, (most) developers don’t write English ● time consuming
  • I’m sure you can do it! newguy$ start.sh Failed to connect to MySql at localhost:3333 newguy$ install mysql newguy$ start.sh Failed to connect to Redis at localhost:3334 newguy$ install redis newguy$ start.sh Missing ImageMagick extensions. newguy$ install imagemagick newguy$ start.sh Server listening on 127.0.0.1
  • I’m sure you can do it! Internal Server Error!
  • Problems Not repeatable. Not verifiably correct. Not isolated. Difficult to understand.
  • Problems Not repeatable. Not verifiably correct. Not isolated. Difficult to understand. SLOW, SLOW, SLOW!
  • Vagrant Its a tool for creating, managing and distributing portable development environments. Zero to VM in seconds $ vagrant init precise32 http://files.vagrantup.com/precise32.box ... $ vagrant up ... $ vagrant ssh vagrant@precisebox32:~$ echo hello hello
  • Problems solved Repeatable you can do the exact same thing when needed Verifiably correct you should have automation to check this Isolated its in a virtual machine (Vbox, VMWare, etc.) Understandable You can read it to understand Fast(er) It still takes some time, but it is much faster
  • Some Terms Boxes templates for creating a machine, preinstalled OS
  • Boxes Snapshots / base operating system images. Initial state of the VM. Operating system (Ubuntu 12.04, CentOS 5.9, etc.) Can be packaged and shared. eg. https://github.com/opscode/bento
  • Some Terms Boxes templates for creating a machine, preinstalled OS Vagrantfile configuration read by vagrant to create your machine
  • Vagrantfile samples Vagrant.configure("2") do |config| config.vm.box = "precise32" end Vagrant.configure("2") do |config| config.vm.box = "precise32" config.vm.provision "shell" inline "apt-get update" config.vm.provision "shell" inline "apt-get install apache2" end
  • Some Terms Boxes templates for creating a machine, preinstalled OS Vagrantfile configuration read by vagrant to create your machine "vagrant" command manages life cycle of the environment
  • "vagrant" command vagrant init Create a Vagrantfile in the current directory vagrant up Boot the VM vagrant halt Shutdown the VM vagrant destroy Delete the virtual machine vagrant ssh SSH into the VM
  • You’re hired. Get the project up and running on your new machine. newguy$ git clone git://path-to-code-repo/super_project.git Cloning into super_project newguy$ cd super_project newguy$ vagrant up
  • Overview 1. Project specific configuration file 2. Import base box 3. Boot up virtual machine a. Synced folders b. Networking 4. Configure / provision software
  • Synced Folders Automatically sync files from host to guest so you can use your prefered editor on the host. VirtualBox shared folders VMWare shared folder rsync (for AWS) etc...
  • Synced Folders config Vagrant.configure("2") do |config| # ... config.vm.shared_folder "path/on/host/", "/path/on/guest/" end
  • Networking Configure how you will communicate with the VM or how multiple VMs communicate with each other. You can still use your prefered browser or tools to communicate with the guest servers. NAT: usually for port forwarding Host-Only: private network Bridge: act like a new device on the router/network
  • Networking config Vagrant.configure("2") do |config| # ... config.vm.network :forwarded_port, guest: 80, host: 8080 config.vm.network :private_network, ip: "192.168.3.10" config.vm.network :public_network end
  • Provisioning You can use shell scripts, Puppet or Chef to install and configure software. Berkshelf Create and manage cookbooks that install and configure software dependencies. Chef Automation platform and nodes manager. Transforms infrastructure into code.
  • Provisioning configs Vagrant.configure("2") do |config| # ... config.vm.provision "shell", script "setup.sh" end
  • Berkshelf Manage cookbook and it’s dependencies. http://community.opscode.com/ Create new cookbook and boilerplate configuration: berks cookbook cookbook-projectname
  • Example https://github.com/bocribbz/cookbook-lampdemo
  • LAMP demo Show how Vagrant and Berkshelf work together. Simple cookbook that installs Ubuntu, Apache, MySQL, PHP and shows phpinfo().
  • LAMP demo berks cookbook cookbook-lampdemo
  • LAMP demo - Vagrantfile
  • LAMP demo - metadata.rb
  • LAMP demo - Apache attributes Setting attributes/apache.rb paths and other variables used in the recipe.
  • LAMP demo - Apache recipe
  • LAMP demo - PHP recipe
  • LAMP demo - MySQL attrs & recipe
  • LAMP demo - vagrant up
  • LAMP demo
  • Questions
  • Thank you!