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

Como é trabalhar na ThoughtWorks

Uma pergunta recorrente que me fazem é: - E ai, como é trabalhar na ThoughtWorks? Bom, vou tentar responder isso... Pra começar é muito diferente de tudo que já vi aqui no Brasil. Nenhuma das empresas pelas quais passei, ou empresas que ouvi amigos próximos falando sobre o dia-a-dia se aproximam do que eu vejo aqui na ThoughtWorks. Isso tanto para bom, quanto para "não tão bom". A ThoughtWorks te contrata para a Thoughtworks não para um projeto Isso pra mim é algo muito bom, a maioria das empresas de consultoria no Brasil quando querem te contratar falam algo do tipo: "Temos um projeto em Alphaville com duração de 6 meses e possibilidade de prorrogação..." Nesse cenário se tem projeto essas empresas contratam como loucas, e quando chega final do ano e os clientes tem um freezee elas demitem! Para em fevereiro do outro ano começarem a contratar de novo. Isso nunca fez sentido para mim. Na ThoughtWorks, quando você é contratado você vira um ThoughtWorker....

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...

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...