Ambiente Dev Local com Vagrant em 5 minutos

Publicado por Leonardo Berbert Gomes em 03/08/2020

[ Hits: 2.369 ]

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

Wisestamp - Plugin do Firefox para criar assinaturas de e-mail

Atualizando / Instalando o VIM 8.2 (Ubuntu/Debian/Mint e Derivados)

Criando repositório de módulos Python localmente

Tema Ubuntu para Nokia E71

Instalando o bash no OpenBSD 5.1

Leitura recomendada

CentOS 6.x - Instalação do VirtualBox + VirtualBox Extension Pack

ConvertIT - Excelente conversor de vídeo para Ubuntu Linux

Dica para apt-get que se recusa a funcionar em conjunto com rpm no Fedora Core 3

Usando o Bootsplash ao contrário

Entrevista com Patrick Volkerding

  

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