Vagrant
HOW TO SET A VAGRANT DEVELOPMENT SYSTEM
Paul Bearne @pbearne
Sr. Web Developer @ metronews.ca
Plugin author of Author Avatars List ( http://wordpress.org/plugins/author-avatars/ )
WP Site Verification tool ( http://wordpress.org/plugins/wp-site-verification-tool/ )
Where do you develop your sites?
Why use Vagrant?
No need to have a web server installed.
You can match the configuration of production server.
Project isolation - one vagrant setup per project.
Version isolation - more than one version of WordPress.
Works the same on PC/Mac or Linux.
Vagrant
“Vagrant is a tool for building complete
development environments. With an easy-to-
use workflow and focus on automation, Vagrant
lowers development environment setup
time, increases development/production
parity, and makes the 'works on my machine'
excuse a relic of the past.”
http://www.vagrantup.com/about.html
Host Computer
Virtualbox
Shared Folder/usr/html/site C:/user/document/code
Install
Vagrant: http://downloads.vagrantup.com/
VirtualBox: https://www.virtualbox.org/
Plus a configuration file
Note: Sometimes problems with latest version VirtualBox on windows
THE BASIC COMMAND LINE
$ vagrant init precise32 http://files.vagrantup.com/precise32.box
$ vagrant up
$ vagrant destroy
Scripting
AUTOMATE THE CONFIG
How To Set a Vagrant Development System
How To Set a Vagrant Development System
DEMO
JUST RUN IT
Config
THE VAGRANTFILE FROM VARYING-VAGRANT-VAGRANTS
# -*- mode: ruby -*-
# vi: set ft=ruby :
dir = Dir.pwd
vagrant_dir = File.expand_path(File.dirname(__FILE__))
Vagrant.configure("2") do |config|
# Configurations from 1.0.x can be placed in Vagrant 1.1.x specs like the following.
config.vm.provider :virtualbox do |v|
v.customize ["modifyvm", :id, "--memory", 512]
end
# Forward Agent
#
# Enable agent forwarding on vagrant ssh commands. This allows you to use identities
# established on the host machine inside the guest. See the manual for ssh-add
config.ssh.forward_agent = true
# Default Ubuntu Box
#
# This box is provided by Vagrant at vagrantup.com and is a nicely sized (290MB)
# box containing the Ubuntu 12.0.4 Precise 32 bit release. Once this box is downloaded
# to your host computer, it is cached for future use under the specified box name.
config.vm.box = "precise32"
config.vm.box_url = "http://files.vagrantup.com/precise32.box"
config.vm.hostname = "vvv"
# Local Machine Hosts
#
# If the Vagrant plugin hostsupdater (https://github.com/cogitatio/vagrant-hostsupdater) is
# installed, the following will automatically configure your local machine's hosts file to
# be aware of the domains specified below. Watch the provisioning script as you may be
# required to enter a password for Vagrant to access your hosts file.
#
# By default, we'll include the domains setup by VVV. A short term goal is to read these in
# from a local config file so that they can be more dynamic to your setup.
if defined? VagrantPlugins::HostsUpdater
config.hostsupdater.aliases = [
"local.wordpress.dev",
"local.wordpress-trunk.dev",
"src.wordpress-develop.dev",
"build.wordpress-develop.dev"
]
end
# Default Box IP Address
#
# This is the IP address that your host will communicate to the guest through. In the
# case of the default `192.168.50.4` that we've provided, Virtualbox will setup another
# network adapter on your host machine with the IP `192.168.50.1` as a gateway.
#
# If you are already on a network using the 192.168.50.x subnet, this should be changed.
# If you are running more than one VM through Virtualbox, different subnets should be used
# for those as well. This includes other Vagrant boxes.
config.vm.network :private_network, ip: "192.168.50.4"
# /srv/database/
#
# If a database directory exists in the same directory as your Vagrantfile,
# a mapped directory inside the VM will be created that contains these files.
# This directory is used to maintain default database scripts as well as backed
# up mysql dumps (SQL files) that are to be imported automatically on vagrant up
config.vm.synced_folder "database/", "/srv/database"
config.vm.synced_folder "database/data/", "/var/lib/mysql", :mount_options => [ "dmode=777", "fmode=777" ]
# /srv/config/
#
# If a server-conf directory exists in the same directory as your Vagrantfile,
# a mapped directory inside the VM will be created that contains these files.
# This directory is currently used to maintain various config files for php and
# nginx as well as any pre-existing database files.
config.vm.synced_folder "config/", "/srv/config"
# /srv/config/nginx-config/sites/
#
# If a sites directory exists inside the above server-conf directory, it will be
# added as a mapped directory inside the VM as well. This is used to maintain specific
# site configuration files for nginx
config.vm.synced_folder "config/nginx-config/sites/", "/etc/nginx/custom-sites"
# /srv/www/
#
# If a www directory exists in the same directory as your Vagrantfile, a mapped directory
# inside the VM will be created that acts as the default location for nginx sites. Put all
# of your project files here that you want to access through the web server
config.vm.synced_folder "www/", "/srv/www/", :owner => "www-data", :mount_options => [ "dmode=775", "fmode=774" ]
# Provisioning
#
# Process one or more provisioning scripts depending on the existence of custom files.
#
# provison-pre.sh acts as a pre-hook to our default provisioning script. Anything that
# should run before the shell commands laid out in provision.sh (or your provision-custom.sh
# file) should go in this script. If it does not exist, no extra provisioning will run.
if File.exists?(File.join(vagrant_dir,'provision','provision-pre.sh')) then
config.vm.provision :shell, :path => File.join( "provision", "provision-pre.sh" )
end
# provision.sh or provision-custom.sh
#
# By default, Vagrantfile is set to use the provision.sh bash script located in the
# provision directory. If it is detected that a provision-custom.sh script has been
# created, that is run as a replacement. This is an opportunity to replace the entirety
# of the provisioning provided by default.
if File.exists?(File.join(vagrant_dir,'provision','provision-custom.sh')) then
config.vm.provision :shell, :path => File.join( "provision", "provision-custom.sh" )
else
config.vm.provision :shell, :path => File.join( "provision", "provision.sh" )
end
# provision-post.sh acts as a post-hook to the default provisioning. Anything that should
# run after the shell commands laid out in provision.sh or provision-custom.sh should be
# put into this file. This provides a good opportunity to install additional packages
# without having to replace the entire default provisioning script.
if File.exists?(File.join(vagrant_dir,'provision','provision-post.sh')) then
config.vm.provision :shell, :path => File.join( "provision", "provision-post.sh" )
end
end
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant::Config.run do |config|
config.vm.box = "precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
config.vm.network :hostonly, "33.33.33.10"
config.vm.share_folder("vagrant-root", "/vagrant", ".", :nfs => true)
config.vm.provision :puppet do |puppet|
puppet.manifests_path = "puppet/manifests"
puppet.module_path = "puppet/modules"
puppet.options = ['--verbose']
end
end
“:nfs => true” needed for Mac
Source: https://github.com/MikeRogers0/vagrant-nginx-wordpress-puppet/blob/master/Vagrantfile
Vagrant Commands
Vagrant up
◦ Start
Vagrant Suspend / resume
◦ pause/play
Vagrant halt
◦ turn off
Vagrant destroy
◦ wipeout
Vagrant status
◦ is it up
Vagrant int
◦ create empty config file
Vagrant box
◦ manage
C:WindowsSystem32driversetchosts
192.168.50.4 local.wordpress.dev local.wordpress-trunk.dev src.wordpress-develop.dev build.wordpress-develop.dev
Windows 8 - need to unprotect host in window defender
sudo sh -c 'echo "192.168.50.4 local.wordpress.dev local.wordpress-trunk.dev src.wordpress-develop.dev
build.wordpress-develop.dev" >>/private/etc/hosts'
Notes and links
Use: shell or bat to run vagrant
◦ cd varying-vagrant-vagrants
◦ start cmd.exe /k "vagrant up --no-provision“
Use different config files per site
http://www.vagrantup.com/
https://www.virtualbox.org/wiki/Downloads
Other tools
http://www.packer.io/ a tool for creating identical machine images for multiple platforms from
a single source configuration including vagrant images.
http://livereload.com/ to auto refresh web page on save.
http://puppetlabs.com/ home of puppet - http://forge.puppetlabs.com/apowers/wordpress
Questions?
We're hiring...
HR@METRONEWS.CA
Slides@ http://www.slideshare.net/pbearne
Email: pbearne@gmail.com

More Related Content

PPTX
Vagrant crash course
PDF
Vagrant for Virtualized Development
PPTX
Vagrant-Overview
PPTX
Vagrant + Docker
PPTX
Vagrant vs Docker
PDF
Vagrant for real (codemotion rome 2016)
PDF
Vagrant For DevOps
KEY
Vagrant crash course
Vagrant for Virtualized Development
Vagrant-Overview
Vagrant + Docker
Vagrant vs Docker
Vagrant for real (codemotion rome 2016)
Vagrant For DevOps

What's hot (20)

PDF
Multi-provider Vagrant and Chef: AWS, VMware, and more
ODP
It Works On My Machine: Vagrant for Software Development
PDF
Vagrant + Docker provider [+Puppet]
PDF
Vagrant presentation
PDF
Intro to vagrant
PDF
Introduction to Vagrant
PPTX
Vagrant to-aws-flow
PDF
An Introduction to Vagrant and Docker
PDF
Puppet and Vagrant in development
PDF
Vagrant + Ansible + Docker
PDF
Automated Infrastructure and Application Management
PPTX
Vagrant
PDF
Create your very own Development Environment with Vagrant and Packer
ODP
Building (localized) Vagrant boxes with Packer
PPTX
Vagrant 101 Workshop
PDF
Continuous Integration and Kamailio
PDF
Continuous delivery with jenkins, docker and exoscale
PDF
VCCW - Vagrant based WordPress development environment
PPTX
Node.js, Vagrant, Chef, and Mathoid @ Benetech
PPTX
Package Management on Windows with Chocolatey
Multi-provider Vagrant and Chef: AWS, VMware, and more
It Works On My Machine: Vagrant for Software Development
Vagrant + Docker provider [+Puppet]
Vagrant presentation
Intro to vagrant
Introduction to Vagrant
Vagrant to-aws-flow
An Introduction to Vagrant and Docker
Puppet and Vagrant in development
Vagrant + Ansible + Docker
Automated Infrastructure and Application Management
Vagrant
Create your very own Development Environment with Vagrant and Packer
Building (localized) Vagrant boxes with Packer
Vagrant 101 Workshop
Continuous Integration and Kamailio
Continuous delivery with jenkins, docker and exoscale
VCCW - Vagrant based WordPress development environment
Node.js, Vagrant, Chef, and Mathoid @ Benetech
Package Management on Windows with Chocolatey
Ad

Similar to How To Set a Vagrant Development System (20)

PDF
Vagrant - Version control your dev environment
PPTX
Vagrant introduction for Developers
PDF
Vagrant workshop 2015
PPTX
PPTX
Vagrant Up in 5 Easy Steps
PPTX
DevOps Hackathon - Session 1: Vagrant
PDF
Keep calm and vagrant up
PDF
Create Development and Production Environments with Vagrant
PDF
DevOps Series: Defining and Sharing Testable Machine Configurations with vagrant
PPT
Vagrant
KEY
Using Vagrant
PDF
Using Vagrant for Local WordPress Development
PPT
Geeky Academy Week 3 :: Vagrant + Puppet
PDF
Quick & Easy Dev Environments with Vagrant
PDF
Vagrant - Team Development made easy
PDF
Vagrant are you still develop in a non-virtual environment-
PDF
ITB2015 - Winning with Vagrant, Puppet and Chef
PDF
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
PDF
Take Home Your Very Own Free Vagrant CFML Dev Environment
PDF
Making Developers Productive with Vagrant, VirtualBox, and Docker
Vagrant - Version control your dev environment
Vagrant introduction for Developers
Vagrant workshop 2015
Vagrant Up in 5 Easy Steps
DevOps Hackathon - Session 1: Vagrant
Keep calm and vagrant up
Create Development and Production Environments with Vagrant
DevOps Series: Defining and Sharing Testable Machine Configurations with vagrant
Vagrant
Using Vagrant
Using Vagrant for Local WordPress Development
Geeky Academy Week 3 :: Vagrant + Puppet
Quick & Easy Dev Environments with Vagrant
Vagrant - Team Development made easy
Vagrant are you still develop in a non-virtual environment-
ITB2015 - Winning with Vagrant, Puppet and Chef
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
Take Home Your Very Own Free Vagrant CFML Dev Environment
Making Developers Productive with Vagrant, VirtualBox, and Docker
Ad

More from Paul Bearne (10)

PPTX
Childthemes ottawa-word camp-1919
PPTX
WP json api
PPTX
Vagrant WordCamp Hamilton
PPTX
Using WordPress as your application stack
PPTX
Unit tests with vagrant
PPTX
WordPress overloading Gravityforms using hooks, filters and extending classes
PPTX
HirshHorn theme: how I created it
PPTX
WortdPress Child themes: Why and How
PPTX
Daughter Themes
PPT
Author Avatars List demo slides
Childthemes ottawa-word camp-1919
WP json api
Vagrant WordCamp Hamilton
Using WordPress as your application stack
Unit tests with vagrant
WordPress overloading Gravityforms using hooks, filters and extending classes
HirshHorn theme: how I created it
WortdPress Child themes: Why and How
Daughter Themes
Author Avatars List demo slides

Recently uploaded (20)

PDF
sbt 2.0: go big (Scala Days 2025 edition)
PPTX
Modernising the Digital Integration Hub
PPT
Module 1.ppt Iot fundamentals and Architecture
PDF
Hindi spoken digit analysis for native and non-native speakers
PDF
A proposed approach for plagiarism detection in Myanmar Unicode text
PDF
A Late Bloomer's Guide to GenAI: Ethics, Bias, and Effective Prompting - Boha...
PDF
Produktkatalog für HOBO Datenlogger, Wetterstationen, Sensoren, Software und ...
PDF
A comparative study of natural language inference in Swahili using monolingua...
PPTX
Final SEM Unit 1 for mit wpu at pune .pptx
PDF
UiPath Agentic Automation session 1: RPA to Agents
PDF
OpenACC and Open Hackathons Monthly Highlights July 2025
PDF
Getting started with AI Agents and Multi-Agent Systems
PDF
STKI Israel Market Study 2025 version august
PPTX
2018-HIPAA-Renewal-Training for executives
PPTX
The various Industrial Revolutions .pptx
PDF
Enhancing emotion recognition model for a student engagement use case through...
PPT
Geologic Time for studying geology for geologist
PDF
Developing a website for English-speaking practice to English as a foreign la...
PDF
TrustArc Webinar - Click, Consent, Trust: Winning the Privacy Game
PDF
Abstractive summarization using multilingual text-to-text transfer transforme...
sbt 2.0: go big (Scala Days 2025 edition)
Modernising the Digital Integration Hub
Module 1.ppt Iot fundamentals and Architecture
Hindi spoken digit analysis for native and non-native speakers
A proposed approach for plagiarism detection in Myanmar Unicode text
A Late Bloomer's Guide to GenAI: Ethics, Bias, and Effective Prompting - Boha...
Produktkatalog für HOBO Datenlogger, Wetterstationen, Sensoren, Software und ...
A comparative study of natural language inference in Swahili using monolingua...
Final SEM Unit 1 for mit wpu at pune .pptx
UiPath Agentic Automation session 1: RPA to Agents
OpenACC and Open Hackathons Monthly Highlights July 2025
Getting started with AI Agents and Multi-Agent Systems
STKI Israel Market Study 2025 version august
2018-HIPAA-Renewal-Training for executives
The various Industrial Revolutions .pptx
Enhancing emotion recognition model for a student engagement use case through...
Geologic Time for studying geology for geologist
Developing a website for English-speaking practice to English as a foreign la...
TrustArc Webinar - Click, Consent, Trust: Winning the Privacy Game
Abstractive summarization using multilingual text-to-text transfer transforme...

How To Set a Vagrant Development System

  • 1. Vagrant HOW TO SET A VAGRANT DEVELOPMENT SYSTEM
  • 2. Paul Bearne @pbearne Sr. Web Developer @ metronews.ca Plugin author of Author Avatars List ( http://wordpress.org/plugins/author-avatars/ ) WP Site Verification tool ( http://wordpress.org/plugins/wp-site-verification-tool/ )
  • 3. Where do you develop your sites?
  • 4. Why use Vagrant? No need to have a web server installed. You can match the configuration of production server. Project isolation - one vagrant setup per project. Version isolation - more than one version of WordPress. Works the same on PC/Mac or Linux.
  • 5. Vagrant “Vagrant is a tool for building complete development environments. With an easy-to- use workflow and focus on automation, Vagrant lowers development environment setup time, increases development/production parity, and makes the 'works on my machine' excuse a relic of the past.” http://www.vagrantup.com/about.html
  • 8. THE BASIC COMMAND LINE $ vagrant init precise32 http://files.vagrantup.com/precise32.box $ vagrant up $ vagrant destroy
  • 13. Config THE VAGRANTFILE FROM VARYING-VAGRANT-VAGRANTS
  • 14. # -*- mode: ruby -*- # vi: set ft=ruby : dir = Dir.pwd vagrant_dir = File.expand_path(File.dirname(__FILE__)) Vagrant.configure("2") do |config| # Configurations from 1.0.x can be placed in Vagrant 1.1.x specs like the following. config.vm.provider :virtualbox do |v| v.customize ["modifyvm", :id, "--memory", 512] end # Forward Agent # # Enable agent forwarding on vagrant ssh commands. This allows you to use identities # established on the host machine inside the guest. See the manual for ssh-add config.ssh.forward_agent = true
  • 15. # Default Ubuntu Box # # This box is provided by Vagrant at vagrantup.com and is a nicely sized (290MB) # box containing the Ubuntu 12.0.4 Precise 32 bit release. Once this box is downloaded # to your host computer, it is cached for future use under the specified box name. config.vm.box = "precise32" config.vm.box_url = "http://files.vagrantup.com/precise32.box" config.vm.hostname = "vvv"
  • 16. # Local Machine Hosts # # If the Vagrant plugin hostsupdater (https://github.com/cogitatio/vagrant-hostsupdater) is # installed, the following will automatically configure your local machine's hosts file to # be aware of the domains specified below. Watch the provisioning script as you may be # required to enter a password for Vagrant to access your hosts file. # # By default, we'll include the domains setup by VVV. A short term goal is to read these in # from a local config file so that they can be more dynamic to your setup. if defined? VagrantPlugins::HostsUpdater config.hostsupdater.aliases = [ "local.wordpress.dev", "local.wordpress-trunk.dev", "src.wordpress-develop.dev", "build.wordpress-develop.dev" ] end
  • 17. # Default Box IP Address # # This is the IP address that your host will communicate to the guest through. In the # case of the default `192.168.50.4` that we've provided, Virtualbox will setup another # network adapter on your host machine with the IP `192.168.50.1` as a gateway. # # If you are already on a network using the 192.168.50.x subnet, this should be changed. # If you are running more than one VM through Virtualbox, different subnets should be used # for those as well. This includes other Vagrant boxes. config.vm.network :private_network, ip: "192.168.50.4"
  • 18. # /srv/database/ # # If a database directory exists in the same directory as your Vagrantfile, # a mapped directory inside the VM will be created that contains these files. # This directory is used to maintain default database scripts as well as backed # up mysql dumps (SQL files) that are to be imported automatically on vagrant up config.vm.synced_folder "database/", "/srv/database" config.vm.synced_folder "database/data/", "/var/lib/mysql", :mount_options => [ "dmode=777", "fmode=777" ] # /srv/config/ # # If a server-conf directory exists in the same directory as your Vagrantfile, # a mapped directory inside the VM will be created that contains these files. # This directory is currently used to maintain various config files for php and # nginx as well as any pre-existing database files. config.vm.synced_folder "config/", "/srv/config" # /srv/config/nginx-config/sites/ # # If a sites directory exists inside the above server-conf directory, it will be # added as a mapped directory inside the VM as well. This is used to maintain specific # site configuration files for nginx config.vm.synced_folder "config/nginx-config/sites/", "/etc/nginx/custom-sites" # /srv/www/ # # If a www directory exists in the same directory as your Vagrantfile, a mapped directory # inside the VM will be created that acts as the default location for nginx sites. Put all # of your project files here that you want to access through the web server config.vm.synced_folder "www/", "/srv/www/", :owner => "www-data", :mount_options => [ "dmode=775", "fmode=774" ]
  • 19. # Provisioning # # Process one or more provisioning scripts depending on the existence of custom files. # # provison-pre.sh acts as a pre-hook to our default provisioning script. Anything that # should run before the shell commands laid out in provision.sh (or your provision-custom.sh # file) should go in this script. If it does not exist, no extra provisioning will run. if File.exists?(File.join(vagrant_dir,'provision','provision-pre.sh')) then config.vm.provision :shell, :path => File.join( "provision", "provision-pre.sh" ) end # provision.sh or provision-custom.sh # # By default, Vagrantfile is set to use the provision.sh bash script located in the # provision directory. If it is detected that a provision-custom.sh script has been # created, that is run as a replacement. This is an opportunity to replace the entirety # of the provisioning provided by default. if File.exists?(File.join(vagrant_dir,'provision','provision-custom.sh')) then config.vm.provision :shell, :path => File.join( "provision", "provision-custom.sh" ) else config.vm.provision :shell, :path => File.join( "provision", "provision.sh" ) end # provision-post.sh acts as a post-hook to the default provisioning. Anything that should # run after the shell commands laid out in provision.sh or provision-custom.sh should be # put into this file. This provides a good opportunity to install additional packages # without having to replace the entire default provisioning script. if File.exists?(File.join(vagrant_dir,'provision','provision-post.sh')) then config.vm.provision :shell, :path => File.join( "provision", "provision-post.sh" ) end end
  • 20. # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant::Config.run do |config| config.vm.box = "precise64" config.vm.box_url = "http://files.vagrantup.com/precise64.box" config.vm.network :hostonly, "33.33.33.10" config.vm.share_folder("vagrant-root", "/vagrant", ".", :nfs => true) config.vm.provision :puppet do |puppet| puppet.manifests_path = "puppet/manifests" puppet.module_path = "puppet/modules" puppet.options = ['--verbose'] end end “:nfs => true” needed for Mac Source: https://github.com/MikeRogers0/vagrant-nginx-wordpress-puppet/blob/master/Vagrantfile
  • 21. Vagrant Commands Vagrant up ◦ Start Vagrant Suspend / resume ◦ pause/play Vagrant halt ◦ turn off Vagrant destroy ◦ wipeout Vagrant status ◦ is it up Vagrant int ◦ create empty config file Vagrant box ◦ manage
  • 22. C:WindowsSystem32driversetchosts 192.168.50.4 local.wordpress.dev local.wordpress-trunk.dev src.wordpress-develop.dev build.wordpress-develop.dev Windows 8 - need to unprotect host in window defender sudo sh -c 'echo "192.168.50.4 local.wordpress.dev local.wordpress-trunk.dev src.wordpress-develop.dev build.wordpress-develop.dev" >>/private/etc/hosts'
  • 23. Notes and links Use: shell or bat to run vagrant ◦ cd varying-vagrant-vagrants ◦ start cmd.exe /k "vagrant up --no-provision“ Use different config files per site http://www.vagrantup.com/ https://www.virtualbox.org/wiki/Downloads
  • 24. Other tools http://www.packer.io/ a tool for creating identical machine images for multiple platforms from a single source configuration including vagrant images. http://livereload.com/ to auto refresh web page on save. http://puppetlabs.com/ home of puppet - http://forge.puppetlabs.com/apowers/wordpress