Vagrant: o que é, onde vive e o que come? Aqui no blog da 4Linux!

Vagrant: o que é, onde vive e o que come? Aqui no blog da 4Linux!

A tecnologia nunca foi algo provisório ou estacionário, a todo momento vemos mudanças e essas são sempre acompanhadas de desafios. Estar antenado com atualizações e lançamentos é uma tarefa árdua, pois sabemos que ambiente de TI sempre há implantações, manutenções e situações críticas.

Aqui na 4linux lidamos com múltiplas tecnologias e arquiteturas, e a cada cliente implantado um desafio é proposto para entender a dinâmica de processos e recursos. É um fato que nossa consultoria se destaca pela agilidade e confiança em suas entregas e isso reflete no preparo de nós construtores quando recebemos um projeto.

A preparação para um novo projeto consiste em criar laboratórios que simulem o ambiente do cliente e com isso trabalhar em cima das particularidades e dificuldades que podem ocorrer durante a execução.

E para criar esses laboratórios usamos uma ferramenta OpenSource chamada Vagrant. Mas, o que é o Vagrant?

Definição da Ferramenta Vagrant

Vagrant é uma ferramenta de código aberto que promove a criação e gerenciamento de ambientes de desenvolvimento virtualizados. Assim, ela permite que desenvolvedores configurem ambientes consistentes e escaláveis, independente de sistemas operacionais.

Com o Vagrant, é possível criar e provisionar máquinas virtuais de maneira rápida e fácil, garantindo que todos os membros da equipe tenham ambientes de desenvolvimento idênticos ou ambientes exclusivos que possuem dependências para testes de suas aplicações.

A principal vantagem do Vagrant é ser “portátil” pois sua execução independe de um local específico e poder criar ambientes isolados, eliminando problemas de inconsistência entre configurações de desenvolvimento e ambientes de produção. Utiliza configurações declarativas e scripts de provisionamento para automatizar a instalação e configuração de softwares em seus ambientes virtuais.

O Vagrant necessita de alguns componentes externos para realizar esta criação de ambientes, estes componentes são tecnologias de virtualização que são frequentemente utilizadas em conjunto, como VirtualBox, VMware, e outros provedores de máquinas virtuais. Essa abordagem facilita a criação de ambientes de desenvolvimento padronizados, colaboração eficiente e a rápida configuração de máquinas virtuais para testes e desenvolvimento.

Link para Documentação oficial aqui

 

Como utilizar o Vagrant?

Para começar a usar o Vagrant é importante realizar a instalação da ferramenta em seu sistema operacional.

O manual para instalação de acordo com sua distribuição pode ser conferido neste link.

Para nosso exemplo utilizaremos a distribuição Debian.

Abra seu terminal e digite os comandos abaixo:

$ wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
$ sudo apt update && sudo apt install vagrant vagrant

Virtualizador

O Vagrant por si só não faz a mágica acontecer, ele precisa de um virtualizador que auxiliará na criação do nosso ambiente. O virtualizador escolhido para nosso projeto será o VirtualBox na versão 6.1.

Neste artigo não iremos abordar a instalação do virtualizador, porém você pode conferir a instalação acessando este link e selecione seu sistema operacional. Algumas distribuições linux já possuem o repositório do VirtualBox em sua base de conhecimento, assim você pode utilizar o seu gerenciador de pacote para instalação bastando apenas procurar pelo nome do pacote e realizar o comando com o nome correto.

Agora vamos criar um diretório para iniciarmos nosso primeiro projeto:

$ mkdir projeto-vagrant
$ cd projeto-vagrant

O Vagrant possui diversas ferramentas que nos ajudam no gerenciamento e criação de nossas máquinas virtuais. Pelo terminal nós conseguimos visualizar essas ferramentas digitando o comando e em seguida a flag de ajuda, exemplo: `vagrant –help`

$ vagrant --help
Usage: vagrant [options] <command> [<args>]
-v, --version Print the version and exit.
-h, --help Print this help.
Common commands:
box manages boxes: installation, removal, etc.
cloud manages everything related to Vagrant Cloud
destroy stops and deletes all traces of the vagrant machine
global-status outputs status Vagrant environments for this user
halt stops the vagrant machine
help shows the help for a subcommand
init initializes a new Vagrant environment by creating a Vagrantfile
login 
package packages a running vagrant environment into a box
plugin manages plugins: install, uninstall, update, etc.
port displays information about guest port mappings
powershell connects to machine via powershell remoting
provision provisions the vagrant machine
push deploys code in this environment to a configured destination
rdp connects to machine via RDP
reload restarts vagrant machine, loads new Vagrantfile configuration
resume resume a suspended vagrant machine
snapshot manages snapshots: saving, restoring, etc.
ssh connects to machine via SSH
ssh-config outputs OpenSSH valid configuration to connect to the machine
status outputs status of the vagrant machine
suspend suspends the machine
up starts and provisions the vagrant environment
upload upload to machine via communicator
validate validates the Vagrantfile
version prints current and latest Vagrant version
winrm executes commands on a machine via WinRM
winrm-config outputs WinRM configuration to connect to the machine

For help on any individual command run `vagrant COMMAND -h`

Additional subcommands are available, but are either more advanced
or not commonly used. To see all subcommands, run the command
`vagrant list-commands`.

Uma dessas ferramentas para criação é o vagrant init.

que realiza a criação do nosso primeiro script para criação do ambiente. Junto dele é possível informar também qual box será usada para criar a máquina virtual.

O Vagrant trabalha o conceito de `Box` as imagens de sistemas operacionais que serão a base de máquinas virtuais, para saber quais boxes estão disponíveis basta acessar o site https://app.vagrantup.com/boxes/search e procurar pelo sistema operacional desejado. Nesta busca você pode personalizar filtrando os resultados pelo provider que será usado na virtualização, arquitetura e pelo rate de downloads por box.

 

Atenção: É muito importante ter o cuidado com a escolha da box, pois há diversas imagens disponíveis por usuários e também por empresas, caso a imagem não seja escolhida de uma fonte confiável seu ambiente pode correr grande perigo pois não há certezas do que foi alterado dentro do sistema operacional e se há scripts maliciosos, portanto sempre escolha imagens oficiais.

 

Para utilizar uma box é necessário informar o hospedeiro e a versão que será utilizada, neste cenário usaremos a box `ubuntu/bionic64`.

Em seu terminal digite:

$ vagrant init ubuntu/bionic64
Este comando criará um arquivo chamado VagrantFile. Este é o arquivo responsável por provisionar nosso ambiente, vamos entendê-lo?
# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.

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

# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.

# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.

config.vm.box="ubuntu/bionic64"

# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false

# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
# config.vm.network "forwarded_port", guest: 80, host: 8080

# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"

# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"

# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"

# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
# vb.memory = "1024"
# end
#
# View the documentation for the provider you are using for more
# information on available options.

# Enable provisioning with a shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "shell", inline: <<-SHELL
# apt-get update
# apt-get install -y apache2
# SHELL
end

O arquivo criado vem com várias linhas comentadas, estas linhas possuem o carácter # e o intuito delas é explicar o potencial das configurações e informais quais módulos são mais usados para configurar sua máquina virtual.

Para iniciar seu novo ambiente basta digitar o comando vagrant up. Este comando irá realizar o download da imagem da box e subir seu máquina virtual com todas as configurações padrão, como quantidade de memória, CPU, endereço de rede e automatização.

 

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'ubuntu/bionic64' could not be found. Attempting to find and install...
default:BoxProvider:virtualbox
default:BoxVersion: >=0
==> default: Loading metadata for box 'ubuntu/bionic64'
default:URL:https://vagrantcloud.com/ubuntu/bionic64
==> default: Adding box 'ubuntu/bionic64' (v20230607.0.0) for provider: virtualbox
default:Downloading:https://vagrantcloud.com/ubuntu/boxes/bionic64/versions/20230607.0.0/providers/virtualbox/unknown/vagrant.box
default:Downloadredirectedtohost:cloud-images.ubuntu.com
==> default: Successfully added box 'ubuntu/bionic64' (v20230607.0.0) for 'virtualbox'!
==> default: Importing base box 'ubuntu/bionic64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/bionic64' version '20230607.0.0' is up to date...
==> default: Setting the name of the VM: projeto-vagrant_default_1707935425355_35873
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default:Adapter1:nat
==> default: Forwarding ports...
default:22 (guest) => 2222 (host) (adapter1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default:SSHaddress:127.0.0.1:2222
default:SSHusername:vagrant
default:SSHauthmethod:privatekey
default:Warning:Remoteconnectiondisconnect.Retrying...
default:Warning:Connectionreset.Retrying...
default:
default:Vagrantinsecurekeydetected.Vagrantwillautomaticallyreplace
default:thiswithanewlygeneratedkeypairforbettersecurity.
default:
default:Insertinggeneratedpublickeywithinguest...
default:Removinginsecurekeyfromtheguestifit's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
default: The guest additions on this VM do not match the installed version of
default: VirtualBox! In most cases this is fine, but in rare cases it can
default: prevent things such as shared folders from working properly. If you see
default: shared folder errors, please make sure the guest additions within the
default: virtual machine match the version of VirtualBox you have installed on
default: your host and reload your VM.
default:
default: Guest Additions Version: 5.2.42
default: VirtualBox Version: 6.1
==> default: Mounting shared folders...
default: /vagrant => /home/bayek/projeto-vagrant

Ao final do processo podemos verificar se nossa máquina virtual está pronta digitando o comando de status vagrant status.

 

$ vagrant status
Current machine states:

default running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.

E pronto, temos nossa primeira máquina virtual provisionada com Vagrant! Aproveite e utilize este conhecimento como base e aprofunde na criação de máquinas virtuais. Divirta-se!

Ah! este é o primeiro posta de uma pequena série que farei sobre criação de um laboratório para estudos sobre LPIC, Docker, Docker Swarm, Observabilidade dentre tantos, fiquem ligados!

 

Anterior Por que você deve investir tempo estudando Python
Próxima Desbravando o OpenTofu: Parte 01 - Introdução e Fundamentos

About author

Jeovany Batista
Jeovany Batista 8 posts

Formado em Segurança da Informação, trabalha com tecnologia há 11 anos, atualmente é Analista de Infraestrutura e Monitoramento na 4Linux, nas horas vagas se aventura na culinária e nos games. Entusiasta em opensource tools e no momento curtindo a distro OpenSuse!

View all posts by this author →

Você pode gostar também

Desenvolvimento

Curso PHP Completo: Aprenda a Programar e Melhore Seu Desempenho

Hoje estamos entusiasmados em anunciar o nosso Curso PHP Completo.  Existem muitas linguagens de programação para se aprender, o que pode levar você a se perguntar se deve começar a

Notícias

Entrevista exclusiva com Nicolas Grekas sobre o Symfony Framework

Em Maio o Nicolas Grekas – um dos desenvolvedores do Symfony Framework – esteve no Brasil pela primeira vez para o SymfonyLive e tivemos a oportunidade de recebê-lo aqui na

Infraestrutura TI

Teste sua infraestrutura com InSpec: auditoria automatizada e eficiente

Você conhece a ferramenta da Chef, o InSpec? Vamos realizar um teste básico de infraestrutura utilizando InSpec! Muita das vezes quando trabalhamos com integração continua não temos a certeza que