• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Introduction to Vagrant
 

Introduction to Vagrant

on

  • 5,600 views

 

Statistics

Views

Total Views
5,600
Views on SlideShare
5,597
Embed Views
3

Actions

Likes
10
Downloads
84
Comments
0

1 Embed 3

http://www.linkedin.com 3

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…
Post Comment
Edit your comment

    Introduction to Vagrant Introduction to Vagrant Presentation Transcript

    • Introduction to Vagrant Marcelo Correia PinheiroFriday, March 29, 13
    • Friday, March 29, 13
    • Friday, March 29, 13
    • What is Vagrant? A tool to build development environments based on virtual machines Focused to create environments that are similar as possible or identical with production servers Created by Mitchell Hashimoto Written in Ruby Initially builted on top of VirtualBox API, today offers VMWare Fusion support (as $79 per licence)Friday, March 29, 13
    • How I install Vagrant? Get VirtualBox first Download installer on Vagrant site (Debian, CentOS, Windows, OSX, other OS’s) Get a Vagrant boxFriday, March 29, 13
    • What is a Vagrant Box? Is a previously builted Vagrant virtual machine image, ready-to-run Available in a lot of platforms (Linux, Windows, BSD) You can create one! :)Friday, March 29, 13
    • How I add a box? Great box repository: www.vagrantbox.es Run this command: $ vagrant box add <name> <url> <provider> # virtualboxFriday, March 29, 13
    • How I create a environment? Inside your project, create a Vagrantfile: $ vagrant init <your box name>Friday, March 29, 13
    • How I create a environment? # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| # All Vagrant configuration is done here. The most common configuration # options are documented and commented below. For a complete reference, # please see the online documentation at vagrantup.com. # Every Vagrant virtual environment requires a box to build off of. config.vm.box = "my_precious_box" # ... # A list of options here # ... endFriday, March 29, 13
    • How I start to use it? Simply run this command: $ vagrant upFriday, March 29, 13
    • How I connect to it? Easy: $ vagrant sshFriday, March 29, 13
    • How I stop it? Easy: $ vagrant haltFriday, March 29, 13
    • How I restart it? Easy: $ vagrant reloadFriday, March 29, 13
    • How I access it? You need to set forwarding ports between guest and host to work (bind on 0.0.0.0!) Just add the following code in your Vagrantfile, restart server and access in browser: # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| # ... config.vm.network :forwarded_port, guest: 3000, host: 3000 # ... endFriday, March 29, 13
    • How I customize it? You can change memory, CPU cores and other things in Vagrantfile Just see VBoxManage options Example: # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| # ... config.vm.provider :virtualbox do |vb| vb.customize [ modifyvm, :id, --memory, 1024 ] vb.customize [ modifyvm, :id, --cpus, 4 ] end # ... endFriday, March 29, 13
    • That’s it? Of course, no! :) It’s time to configure environment using available provisioners to install required software: Chef Solo Chef Server Puppet Apply Puppet Server Shell CFEngine (experimental)Friday, March 29, 13
    • Using Chef Solo First, run chef-solo installation based on Opscode website in your guest: $ sudo true && curl -L https://www.opscode.com/chef/install.sh | sudo bashFriday, March 29, 13
    • Using Chef Solo Get all necessary recipes from Opscode site Great repo with a lot of recipes Manual recipe dependency resolution sometimes # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| # ... config.vm.provision :chef_solo do |chef| chef.add_recipe apt chef.add_recipe build-essential chef.add_recipe ruby1.9 chef.add_recipe mondodb chef.add_recipe redis end # ... endFriday, March 29, 13
    • Using Chef Solo Or Install berkshelf Vagrant plugin very similar to Bundler generate a Berksfile in app root and run: source :opscode cookbook mysql cookbook nginx, ~> 0.101.5 $ berks install --path vendor/cookbooksFriday, March 29, 13
    • Using Chef Server Configure Vagrantfile to use a Chef Server as a repository Requires a URL and a PEM key to connect # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| # ... config.vm.provision :chef_client do |chef| chef.chef_server_url = https://your-chef-server.devops.com chef.validation_key_path = your-private-key.pem end # ... endFriday, March 29, 13
    • Using Puppet Apply Install Puppet from official repository in your guest VM: # wget http://apt.puppetlabs.com/puppetlabs-release-squeeze.deb # dpkg -i puppetlabs-release-squeeze.debFriday, March 29, 13
    • Using Puppet Apply Change Vagrantfile to use Puppet manifest files: # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| # ... config.vm.provision :puppet do |puppet| puppet.manifests_path = manifests puppet.manifest_file = my-devops-puppet-manifest.pp end # ... endFriday, March 29, 13
    • Using Puppet Apply Write Puppet manifest with all software that your app needs Depending of what you need, some additional configuration is requiredFriday, March 29, 13
    • Using Puppet Server Change Vagrantfile to connect on a Puppet Server Set node hostname if you need Add some options too # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| # ... config.vm.provision :puppet_server do |puppet| puppet.puppet_server = http://your-master-of-puppets.devops.com puppet.puppet_node = my-precious-puppet.devops.com puppet.options = --verbose --debug end # ... endFriday, March 29, 13
    • Using Shell Create a single bash script that installs all you need: #!/bin/bash apt-get update # base apt-get install --yes python nginx mongodb-server redis-server # others apt-get install --yes curl tmux htop (...) # some additional configuration here (...)Friday, March 29, 13
    • Installing software Easy: $ vagrant provisionFriday, March 29, 13
    • Creating a custom box You can create custom boxes to distribute between development teams Requires a fresh installation of a virtual machine based on Vagrant conventions and some manual configuration Awesome advantage: you can repackage a existent Vagrant package after updating a existent VM Next steps are based on Debian distro as VM with VirtualBox as providerFriday, March 29, 13
    • Creating a custom box Installation steps: set root password: vagrant create a user with login vagrant and pwd vagrant machine name: vagrant-debian-squeeze machine host: vagrantup.comFriday, March 29, 13
    • Creating a custom box Post-installation steps: Install sudo on virtual machine Add a group permission with visudo: %admin ALL=NOPASSWD: ALL Download SSH insecure pair files: https://github.com/mitchellh/vagrant/tree/master/keys/ Save public key on GUEST in ~/.ssh/authorized_keys and all keys in HOST Or generate a custom pair of SSH keys and distribute itFriday, March 29, 13
    • Creating a custom box Post-installation steps: Install VirtualBox Guest Additions with /Cmd|Ctrl/-D Remove pre-installed packages: # apt-get remove --purge virtualbox-ose-*Friday, March 29, 13
    • Creating a custom box Post-installation steps: VirtualBox needs xorg drivers, kernel headers and gcc to correctly build Guest Additions kernel module. Run: # apt-get install linux-headers-$(uname -r) build-essential xorgFriday, March 29, 13
    • Creating a custom box Post-installation steps: Run VirtualBox Guest Additions installer: # mount /media/cdrom # sh /media/cdrom/VBoxLinuxAdditions.runFriday, March 29, 13
    • Creating a custom box After all steps, shutdown your VM Execute in host: $ vagrant package <vm-name> --base <package-name> --output <box-file> $ vagrant box add <package-name> <box-file> virtualboxFriday, March 29, 13
    • Creating a custom box If you don’t want to build step-by-step, try veewee https://github.com/jedi4ever/veewee Supports VMWare Fusion, VirtualBox and KVM Enable boxing based on a ISO file Run as a Vagrant PluginFriday, March 29, 13
    • Performance Tips Slow I/O on Guest Enable Host I/O cache on SATA Controller Slow with CPU-bound tasks Set Motherboard Chipset to ICH9 Still searching for a solution to slow webserver bootstrap (Ruby / Python) Anomalous kernel CPU execution time while loadingFriday, March 29, 13
    • FAQ Time It’s time to make a question! :)Friday, March 29, 13
    • Thank you! :)Friday, March 29, 13