Introduccion
Uno de los principales desafíos al trabajar con nuevos proyectos y tecnologías es configurar el entorno de desarrollo local. A menudo, nos enfrentamos a la incertidumbre sobre por dónde empezar y cómo realizar las configuraciones necesarias.
Por eso, es una excelente opción contar con entornos de desarrollo reproducibles para facilitar esta tarea a los devs y aumentar la productividad.
En este primera parte crearemos un entorno virtualizado utilizando las siguientes tecnologias.
- Vagrant
- VirtualBox
TLDR;
- Instala VBOX y vagrant, reinicia,
- crea una carpeta y dentro de ella un archivo Vagrantfile con la configuracion del punto 4
- Ejecuta
vagrant up
dentro del directorio en donde se situa el Vagrantfile - Ingresa a tu maquina virtual con
vagrant ssh
1. VirtualBox
Es un software de virtualizacion que permite a los usuarios crear y ejecutar máquinas virtuales en sus sistemas locales. De esta manera es posible ejecutar múltiples sistemas operativos simultáneamente en un único hardware físico.
En Vagrant, un provider es la plataforma de virtualización que permite a la herramienta crear y gestionar máquinas virtuales de manera eficiente. En este caso, seleccionaremos VirtualBox como nuestro proveedor debido a su facilidad de uso, amplia compatibilidad con diferentes sistemas operativos y su integración sin problemas con Vagrant.
1.1 Descargar e instalar virtualbox
Para su instalación solo descargaremos de la pagina oficial el instalador para nuestro sistema operativo Windows o Linux(Ubuntu) y posteriormente ejecutaremos el instalador.
- Descargar VirtualBox.
- Instalar VirtualBox.
- Se recomienda reiniciar para efectuar todos los cambios.
2. Vagrant
Vagrant es una herramienta de código abierto diseñada para simplificar y automatizar el proceso de creación, gestión y aprovisionamiento de entornos de desarrollo virtualizados. Utiliza una configuración simple basada en archivos de texto llamados Vagrantfile que permite a los desarrolladores definir la infraestructura de sus entornos de desarrollo utilizando código, y asi garantizar la consistencia y la portabilidad entre diferentes máquinas y equipos de trabajo.
2.1 Descargar e instalar vagrant
Ingresar a la pagina de descargas de Vagrant, posteriormente descarga para el sistema operativo requerido y finalmente instalar.
En el caso de descargar el bin para Linux:
- Descomprimir el zip
- Asignar permisos de ejecucion
sudo chmod +x vagrant
- Mover a /usr/bin
sudo mv vagrant /usr/bin/
2.2 Comprobar instalacion
Para comprobar la correcta instalacion abriremos una terminal y ejecutaremos el comando vagrant version
. Como salida obtendremos la version instalada de vagrant
3. Trabajando con Vagrant
3.1 Espacio de trabajo
Una vez instalado vagrant:
- Crearemos una carpeta que sera nuestro espacio de trabajo, en este caso la llamaremos vagrant-dev-env
- Ingresaremos a la carpeta
- Ejecutaremos el comando
vagrant init
mkdir vagrant-dev-env
cd vagrant-dev-env
vagrant init
El comando vagrant init
inicializara un archivo de configuracion Vagrantfile por defecto para nuestra maquina virtual,
Esto es similar al uso de un Dockerfile en Docker para definir la configuración de una imagen de contenedor.
Aunque al principio el Vagrantfile puede parecer confuso debido a la cantidad de comentarios, en realidad su estructura es bastante simple y fácil de entender.
Default Vagrantfile
# -*- 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 = "base"
# 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"
# Disable the default share of the current code directory. Doing this
# provides improved isolation between the vagrant box and your host
# by making sure your Vagrantfile isn't accessable to the vagrant box.
# If you use this you may want to enable additional shared subfolders as
# shown above.
# config.vm.synced_folder ".", "/vagrant", disabled: true
# 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
# Ansible, Chef, Docker, Puppet and Salt 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
3.2 Vagrantfile
Este archivo nos permite configurar diversos aspectos de nuestra máquina virtual, como el sistema operativo, la cantidad de memoria asignada, la configuración de red y otras opciones. El Vagrantfile esta en ruby pero no es necesario aprenderlo, solo cambiaremos algunas lineas para configurar nuestra maquina virtual.
Abrimos el Vagrantfile con algun editor de texto para editarlo. Todas las configuraciones se encuentran dentro del siguiente bloque de codigo:
Vagrant.configure("2") do |config|
end
3.3 Configuracion del Sistema Operativo
Para iniciar nuestra máquina virtual en Vagrant, necesitamos una imagen base que proporcione el sistema operativo. En Vagrant, esta imagen base se conoce como box.
Por defecto, la configuración en el archivo Vagrantfile establece config.vm.box = "base"
, lo que indica que se utilizará una box predeterminada llamada “base”, que es un sistema operativo basado en Linux configurado por Vagrant.
Existen diversas “boxes” en la nube de vagrant, algunas son de usuarios y otras son oficiales como las de Ubuntu o Debain.
Para utilizar una version especifica de un S.O solo cambiamos el valor de config.vm.box que es base por el que corresponde al S.O que deseamos utilizar.
Ejemplo:
Ubuntu 20.04 LTS Focal Fossa
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64" # Imagen base del SO
end
En este caso hemos decidido utilizar el release Focal Fossa de Ubuntu
3.4 Configuracion de red y provider
Red
Para la configuracion haremos un mapeo de reenvio de puertos para que permita el acceso a un puerto específico. Ademas estableceremos la red como publica lo que hace que la máquina aparezca como otro dispositivo físico en la red (bridge network).
Dentro del bloque principal del archivo de configuración Vagrantfile, agregamos las siguientes líneas:
...
config.vm.network "forwarded_port", guest: 8080, host: 8080 # Mapeo y reenvio de puertos
config.vm.network "public_network" # Establecer red publica
end
Provider
En este bloque, agregamos configuraciones para la cantidad de CPUs y RAM que deseamos asignar a nuestra máquina virtual, teniendo en cuenta la cantidad total de estos recursos disponibles en nuestro hardware.
...
config.vm.provider "virtualbox" do |vb|
vb.gui = false # Esta línea determina si se abrirá la interfaz gráfica de VirtualBox al iniciar el sistema.
vb.memory = 2048 # Asignamos 2GB de RAM a la máquina virtual.
vb.cpus = 2 # Asignamos 2 CPUs a la máquina virtual.
end
end
Con esta configuración, hemos asignado 2GB de RAM y 2 CPUs a nuestra máquina virtual. La opción vb.gui está establecida en false, lo que significa que la interfaz gráfica de VirtualBox no se abrirá al iniciar el sistema.
Es importante tener en cuenta que estas configuraciones deben ajustarse según las necesidades y los recursos disponibles en el hardware para garantizar un rendimiento óptimo de la máquina virtual.
4 Iniciando la maquina virtual
Hemos configurado nuestro Vagrantfile con un setup básico que nos permitirá iniciar nuestro sistema.
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
config.vm.network "forwarded_port", guest: 9090, host: 9090
config.vm.network "public_network"
config.vm.provider "virtualbox" do |vb|
vb.gui = false
vb.memory = "1024"
vb.cpus = 2
end
end
Los siguientes pasos para iniciar el sistema e ingresar a el, se debe realizar dentro del directorio en donde se creó el Vagrantfile
- Una vez con el Vagrantfile configurado ejecutamos el comando
vagrant up
para iniciar la maquina virtual. - Para ingresar a la maquina virtual ejecutamos el comando
vagrant ssh
4.1 Directorios en vagrant
El directorio compartido por defecto entre el host y la máquina virtual es el directorio que contiene el Vagrantfile. Después de iniciar la máquina virtual y haber ingresado mediante los comandos anteriores, puedes establecerte en el directorio compartido de la siguiente manera:
cd /vagrant