Upload
bocribbz
View
1.428
Download
0
Embed Size (px)
DESCRIPTION
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
Citation preview
VagrantVersion control your dev environment
Bob Cribbs
Bob Cribbs
Software developer.Focused mainly on Python, junior on Ruby and getting started with mobile.
bocribbz.com
bocribbz bocribbz
bocribbzbocribbz
bocribbz
www.vagrantup.com
Development environments
made easy.
Brasov Tech Meet | September 2013
You’re hired. Get the project up and running on your new machine.newguy$ git clone git://path-to-code-repo/super_project.gitCloning into super_projectnewguy$ cd super_project
newguy$ ...
newguy$ ./start.shServer listening on 127.0.0.1
newguy$ ./setup.shInstalling software.Installing dependencies.Configuring.Success!
We have a setup script!
We have a setup script!
● multiple ecosystems Win/Linux/MacOS
● multiple package managers yum, apt, home-
brew, 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.shFailed to connect to MySql at localhost:3333newguy$ install mysql
newguy$ start.shFailed to connect to Redis at localhost:3334newguy$ install redis
newguy$ start.shMissing ImageMagick extensions.newguy$ install imagemagick
newguy$ start.shServer 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!
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
Vagrant
Problems solved
Repeatableyou can do the exact same thing when needed
Verifiably correctyou should have automation to check this
Isolatedits in a virtual machine (Vbox, VMWare, etc.)
UnderstandableYou can read it to understand
Fast(er)It still takes some time, but it is much faster
Boxestemplates for creating a machine, preinstalled OS
Some Terms
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
Boxestemplates for creating a machine, preinstalled OS
Vagrantfileconfiguration read by vagrant to create your machine
Vagrantfile samplesVagrant.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
Boxestemplates for creating a machine, preinstalled OS
Vagrantfileconfiguration read by vagrant to create your machine
"vagrant" commandmanages 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
newguy$ git clone git://path-to-code-repo/super_project.gitCloning into super_projectnewguy$ cd super_project
newguy$ vagrant up
You’re hired. Get the project up and running on your new machine.
Overview
1. Project specific configuration file
2. Import base box
3. Boot up virtual machinea. 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 foldersVMWare shared folderrsync (for AWS)etc...
Synced Folders configVagrant.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 forwardingHost-Only: private networkBridge: act like a new device on the router/network
Networking configVagrant.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.
BerkshelfCreate and manage cookbooks that install and configure software dependencies.ChefAutomation platform and nodes manager.Transforms infrastructure into code.
Provisioning configsVagrant.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
Examplehttps://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!