Ambiente Dev Local com Vagrant em 5 minutos

Publicado por Leonardo Berbert Gomes em 03/08/2020

[ Hits: 2.386 ]

Blog: https://www.linkedin.com/in/leoberbert

 


Ambiente Dev Local com Vagrant em 5 minutos



O Vagrant é uma ferramenta para criar e gerenciar ambientes de máquinas virtuais. Ele reduz drasticamente o tempo de configuração do ambiente de desenvolvimento, pois é possível criarmos scripts para automatizar o provisionamento de máquinas com os chamados "Vagrantfile".
Pré-requisitos:

Possuir os softwares instalados de acordo com suas respectivas distribuições:
Abaixo vou mostrar um exemplo de como podemos criar um ambiente com o S.O Debian 10 com as seguintes características:
  • 2 GB de Memória
  • 1 CPU
  • IP FIXO: 172.27.11.10

Criaremos então nosso diretório de trabalho no $HOME do usuário:

cd $HOME
mkdir -p vol/provision

Obs.: o diretório provision irá conter nosso shell script contendo os comandos que serão executados durante o processo de criação da máquina.

Em seguida vamos acessar o diretório criado:

cd vol

Criaremos agora nosso Vagrantfile contendo as configurações da máquina conforme mostrado abaixo:

vim Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

vms = {
  'server' => {'memory' => '2048', 'cpus' => 1, 'ip' => '10'}
}

Vagrant.configure('2') do |config|

  config.vm.box = 'debian/buster64'
  config.vm.box_check_update = false

  vms.each do |name, conf|
    config.vm.define "#{name}" do |k|
      k.vm.hostname = "#{name}"
      k.vm.network 'private_network', ip: "172.27.11.#{conf['ip']}"
      k.vm.provider 'virtualbox' do |vb|
        vb.memory = conf['memory']
        vb.cpus = conf['cpus']
      end
      k.vm.provider 'libvirt' do |lv|
        lv.memory = conf['memory']
        lv.cpus = conf['cpus']
        lv.cputopology :sockets => 1, :cores => conf['cpus'], :threads => '1'
      end
    end
  end
  config.vm.provision 'shell', path: 'provision/provision.sh'
end

Note que acima temos uma linha contendo um script chamado "provision/provision.sh" que faz a instalação dos pacotes durante a criação do ambiente. Em nosso exemplo eu utilizei os seguintes pacotes:

vim provision/provision.sh

#!/bin/bash

apt-get update
apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common dirmngr vim telnet curl golang sysstat

Agora é que vem a parte mágica do negócio, com um simples comando minha máquina será criada.

vagrant up

Note que o VirtualBox em nenhum momento foi aberto, porém, se você abri-lo, poderá ver uma máquina criada dentro dele conforme mostrado abaixo:
Agora é só aguardar que seu ambiente será provisionado de forma automática. Quando tudo for finalizado, iremos acessar nosso ambiente utilizando o comando abaixo:

vagrant ssh server

Obs.: o nome do hostname server foi definido na configuração do nosso Vagrantfile.

Agora iremos verificar se nosso ambiente Debian 10 foi criado:

cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"


Também vamos verificar se nosso pacote vim foi instalado:

sudo apt list --installed vim
Listing... Done
vim/stable,now 2:8.1.0875-5 amd64 [installed]


E se eu quisesse criar mais maquinas ao invés de uma? Simples, seria apenas alterar a configuração do Vagrantfile conforme mostrado abaixo:

vim Vagrantfile

vms = {
  'server' => {'memory' => '2048', 'cpus' => 1, 'ip' => '10'},
  'node01' => {'memory' => '1024', 'cpus' => 1, 'ip' => '20'},
  'node02' => {'memory' => '1024', 'cpus' => 1, 'ip' => '30'}
}

Vagrant.configure('2') do |config|

  config.vm.box = 'debian/buster64'
  config.vm.box_check_update = false

  vms.each do |name, conf|
    config.vm.define "#{name}" do |k|
      k.vm.hostname = "#{name}"
      k.vm.network 'private_network', ip: "172.27.11.#{conf['ip']}"
      k.vm.provider 'virtualbox' do |vb|
        vb.memory = conf['memory']
        vb.cpus = conf['cpus']
      end
      k.vm.provider 'libvirt' do |lv|
        lv.memory = conf['memory']
        lv.cpus = conf['cpus']
        lv.cputopology :sockets => 1, :cores => conf['cpus'], :threads => '1'
      end
    end
  end
  config.vm.provision 'shell', path: 'provision/provision.sh'
end

Neste exemplo acima, seriam criadas 3 máquinas com Debian 10, onde o server teria 2GB de memória e as máquinas node01 e node02 teriam 1 GB.

Caso eu queira remover a máquina que foi criada, como eu faço? Basta executar o comando abaixo dentro da pasta onde encontra-se o Vagrantfile onde será solicitada sua confirmação.

vagrant destroy server
server: Are you sure you want to destroy the 'server' VM? [y/N]

E como eu desligo a máquina virtual?

vagrant halt server

Para saber todos os comandos do vagrant acesse:
Outra coisa importante a se falar é sobre as boxes disponíveis do vagrant, você viram que utilizamos o Debian 10, porém, suponhamos que você prefira Ubuntu por exemplo, bastaria eu alterar a variável do Vagrantfile "config.vm.box = 'debian/buster64'" para " config.vm.box = 'ubuntu/trusty64'". Mas como eu disso? Existem diversas boxes prontas que podem ser encontradas no site do fabricante:
Espero que essa dica seja útil a vocês.

[]'s leoberbert

Outras dicas deste autor

Criando repositório de módulos Python localmente

Baixando arquivos por extensões com o wget

Acessibilidade no VIM

Instalando o Terraform (Ubuntu/Mint/Debian e Derivados)

Compilando a última versão do VIM em Debian, Mint, Ubuntu e derivados

Leitura recomendada

Conky Ubuntu Lucid Theme

Glider: Símbolo da ética Hacker!

Já pensou em adquirir adesivos grátis do Rundeck?

ZeroBrane Studio - Mais uma opção de IDE para quem deseja programar em LUA

Samba + GNOME + Nautilus - Debian 6 Squeeze

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts