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.
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
# -*- 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!
About author
Você pode gostar também
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
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
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