SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Ansible presentation
Ansible presentationAnsible presentation
Ansible presentationKumar Y
 
Vagrant 101 Workshop
Vagrant 101 WorkshopVagrant 101 Workshop
Vagrant 101 WorkshopLiora Milbaum
 
Kubernetes #1 intro
Kubernetes #1   introKubernetes #1   intro
Kubernetes #1 introTerry Cho
 
Introduction to ansible
Introduction to ansibleIntroduction to ansible
Introduction to ansibleOmid Vahdaty
 
Gitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueGitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueVincent Composieux
 
Linux Training For Beginners | Linux Administration Tutorial | Introduction T...
Linux Training For Beginners | Linux Administration Tutorial | Introduction T...Linux Training For Beginners | Linux Administration Tutorial | Introduction T...
Linux Training For Beginners | Linux Administration Tutorial | Introduction T...Edureka!
 
Continuous Integration/Deployment with Gitlab CI
Continuous Integration/Deployment with Gitlab CIContinuous Integration/Deployment with Gitlab CI
Continuous Integration/Deployment with Gitlab CIDavid Hahn
 
IT Automation with Ansible
IT Automation with AnsibleIT Automation with Ansible
IT Automation with AnsibleRayed Alrashed
 
svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드Insub Lee
 
Intégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsIntégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsKokou Gaglo
 
What Is Ansible? | How Ansible Works? | Ansible Tutorial For Beginners | DevO...
What Is Ansible? | How Ansible Works? | Ansible Tutorial For Beginners | DevO...What Is Ansible? | How Ansible Works? | Ansible Tutorial For Beginners | DevO...
What Is Ansible? | How Ansible Works? | Ansible Tutorial For Beginners | DevO...Simplilearn
 
Introduction to Ansible
Introduction to AnsibleIntroduction to Ansible
Introduction to AnsibleCoreStack
 
Docker Introduction
Docker IntroductionDocker Introduction
Docker IntroductionPeng Xiao
 
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandCI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandTroublemaker Khunpech
 

Tendances (20)

Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
 
Jenkins Automation
Jenkins AutomationJenkins Automation
Jenkins Automation
 
Vagrant 101 Workshop
Vagrant 101 WorkshopVagrant 101 Workshop
Vagrant 101 Workshop
 
Kubernetes #1 intro
Kubernetes #1   introKubernetes #1   intro
Kubernetes #1 intro
 
Introduction to ansible
Introduction to ansibleIntroduction to ansible
Introduction to ansible
 
Ansible - Introduction
Ansible - IntroductionAnsible - Introduction
Ansible - Introduction
 
Gitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueGitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement Continue
 
Gitlab ci-cd
Gitlab ci-cdGitlab ci-cd
Gitlab ci-cd
 
Linux Training For Beginners | Linux Administration Tutorial | Introduction T...
Linux Training For Beginners | Linux Administration Tutorial | Introduction T...Linux Training For Beginners | Linux Administration Tutorial | Introduction T...
Linux Training For Beginners | Linux Administration Tutorial | Introduction T...
 
Continuous Integration/Deployment with Gitlab CI
Continuous Integration/Deployment with Gitlab CIContinuous Integration/Deployment with Gitlab CI
Continuous Integration/Deployment with Gitlab CI
 
IT Automation with Ansible
IT Automation with AnsibleIT Automation with Ansible
IT Automation with Ansible
 
svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드
 
Jenkins tutorial
Jenkins tutorialJenkins tutorial
Jenkins tutorial
 
Intégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsIntégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec Jenkins
 
What Is Ansible? | How Ansible Works? | Ansible Tutorial For Beginners | DevO...
What Is Ansible? | How Ansible Works? | Ansible Tutorial For Beginners | DevO...What Is Ansible? | How Ansible Works? | Ansible Tutorial For Beginners | DevO...
What Is Ansible? | How Ansible Works? | Ansible Tutorial For Beginners | DevO...
 
Introduction to Ansible
Introduction to AnsibleIntroduction to Ansible
Introduction to Ansible
 
Docker Introduction
Docker IntroductionDocker Introduction
Docker Introduction
 
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandCI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
 
Ansible
AnsibleAnsible
Ansible
 
Powershell Demo Presentation
Powershell Demo PresentationPowershell Demo Presentation
Powershell Demo Presentation
 

Similaire à 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
 

Similaire à 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
 

Dernier

Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 

Dernier (20)

Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 

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