SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

promgen - prometheus managemnet tool / simpleclient_java hacks @ Prometheus c...
promgen - prometheus managemnet tool / simpleclient_java hacks @ Prometheus c...promgen - prometheus managemnet tool / simpleclient_java hacks @ Prometheus c...
promgen - prometheus managemnet tool / simpleclient_java hacks @ Prometheus c...Tokuhiro Matsuno
 
[오픈소스컨설팅]Ansible overview
[오픈소스컨설팅]Ansible overview[오픈소스컨설팅]Ansible overview
[오픈소스컨설팅]Ansible overviewOpen Source Consulting
 
NGINX ADC: Basics and Best Practices – EMEA
NGINX ADC: Basics and Best Practices – EMEANGINX ADC: Basics and Best Practices – EMEA
NGINX ADC: Basics and Best Practices – EMEANGINX, Inc.
 
Hypervisor seminar
Hypervisor seminarHypervisor seminar
Hypervisor seminar용환 노
 
An Introduction to Vuejs
An Introduction to VuejsAn Introduction to Vuejs
An Introduction to VuejsPaddy Lock
 
Janus SFU cascading @ IIT-RTC 2022
Janus SFU cascading @ IIT-RTC 2022Janus SFU cascading @ IIT-RTC 2022
Janus SFU cascading @ IIT-RTC 2022Lorenzo Miniero
 
Virtualization - Kernel Virtual Machine (KVM)
Virtualization - Kernel Virtual Machine (KVM)Virtualization - Kernel Virtual Machine (KVM)
Virtualization - Kernel Virtual Machine (KVM)Wan Leung Wong
 
introduction to Vue.js 3
introduction to Vue.js 3 introduction to Vue.js 3
introduction to Vue.js 3 ArezooKmn
 
[KubeCon EU 2022] Running containerd and k3s on macOS
[KubeCon EU 2022] Running containerd and k3s on macOS[KubeCon EU 2022] Running containerd and k3s on macOS
[KubeCon EU 2022] Running containerd and k3s on macOSAkihiro Suda
 
Red Hat OpenStack 17 저자직강+스터디그룹_1주차
Red Hat OpenStack 17 저자직강+스터디그룹_1주차Red Hat OpenStack 17 저자직강+스터디그룹_1주차
Red Hat OpenStack 17 저자직강+스터디그룹_1주차Nalee Jang
 
Volume Encryption In CloudStack
Volume Encryption In CloudStackVolume Encryption In CloudStack
Volume Encryption In CloudStackShapeBlue
 
Terraform 0.12 + Terragrunt
Terraform 0.12 + TerragruntTerraform 0.12 + Terragrunt
Terraform 0.12 + TerragruntAnton Babenko
 
oVirt installation guide_v4.3
oVirt installation guide_v4.3oVirt installation guide_v4.3
oVirt installation guide_v4.3CheolHee Han
 
The Point of Vue - Intro to Vue.js
The Point of Vue - Intro to Vue.jsThe Point of Vue - Intro to Vue.js
The Point of Vue - Intro to Vue.jsHolly Schinsky
 

Was ist angesagt? (20)

Automating with Ansible
Automating with AnsibleAutomating with Ansible
Automating with Ansible
 
promgen - prometheus managemnet tool / simpleclient_java hacks @ Prometheus c...
promgen - prometheus managemnet tool / simpleclient_java hacks @ Prometheus c...promgen - prometheus managemnet tool / simpleclient_java hacks @ Prometheus c...
promgen - prometheus managemnet tool / simpleclient_java hacks @ Prometheus c...
 
[오픈소스컨설팅]Ansible overview
[오픈소스컨설팅]Ansible overview[오픈소스컨설팅]Ansible overview
[오픈소스컨설팅]Ansible overview
 
Nginx Essential
Nginx EssentialNginx Essential
Nginx Essential
 
NGINX ADC: Basics and Best Practices – EMEA
NGINX ADC: Basics and Best Practices – EMEANGINX ADC: Basics and Best Practices – EMEA
NGINX ADC: Basics and Best Practices – EMEA
 
Hypervisor seminar
Hypervisor seminarHypervisor seminar
Hypervisor seminar
 
Packer by HashiCorp
Packer by HashiCorpPacker by HashiCorp
Packer by HashiCorp
 
An Introduction to Vuejs
An Introduction to VuejsAn Introduction to Vuejs
An Introduction to Vuejs
 
Janus SFU cascading @ IIT-RTC 2022
Janus SFU cascading @ IIT-RTC 2022Janus SFU cascading @ IIT-RTC 2022
Janus SFU cascading @ IIT-RTC 2022
 
Kubernetes workshop
Kubernetes workshopKubernetes workshop
Kubernetes workshop
 
Virtualization - Kernel Virtual Machine (KVM)
Virtualization - Kernel Virtual Machine (KVM)Virtualization - Kernel Virtual Machine (KVM)
Virtualization - Kernel Virtual Machine (KVM)
 
Intro to docker
Intro to dockerIntro to docker
Intro to docker
 
introduction to Vue.js 3
introduction to Vue.js 3 introduction to Vue.js 3
introduction to Vue.js 3
 
[KubeCon EU 2022] Running containerd and k3s on macOS
[KubeCon EU 2022] Running containerd and k3s on macOS[KubeCon EU 2022] Running containerd and k3s on macOS
[KubeCon EU 2022] Running containerd and k3s on macOS
 
Red Hat OpenStack 17 저자직강+스터디그룹_1주차
Red Hat OpenStack 17 저자직강+스터디그룹_1주차Red Hat OpenStack 17 저자직강+스터디그룹_1주차
Red Hat OpenStack 17 저자직강+스터디그룹_1주차
 
Volume Encryption In CloudStack
Volume Encryption In CloudStackVolume Encryption In CloudStack
Volume Encryption In CloudStack
 
Terraform 0.12 + Terragrunt
Terraform 0.12 + TerragruntTerraform 0.12 + Terragrunt
Terraform 0.12 + Terragrunt
 
oVirt installation guide_v4.3
oVirt installation guide_v4.3oVirt installation guide_v4.3
oVirt installation guide_v4.3
 
The Point of Vue - Intro to Vue.js
The Point of Vue - Intro to Vue.jsThe Point of Vue - Intro to Vue.js
The Point of Vue - Intro to Vue.js
 
Vagrant - Concept
Vagrant - ConceptVagrant - Concept
Vagrant - Concept
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Kürzlich hochgeladen

Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructureitnewsafrica
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsYoss Cohen
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxAna-Maria Mihalceanu
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...BookNet Canada
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFMichael Gough
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 

Kürzlich hochgeladen (20)

Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platforms
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance Toolbox
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDF
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 

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