SlideShare una empresa de Scribd logo
1 de 37
Descargar para leer sin conexión
Introduction to Vagrant
      Marcelo Correia Pinheiro
Friday, 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 box




Friday, 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> # virtualbox




Friday, 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
             # ...
           end




Friday, March 29, 13
How I start to use it?

                Simply run this command:



           $ vagrant up




Friday, March 29, 13
How I connect to it?

                Easy:



           $ vagrant ssh




Friday, March 29, 13
How I stop it?

                Easy:



           $ vagrant halt




Friday, March 29, 13
How I restart it?

                Easy:



           $ vagrant reload




Friday, 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

             # ...
           end



Friday, 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

             # ...
           end




Friday, 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 bash




Friday, 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

             # ...
           end

Friday, 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/cookbooks




Friday, 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

             # ...
           end


Friday, 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.deb




Friday, 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

             # ...
           end



Friday, 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 required




Friday, 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

             # ...
           end


Friday, 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 provision




Friday, 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 provider


Friday, 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.com




Friday, 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 it



Friday, 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 xorg




Friday, March 29, 13
Creating a custom box

                Post-installation steps:
                       Run VirtualBox Guest Additions installer:



           # mount /media/cdrom
           # sh /media/cdrom/VBoxLinuxAdditions.run




Friday, 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> virtualbox




Friday, 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 Plugin




Friday, 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 loading


Friday, March 29, 13
FAQ Time



                It’s time to make a question! :)




Friday, March 29, 13
Thank you! :)




Friday, March 29, 13

Más contenido relacionado

La actualidad más candente

OpenNMS - My Notes
OpenNMS - My NotesOpenNMS - My Notes
OpenNMS - My Notesashrawi92
 
CloudStack and cloud-init
CloudStack and cloud-initCloudStack and cloud-init
CloudStack and cloud-initMarcusS13
 
Introduction to Ansible
Introduction to AnsibleIntroduction to Ansible
Introduction to AnsibleCoreStack
 
Getting Started - Ansible Galaxy NG
Getting Started - Ansible Galaxy NGGetting Started - Ansible Galaxy NG
Getting Started - Ansible Galaxy NGHideki Saito
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentationSuresh Kumar
 
Introduction To Power Shell
Introduction To Power ShellIntroduction To Power Shell
Introduction To Power ShellIvan Suhinin
 
Build automated Machine Images using Packer
Build automated Machine Images using PackerBuild automated Machine Images using Packer
Build automated Machine Images using PackerMarek Piątek
 
Introduction to ansible
Introduction to ansibleIntroduction to ansible
Introduction to ansibleOmid Vahdaty
 
NGINX: Basics and Best Practices
NGINX: Basics and Best PracticesNGINX: Basics and Best Practices
NGINX: Basics and Best PracticesNGINX, Inc.
 
Infrastructure testing with Molecule and TestInfra
Infrastructure testing with Molecule and TestInfraInfrastructure testing with Molecule and TestInfra
Infrastructure testing with Molecule and TestInfraTomislav Plavcic
 
Virtualization - Kernel Virtual Machine (KVM)
Virtualization - Kernel Virtual Machine (KVM)Virtualization - Kernel Virtual Machine (KVM)
Virtualization - Kernel Virtual Machine (KVM)Wan Leung Wong
 
Ansible, best practices
Ansible, best practicesAnsible, best practices
Ansible, best practicesBas Meijer
 
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기Ian Choi
 
[오픈소스컨설팅]Ansible overview
[오픈소스컨설팅]Ansible overview[오픈소스컨설팅]Ansible overview
[오픈소스컨설팅]Ansible overviewOpen Source Consulting
 

La actualidad más candente (20)

OpenNMS - My Notes
OpenNMS - My NotesOpenNMS - My Notes
OpenNMS - My Notes
 
Proxmox for DevOps
Proxmox for DevOpsProxmox for DevOps
Proxmox for DevOps
 
CloudStack and cloud-init
CloudStack and cloud-initCloudStack and cloud-init
CloudStack and cloud-init
 
Introduction to Ansible
Introduction to AnsibleIntroduction to Ansible
Introduction to Ansible
 
Jenkins CI presentation
Jenkins CI presentationJenkins CI presentation
Jenkins CI presentation
 
Getting Started - Ansible Galaxy NG
Getting Started - Ansible Galaxy NGGetting Started - Ansible Galaxy NG
Getting Started - Ansible Galaxy NG
 
Sockets and Socket-Buffer
Sockets and Socket-BufferSockets and Socket-Buffer
Sockets and Socket-Buffer
 
Ansible 101
Ansible 101Ansible 101
Ansible 101
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
 
Ansible
AnsibleAnsible
Ansible
 
Introduction To Power Shell
Introduction To Power ShellIntroduction To Power Shell
Introduction To Power Shell
 
Build automated Machine Images using Packer
Build automated Machine Images using PackerBuild automated Machine Images using Packer
Build automated Machine Images using Packer
 
Nginx Essential
Nginx EssentialNginx Essential
Nginx Essential
 
Introduction to ansible
Introduction to ansibleIntroduction to ansible
Introduction to ansible
 
NGINX: Basics and Best Practices
NGINX: Basics and Best PracticesNGINX: Basics and Best Practices
NGINX: Basics and Best Practices
 
Infrastructure testing with Molecule and TestInfra
Infrastructure testing with Molecule and TestInfraInfrastructure testing with Molecule and TestInfra
Infrastructure testing with Molecule and TestInfra
 
Virtualization - Kernel Virtual Machine (KVM)
Virtualization - Kernel Virtual Machine (KVM)Virtualization - Kernel Virtual Machine (KVM)
Virtualization - Kernel Virtual Machine (KVM)
 
Ansible, best practices
Ansible, best practicesAnsible, best practices
Ansible, best practices
 
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
 
[오픈소스컨설팅]Ansible overview
[오픈소스컨설팅]Ansible overview[오픈소스컨설팅]Ansible overview
[오픈소스컨설팅]Ansible overview
 

Similar a Introduction to Vagrant

Quick & Easy Dev Environments with Vagrant
Quick & Easy Dev Environments with VagrantQuick & Easy Dev Environments with Vagrant
Quick & Easy Dev Environments with VagrantJoe Ferguson
 
Create Development and Production Environments with Vagrant
Create Development and Production Environments with VagrantCreate Development and Production Environments with Vagrant
Create Development and Production Environments with VagrantBrian Hogan
 
Vagrant - Version control your dev environment
Vagrant - Version control your dev environmentVagrant - Version control your dev environment
Vagrant - Version control your dev environmentbocribbz
 
Create your very own Development Environment with Vagrant and Packer
Create your very own Development Environment with Vagrant and PackerCreate your very own Development Environment with Vagrant and Packer
Create your very own Development Environment with Vagrant and Packerfrastel
 
Minicurso de Vagrant
Minicurso de VagrantMinicurso de Vagrant
Minicurso de VagrantLeandro Nunes
 
Capifony. Minsk PHP MeetUp #11
Capifony. Minsk PHP MeetUp #11Capifony. Minsk PHP MeetUp #11
Capifony. Minsk PHP MeetUp #11Yury Pliashkou
 
DevOpsDays Amsterdam Cosmic workshop
DevOpsDays Amsterdam Cosmic workshopDevOpsDays Amsterdam Cosmic workshop
DevOpsDays Amsterdam Cosmic workshopRemi Bergsma
 
Vagrant step-by-step guide for Beginners
Vagrant step-by-step guide for BeginnersVagrant step-by-step guide for Beginners
Vagrant step-by-step guide for BeginnersSagar Acharya
 
Setup a Dev environment that feels like $HOME on Windows 10
Setup a Dev environment that feels like $HOME on Windows 10Setup a Dev environment that feels like $HOME on Windows 10
Setup a Dev environment that feels like $HOME on Windows 10Stefan Scherer
 
Forget MAMP and WAMP, Use Virtual Box to Have a Real Ubuntu Server
Forget MAMP and WAMP, Use Virtual Box to Have a Real Ubuntu ServerForget MAMP and WAMP, Use Virtual Box to Have a Real Ubuntu Server
Forget MAMP and WAMP, Use Virtual Box to Have a Real Ubuntu Serveraaroncouch
 
Virtualization for Developers
Virtualization for DevelopersVirtualization for Developers
Virtualization for DevelopersJohn Coggeshall
 
macos installation automation
macos installation automationmacos installation automation
macos installation automationJon Fuller
 
Virtualization for Developers
Virtualization for DevelopersVirtualization for Developers
Virtualization for DevelopersJohn Coggeshall
 
Your own minecraft server on a linode vps
Your own minecraft server on a linode vpsYour own minecraft server on a linode vps
Your own minecraft server on a linode vpsCleo Morisson
 
Software Defined Datacenter
Software Defined DatacenterSoftware Defined Datacenter
Software Defined DatacenterNETWAYS
 

Similar a Introduction to Vagrant (20)

Quick & Easy Dev Environments with Vagrant
Quick & Easy Dev Environments with VagrantQuick & Easy Dev Environments with Vagrant
Quick & Easy Dev Environments with Vagrant
 
Create Development and Production Environments with Vagrant
Create Development and Production Environments with VagrantCreate Development and Production Environments with Vagrant
Create Development and Production Environments with Vagrant
 
Vagrant - Version control your dev environment
Vagrant - Version control your dev environmentVagrant - Version control your dev environment
Vagrant - Version control your dev environment
 
Tech Talk - Vagrant
Tech Talk - VagrantTech Talk - Vagrant
Tech Talk - Vagrant
 
vagrant-php
vagrant-phpvagrant-php
vagrant-php
 
Create your very own Development Environment with Vagrant and Packer
Create your very own Development Environment with Vagrant and PackerCreate your very own Development Environment with Vagrant and Packer
Create your very own Development Environment with Vagrant and Packer
 
Minicurso de Vagrant
Minicurso de VagrantMinicurso de Vagrant
Minicurso de Vagrant
 
Capifony. Minsk PHP MeetUp #11
Capifony. Minsk PHP MeetUp #11Capifony. Minsk PHP MeetUp #11
Capifony. Minsk PHP MeetUp #11
 
DevOpsDays Amsterdam Cosmic workshop
DevOpsDays Amsterdam Cosmic workshopDevOpsDays Amsterdam Cosmic workshop
DevOpsDays Amsterdam Cosmic workshop
 
Vagrant step-by-step guide for Beginners
Vagrant step-by-step guide for BeginnersVagrant step-by-step guide for Beginners
Vagrant step-by-step guide for Beginners
 
Docker
DockerDocker
Docker
 
Setup a Dev environment that feels like $HOME on Windows 10
Setup a Dev environment that feels like $HOME on Windows 10Setup a Dev environment that feels like $HOME on Windows 10
Setup a Dev environment that feels like $HOME on Windows 10
 
Intro to vagrant
Intro to vagrantIntro to vagrant
Intro to vagrant
 
Forget MAMP and WAMP, Use Virtual Box to Have a Real Ubuntu Server
Forget MAMP and WAMP, Use Virtual Box to Have a Real Ubuntu ServerForget MAMP and WAMP, Use Virtual Box to Have a Real Ubuntu Server
Forget MAMP and WAMP, Use Virtual Box to Have a Real Ubuntu Server
 
Virtualization for Developers
Virtualization for DevelopersVirtualization for Developers
Virtualization for Developers
 
macos installation automation
macos installation automationmacos installation automation
macos installation automation
 
Vagrant and chef
Vagrant and chefVagrant and chef
Vagrant and chef
 
Virtualization for Developers
Virtualization for DevelopersVirtualization for Developers
Virtualization for Developers
 
Your own minecraft server on a linode vps
Your own minecraft server on a linode vpsYour own minecraft server on a linode vps
Your own minecraft server on a linode vps
 
Software Defined Datacenter
Software Defined DatacenterSoftware Defined Datacenter
Software Defined Datacenter
 

Último

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 

Último (20)

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 

Introduction to Vagrant

  • 1. Introduction to Vagrant Marcelo Correia Pinheiro Friday, March 29, 13
  • 4. 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
  • 5. How I install Vagrant? Get VirtualBox first Download installer on Vagrant site (Debian, CentOS, Windows, OSX, other OS’s) Get a Vagrant box Friday, March 29, 13
  • 6. 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
  • 7. How I add a box? Great box repository: www.vagrantbox.es Run this command: $ vagrant box add <name> <url> <provider> # virtualbox Friday, March 29, 13
  • 8. How I create a environment? Inside your project, create a Vagrantfile: $ vagrant init <your box name> Friday, March 29, 13
  • 9. 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 # ... end Friday, March 29, 13
  • 10. How I start to use it? Simply run this command: $ vagrant up Friday, March 29, 13
  • 11. How I connect to it? Easy: $ vagrant ssh Friday, March 29, 13
  • 12. How I stop it? Easy: $ vagrant halt Friday, March 29, 13
  • 13. How I restart it? Easy: $ vagrant reload Friday, March 29, 13
  • 14. 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 # ... end Friday, March 29, 13
  • 15. 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 # ... end Friday, March 29, 13
  • 16. 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
  • 17. 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 bash Friday, March 29, 13
  • 18. 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 # ... end Friday, March 29, 13
  • 19. 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/cookbooks Friday, March 29, 13
  • 20. 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 # ... end Friday, March 29, 13
  • 21. 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.deb Friday, March 29, 13
  • 22. 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 # ... end Friday, March 29, 13
  • 23. Using Puppet Apply Write Puppet manifest with all software that your app needs Depending of what you need, some additional configuration is required Friday, March 29, 13
  • 24. 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 # ... end Friday, March 29, 13
  • 25. 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
  • 26. Installing software Easy: $ vagrant provision Friday, March 29, 13
  • 27. 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 provider Friday, March 29, 13
  • 28. 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.com Friday, March 29, 13
  • 29. 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 it Friday, March 29, 13
  • 30. 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
  • 31. 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 xorg Friday, March 29, 13
  • 32. Creating a custom box Post-installation steps: Run VirtualBox Guest Additions installer: # mount /media/cdrom # sh /media/cdrom/VBoxLinuxAdditions.run Friday, March 29, 13
  • 33. 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> virtualbox Friday, March 29, 13
  • 34. 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 Plugin Friday, March 29, 13
  • 35. 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 loading Friday, March 29, 13
  • 36. FAQ Time It’s time to make a question! :) Friday, March 29, 13
  • 37. Thank you! :) Friday, March 29, 13