Skip to main content

Vagrant e você, tudo a ver

Uma das coisas mais legais que aprendi nos últimos meses foi adicionar Vagrant no meu dia-a-dia de desenvolvimento.
Hoje os meus primeiros passos para começar um projeto [green field] são:
mkdir
git init
vagrant init ubuntu/trusty64

 O que é?

Camadas
Vagrant é uma camada que facilita, MUITO, a interação com máquinas virtuais. Ele funciona falando diretamente com o seu gerenciador de máquina virtual (comumente chamados de Hypervisor). Com vagrant você consegue subir uma máquina virtual sem nem abrir o Virtual Box, por exemplo.

Providers

Para o Vagrant o Virtual Box é um provider.
Virtual box é o provider padrão do Vagrant, ou seja, para subir uma VM virtual box com vagrant você não precisa fazer nada. Para subir uma VM VMWare você precisa instalar um plugin.

Requisitos

Como você pode imaginar tem um hypervisor instalado é um dos pré-prequisitos para usar vagrant na sua máquina.

Benefícios

Essa parte é interessante...
Existe uma variedade de tecnologias que eu uso atualmente. A saber:
  • Octave, Python e R para os projetos de Big Data e Machine Learning
  • [Ruby|Python], ImageMagik e [Postgres|MySQL] para projetos [RoR no heroku|django]
  • Java + [Tomcat|JBoss|Jetty] para projetos Java
  • Imagine outra tech stack que possa sugir aqui...
 Eu tenho apenas um computador para desenvolver. Se eu fosse instalar todos os softwares necessários diretamente no meu laptop, tenho certeza que eu teria problemas de compatibilidade, além da lentidão que meu ambiente ia ficar (imagine ter um postgres e mysql rodando na minha maquina o tempo todo).
Com Vagrant o que eu faço é criar uma máquina virtual para cada projeto e nessa máquina instalo os softwares necessários para minha app rodar, mantendo diretamente no meu laptop apenas código fonte e editor.
Por exemplo, para uma aplicação java eu deixo o maven, tomcat e banco de dados rodando dentro da VM enquanto no meu laptop ficaria apenas o eclipse.
Em projetos Ruby on Rails eu instalo Image Magik, editor, RVM e PostgreSQL na VM, deixando apenas o código fonte no meu laptop.

Vagrantfile

A maneira mais simples de iniciar o uso de vagrant em um novo projeto é executar o comando:
vagrant init
Esse comando vai criar um arquivo chamado Vagrantfile no seu diretório atual, é através desse arquivo que você configura como o vagrant deve te prover a máquina virtual.

Como configurar os ambientes

Algo muito legal no Vagrant é que ele já entende as principais ferramentas para provisionamento automático de ambiente. Então se você conhece Puppet, Chef, Ansible ou o recente adicionado Docker, você pode criar receitas/scripts/manifestos com a configuração que você deseja que seja aplicada na sua máquina virtual e o Vagrant vai aplicar a configuração quando ele criar a máquina virtual pela primeira vez (ou quando você quiser que ele re-aplique a configuração de provisionamento). Eu não vou entrar fundo no assunto de provisionamento automático de ambiente nesse post por que esse assunto é extenso mas, se quiser dar uma olhada em algo pode ver esse meu repositório no github que tem monta uma máquina virtual vagrant com OpenERP (algo bem complexo IMHO): https://github.com/rogeralmeida/sample-openerp-vagrant-setup

Acesso a máquina virtual

Tendo uma máquina virtual configurada, você pode acessá-la facilmente via ssh (com o comando vagrant ssh). Se você tiver a máquina virtual rodando, após executar o comando vagrant ssh você cairá no prompt da máquina virtual.
Além disso você pode configurar, para o vagrant fazer ssh port forward entre sua máquina virtual e seu host. Com isso você pode, por exemplo, subir uma aplicação na porta 3000 dentro da VM e acessar essa mesma aplicação pelo brownser do seu laptop através do endereço http://localhost:3000.
Você pode também mapear uma porta da VM para uma porta diferente no seu laptop. Ex: 3000->666

Enviando dados para a máquina virtual

O pulo do gato é, assim que você sobe uma máquina virtual vagrant, se você acessá-la via ssh e mudar para o diretório /vagrant você ira ver os arquivos que estavam no seu diretório do projeto no seu laptop.
Vagrant possui um conceito de pasta compartilhada, ou seja, pastas que existem no seu host que devem ser compartilhadas com sua máquina virtual.
Esse é o truque para conseguir desenvolver aplicações com linguagem script como Ruby e Python, no mundo java esse é o segredo para compartilhar o .m2/, por exemplo.

Considerações finais

Já tem um tempo que eu virei fan de Vagrant, e acho que todo desenvolvedor do Brasil deveria pelo menos brincar um pouco com Vagrant.
Tem várias outras coisas legai de vagrant, como por exemplo rodar direto na AWS ou subir um cluster de máquinas virtuais diretamente no seu laptop.
Se quiser ver algo de alguém que manja muito disso, dá uma olhada no post do bruninho sobre vagrant+puppet.

Popular posts from this blog

Thunderbird with Microsoft OWA in Ubuntu 11.10

So, you as I are tired of Evolution's problems in Ubuntu 11.10 ? Move on to Thunderbird... To have it working with Microsoft OWA following the these steps: Install DavMail Download and install  DavMail . It will act as a proxy between Thunderbird and your Microsoft webmail. Configure DavMail Some tips:  Exchange 2003: https://mail.company.com/exchange/ Exchange 2007 Webdav mode: https://mail.company.com/owa/ Exchange 2007 EWS mode: https://mail.company.com/owa/ Exchange 2010 EWS mode: https://mail.company.com/owa/ Exchange 2010 EWS mode with unsupported authentication form e.g. Windows Live login:https://mail.company.com/ews/exchange.asmx In my case as I'm behind a proxy I had to mark the option "Use system proxy settings" in the Proxy tab: Click save then you should see a message in your system tray, saying that DavMail is correctly configured. Configuring Thunderbird In Thunderbird main window click menu Fil

Page Object Pattern + WebDriver + Spring

During the last week I had start creating a test suite for a existing web-application which my team is currently working on. So now is good time to share some experience: The application A normal old java web application: Java 1.4, Struts 1.1, EJB 2.1, JDBC to persist the data and the anemic design (VO+BO+DAO) but I will talk about in another post... Page Object Pattern To map the web page's components inside the test code I used the page object pattern. This patterns helped me to eliminate duplicated code to access web-page's components. Basically it consists of classes that maps web-pages, so that if you want to fill a login form from your test classes instead of doing this: @Test public void someTest() throws Exception { WebElement userNameField = driver.findElement(By.name("j_username")); userNameField.sendKeys(username); WebElement passwordField = driver.findElement(By.name("j_password")); passwordField

3 Milagres

São necessários 3 milagres para virar santo Para virar santo você precisa primeiro fazer 3 milagres. Se você começar numa equipe/empresa nova, lembre-se a não ser que você já seja um autor respeitado você vai precisar conquistar seu espaço/respeito. Para conquistar seu espaço/respeito você precisa fazer as coisas acontecerem. Se esforce e faça os milagres acontecerem, depois de 3 você vira santo e dai as pessoas passam a pedir sua benção.