John Coggeshall
John Coggeshall 
PHP Core Developer 
Freelancer 
@coogle
What’s Vagrant? 
Vagrant is a tool for managing the 
creation and management of self-contained 
development 
environments. 
Think of it as a tool that combines a 
few different technologies together 
into one bag of awesome.
What’s Vagrant?
Benefits & Drawbacks of Vagrant 
 Get people up and running fast 
Completely Sandboxed 
Consistent Deployment 
Version Controlled 
Safety Net 
Large Upfront investment * 
Requires learning new stuff 
Takes up a lot of space 
Increases complexity
Getting Started 
So how do we get 
started? 
1) Download tools 
2) Define Environment 
3) Prosper 
Tools you’ll need: 
 Vagrant 
 http://www.vagrantup.com/ 
 VirtualBox 
 http://www.virtualbox.org
Vagrant Commands 
There are many commands 
to interact with your 
environment available to 
you via Vagrant 
We will discuss some of 
them in this talk, but they 
are fully documented here: 
https://docs.vagrantup.com 
/v2/cli/index.html 
Useful Vagrant CLI commands 
Bring up a VM 
$ vagrant up 
Power down a VM 
$ vagrant halt 
Reboot a VM 
$ vagrant reload 
SSH into a VM 
$ vagrant ssh 
Destroy / delete a VM 
$ vagrant destroy
Vagrant Providers 
Vagrant supports a number of 
different providers (the technology 
that creates the virtual environment) 
For us we’re using the VirtualBox 
and Amazon EC2 providers as they 
are “free” 
Providers are extendable as plug-ins 
A VMWare provider is also available
Getting Started 
Once you have the tools the first 
step in creating your environment is 
to select a box to use. 
Boxes are ready to run virtual 
machines in a variety of OSes 
A large selection of pre-made boxes 
are available for use: 
http://www.vagrantbox.es 
Debian 
Ubuntu 
Windows 
BSD
Creating an Environment 
Vagrant environments are defined 
through a file called a 
VagrantFile. 
To create a stub of this file, from the 
root of your project execute the 
following command: 
$ vagrant init [box name] 
$ vagrant box add 
precise64 
http://files.vagrantup 
.com/precise64.box 
virtualbox 
$ cd /myproject 
$ vagrant init precise64
Tools to help build a Vagrantfile 
A Vagrantfile as you’ve seen is 
basically Ruby. 
There are also a number of online 
tools available to help you generate 
these files using a UI if that’s what 
you prefer. 
Generate your Vagrantfile online 
Rove 
http://rove.io/ 
PuPHPet 
http://puphpet.com/
Vagrant Provisioners 
Provisioners are various tools 
(extendable as plug-ins) for 
configuring the virtual environment 
Vagrant supports a number of 
various provisioners out of box, most 
notably Puppet and Chef 
Vagrant Provisioners 
• File 
• Shell 
• Ansible 
• CFEngine 
• Chef 
• Docker 
• Puppet 
• Salt
Making the Most of Vagrant 
 There are a number of ways to improve your 
Vagrant experience at various points that are 
worth mentioning 
 Streamlining environment creation 
 Improving performance of the environment 
 Etc. 
 Let’s take a look at a few of them.
Improving Performance 
 There are a number of ways to improve the 
performance of the virtual environment 
 Provider Selection –VMWare does better than 
VirtualBox 
 For VMWare there are a few things you can 
do as well 
 Use NFS to share the project 
 Use all CPU cores 
 Use ¼ of system memory
Improving Creation Time 
 There are a number of things you can do to 
simply the complexity of using a tool like 
Vagrant to build environments 
 Don’t use provisioners 
 Create skeleton projects
Skipping Provisioners 
 If you want, you don’t necessarily have to use 
any provisioners at all when using Vagrant 
 Boot up a box, login, and configure the 
environment manually 
 Use vagrant package to create a .box from your 
configured VM 
 Provide this to others 
 Easier, but you lose some visibility and 
management that you get from provisioners
Creating a Skeleton 
 IMHO, better than simply packaging boxes is 
to create a skeleton of your basic projects and 
build off of them as necessary 
 I have created said skeleton projects 
 http://github.com/coogle/skeleton 
 Same speed in ramp-up time without losing 
the power of the provisioners
Questions? Please rate my talk: http://joind.in/11664

Development with Vagrant

  • 1.
  • 2.
    John Coggeshall PHPCore Developer Freelancer @coogle
  • 3.
    What’s Vagrant? Vagrantis a tool for managing the creation and management of self-contained development environments. Think of it as a tool that combines a few different technologies together into one bag of awesome.
  • 4.
  • 5.
    Benefits & Drawbacksof Vagrant  Get people up and running fast Completely Sandboxed Consistent Deployment Version Controlled Safety Net Large Upfront investment * Requires learning new stuff Takes up a lot of space Increases complexity
  • 6.
    Getting Started Sohow do we get started? 1) Download tools 2) Define Environment 3) Prosper Tools you’ll need:  Vagrant  http://www.vagrantup.com/  VirtualBox  http://www.virtualbox.org
  • 7.
    Vagrant Commands Thereare many commands to interact with your environment available to you via Vagrant We will discuss some of them in this talk, but they are fully documented here: https://docs.vagrantup.com /v2/cli/index.html Useful Vagrant CLI commands Bring up a VM $ vagrant up Power down a VM $ vagrant halt Reboot a VM $ vagrant reload SSH into a VM $ vagrant ssh Destroy / delete a VM $ vagrant destroy
  • 8.
    Vagrant Providers Vagrantsupports a number of different providers (the technology that creates the virtual environment) For us we’re using the VirtualBox and Amazon EC2 providers as they are “free” Providers are extendable as plug-ins A VMWare provider is also available
  • 9.
    Getting Started Onceyou have the tools the first step in creating your environment is to select a box to use. Boxes are ready to run virtual machines in a variety of OSes A large selection of pre-made boxes are available for use: http://www.vagrantbox.es Debian Ubuntu Windows BSD
  • 10.
    Creating an Environment Vagrant environments are defined through a file called a VagrantFile. To create a stub of this file, from the root of your project execute the following command: $ vagrant init [box name] $ vagrant box add precise64 http://files.vagrantup .com/precise64.box virtualbox $ cd /myproject $ vagrant init precise64
  • 12.
    Tools to helpbuild a Vagrantfile A Vagrantfile as you’ve seen is basically Ruby. There are also a number of online tools available to help you generate these files using a UI if that’s what you prefer. Generate your Vagrantfile online Rove http://rove.io/ PuPHPet http://puphpet.com/
  • 13.
    Vagrant Provisioners Provisionersare various tools (extendable as plug-ins) for configuring the virtual environment Vagrant supports a number of various provisioners out of box, most notably Puppet and Chef Vagrant Provisioners • File • Shell • Ansible • CFEngine • Chef • Docker • Puppet • Salt
  • 14.
    Making the Mostof Vagrant  There are a number of ways to improve your Vagrant experience at various points that are worth mentioning  Streamlining environment creation  Improving performance of the environment  Etc.  Let’s take a look at a few of them.
  • 15.
    Improving Performance There are a number of ways to improve the performance of the virtual environment  Provider Selection –VMWare does better than VirtualBox  For VMWare there are a few things you can do as well  Use NFS to share the project  Use all CPU cores  Use ¼ of system memory
  • 16.
    Improving Creation Time  There are a number of things you can do to simply the complexity of using a tool like Vagrant to build environments  Don’t use provisioners  Create skeleton projects
  • 17.
    Skipping Provisioners If you want, you don’t necessarily have to use any provisioners at all when using Vagrant  Boot up a box, login, and configure the environment manually  Use vagrant package to create a .box from your configured VM  Provide this to others  Easier, but you lose some visibility and management that you get from provisioners
  • 18.
    Creating a Skeleton  IMHO, better than simply packaging boxes is to create a skeleton of your basic projects and build off of them as necessary  I have created said skeleton projects  http://github.com/coogle/skeleton  Same speed in ramp-up time without losing the power of the provisioners
  • 19.
    Questions? Please ratemy talk: http://joind.in/11664