Usando Vagrant - Configuração Vagrantfile, SSH e múltiplas máquinas, veja como configurar Vagrantfile, subir a primeira VM e configurar a conexão SSH.

Conheça os comandos básicos para iniciar um VM na distribuição desejada, conectar com SSH usando a chave privada e finalizar a execução da VM.

O vagrant faz mil maravilhas, mas nesse post aprenda 3 comandos básicos para iniciar seus projetos, no final do post veja um resumo dos comandos.

Instalar Vagrant

Antes de instalar o Vagrant, é necessário instalar um “Provider” que é o software de virtualização, recomendo o virtualbox, mas pode ser usado praticamente todos.

Baixar VirtualBox

A vantagem do virtualbox é a quantidade de maquinas destinadas a esse tipo de virtualização, é o Provider com maior número de Boxes.

Agora já pode ser baixado e instalado o Vagrant, tem suporte a Windows, Mac e linux baseado em Debian e Centos.

Baixar Vagrant

Com o Vagrant instalado, agora é necessário configurar o Vagrantfile para iniciar uma VM.

Crie uma pasta para o projeto, nesse exemplo criei uma pasta chamada projeto1 e dentro desta pasta criei o arquivo Vagrantfile.

Exemplo Vagrantfile com uma VM

Nesse caso estou usando o Ubuntu Trusty 64 Bits, a versão 14.04 LTS do Ubuntu e foi definida uma rede privada para VM no IP 192.168.10.10

BOX_IMAGE = "ubuntu/trusty64" # Ubuntu 14.04 LTS
#BOX_IMAGE = "ubuntu/xenial64" # Ubuntu 16.04 LTS
#BOX_IMAGE = "debian/jessie64" # Debian 8
#BOX_IMAGE = "centos/7" # CentOS 7
#Qualquer VM em: https://app.vagrantup.com/boxes/search
Vagrant.configure("2") do |config|
  config.vm.define "dev" do |subconfig|
  subconfig.vm.box = BOX_IMAGE
    subconfig.vm.hostname = "dev"
    subconfig.vm.network :private_network, ip: "192.168.10.10"
  end
end

Deixei comentado outras máquinas entre as mais usadas, o Ubuntu 16.04 LTS, o Debian 8 e CentOS 7, para usar uma delas remova o # da frente.

Com o Vagrantfile configurado, é preciso usar o prompt de comando (cmd) ou o Windows Power Shell para iniciar a VM.

Para facilitar o uso do cmd navegue até a página do projeto, segure Shift e clique com o botão direito, então selecione “Abrir janela de comando aqui”.

cmd abrir pasta direto

Com o cmd dentro da pasta do projeto, execute o comando vagrant up para iniciar a VM configurada no Vagrantfile.

vagrantfile usando vagrant

Com a VM pronta para uso, para acessar e iniciar o desenvolvimento execute o comando vagrant ssh, a forma simples de se conectar por SSH.

vagrant ssh

vagrant ssh

Mas usar o SSH através do cmd ou até mesmo usando através do Windows Power Shell fica um pouco bugado, recomendo usar o Putty ou uma alternativa.

Recomendo usar o Bitvise SSH Client, pois além de client SSH ele ainda oferece suporte para transmissão de arquivos usando protocolo SFTP.

Baixar Bitvise

No cmd digite vagrant ssh-config e vai ser exibidos os dados para se conectar, no Bitvise coloque o host 127.0.0.1 e a porta, geralmente 2222 ou 2200.

Vagrant client SSH Bitvise

Em username coloque vagrant e selecione a caixa password e coloque a senha vagrant, vai ser aberto um terminal SSH e também um acesso SFTP.

vagrant cliente ssh sftp

Vagrant client SSH Putty

Caso queira usar o Putty, em hostname coloque: vagrant@127.0.0.1 e a porta, geralmente 2222 ou 2200, ao conectar vai pedir a senha, use: vagrant.

vagrant ssh cliente putty

Para conectar no ssh com a chave privada é necessário converter para o formato ppk usando o puttygen.

Veja esse tutorial com mais detalhes de como se conectar em um servidor SSH usando uma chave privada.

Desenvolvendo com vagrant com múltiplas VMs

Vou deixar esse exemplo de Vagrantfile para trabalhar com ilimitados nodes, para alterar a quantidade altere a opção NODE_COUNT.

BOX_IMAGE = "ubuntu/trusty64" # Ubuntu 14.04
#BOX_IMAGE = "ubuntu/xenial64" # Ubuntu 16.04
#BOX_IMAGE = "debian/jessie64" # Debian 8
#BOX_IMAGE = "centos/7" # CentOS 7
#Qualquer VM em: https://app.vagrantup.com/boxes/search
NODE_COUNT = 2 # mude aqui a quantidade de nodes adicionais

Vagrant.configure("2") do |config|
  config.vm.define "master" do |subconfig|
  subconfig.vm.box = BOX_IMAGE
    subconfig.vm.hostname = "master"
    subconfig.vm.network :private_network, ip: "192.168.5.50"
  end

  (1..NODE_COUNT).each do |i|     config.vm.define "node#{i}" do |subconfig|
  subconfig.vm.box = BOX_IMAGE
      subconfig.vm.hostname = "node#{i}"
      subconfig.vm.network :private_network, ip: "192.168.5.#{i + 50}"
    end
  end

 # Install avahi on all machines - necessário para bom funcionando do cluster
config.vm.provision "shell", inline: <<-SHELL
    apt-get install -y avahi-daemon libnss-mdns
  SHELL
end

Esse modelo já enumera as maquinas como nodes e automaticamente atribui IPs em sequência, além de pré instalar o avahi-daemon.

Comandos básicos Vagrant

vagrant up - para iniciar as VMs do projeto

vagrant halt - finalizar todas VMs

vagrant reload - executa o halt e em seguida up novamente

vagrant destroy - volte a maquina para o estado inicial

vagrant Snapshot Push - Salva o estado da maquina

vagrant Snapshot Pop - Volta ao último estado salvo

vagrant ssh - Conecta na VM por SSH dentro do terminal cmd

vagrant ssh-config - Visualiza as configurações SSH para conectar usando Putty