SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Présentation de Vagrant
Présentation de VagrantPrésentation de Vagrant
Présentation de Vagrantclmntlxndr
 
Ansible Introduction
Ansible Introduction Ansible Introduction
Ansible Introduction Robert Reiz
 
OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)Ian Choi
 
DevOps Meetup ansible
DevOps Meetup   ansibleDevOps Meetup   ansible
DevOps Meetup ansiblesriram_rajan
 
An Introduction To Jenkins
An Introduction To JenkinsAn Introduction To Jenkins
An Introduction To JenkinsKnoldus Inc.
 
Introduction to Ansible
Introduction to AnsibleIntroduction to Ansible
Introduction to AnsibleKnoldus Inc.
 
Docker Networking - Common Issues and Troubleshooting Techniques
Docker Networking - Common Issues and Troubleshooting TechniquesDocker Networking - Common Issues and Troubleshooting Techniques
Docker Networking - Common Issues and Troubleshooting TechniquesSreenivas Makam
 
Nicolas Vazquez - Open vSwitch with DPDK on CloudStack
Nicolas Vazquez - Open vSwitch with DPDK on CloudStackNicolas Vazquez - Open vSwitch with DPDK on CloudStack
Nicolas Vazquez - Open vSwitch with DPDK on CloudStackShapeBlue
 
An Introduction to Kubernetes
An Introduction to KubernetesAn Introduction to Kubernetes
An Introduction to KubernetesImesh Gunaratne
 
Getting started with Ansible
Getting started with AnsibleGetting started with Ansible
Getting started with AnsibleIvan Serdyuk
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub ActionsKnoldus Inc.
 
What's Coming in CloudStack 4.19
What's Coming in CloudStack 4.19What's Coming in CloudStack 4.19
What's Coming in CloudStack 4.19ShapeBlue
 
KVM tools and enterprise usage
KVM tools and enterprise usageKVM tools and enterprise usage
KVM tools and enterprise usagevincentvdk
 
Introduction to Ansible
Introduction to AnsibleIntroduction to Ansible
Introduction to AnsibleCoreStack
 
Alphorm.com Formation Ansible : Le Guide Complet du Débutant
Alphorm.com Formation Ansible : Le Guide Complet du DébutantAlphorm.com Formation Ansible : Le Guide Complet du Débutant
Alphorm.com Formation Ansible : Le Guide Complet du DébutantAlphorm
 

Mais procurados (20)

Jenkins CI
Jenkins CIJenkins CI
Jenkins CI
 
Présentation de Vagrant
Présentation de VagrantPrésentation de Vagrant
Présentation de Vagrant
 
Jenkins Overview
Jenkins OverviewJenkins Overview
Jenkins Overview
 
Ansible Introduction
Ansible Introduction Ansible Introduction
Ansible Introduction
 
Introduce to Terraform
Introduce to TerraformIntroduce to Terraform
Introduce to Terraform
 
OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)
 
ansible why ?
ansible why ?ansible why ?
ansible why ?
 
DevOps Meetup ansible
DevOps Meetup   ansibleDevOps Meetup   ansible
DevOps Meetup ansible
 
An Introduction To Jenkins
An Introduction To JenkinsAn Introduction To Jenkins
An Introduction To Jenkins
 
Introduction to Ansible
Introduction to AnsibleIntroduction to Ansible
Introduction to Ansible
 
Docker Networking - Common Issues and Troubleshooting Techniques
Docker Networking - Common Issues and Troubleshooting TechniquesDocker Networking - Common Issues and Troubleshooting Techniques
Docker Networking - Common Issues and Troubleshooting Techniques
 
Nicolas Vazquez - Open vSwitch with DPDK on CloudStack
Nicolas Vazquez - Open vSwitch with DPDK on CloudStackNicolas Vazquez - Open vSwitch with DPDK on CloudStack
Nicolas Vazquez - Open vSwitch with DPDK on CloudStack
 
An Introduction to Kubernetes
An Introduction to KubernetesAn Introduction to Kubernetes
An Introduction to Kubernetes
 
Docker & kubernetes
Docker & kubernetesDocker & kubernetes
Docker & kubernetes
 
Getting started with Ansible
Getting started with AnsibleGetting started with Ansible
Getting started with Ansible
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
 
What's Coming in CloudStack 4.19
What's Coming in CloudStack 4.19What's Coming in CloudStack 4.19
What's Coming in CloudStack 4.19
 
KVM tools and enterprise usage
KVM tools and enterprise usageKVM tools and enterprise usage
KVM tools and enterprise usage
 
Introduction to Ansible
Introduction to AnsibleIntroduction to Ansible
Introduction to Ansible
 
Alphorm.com Formation Ansible : Le Guide Complet du Débutant
Alphorm.com Formation Ansible : Le Guide Complet du DébutantAlphorm.com Formation Ansible : Le Guide Complet du Débutant
Alphorm.com Formation Ansible : Le Guide Complet du Débutant
 

Semelhante 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
 

Semelhante 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

Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
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
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
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
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
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
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
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
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 

Último (20)

Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
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
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
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
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
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
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 

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