Tutorial Campo de entrenamiento de Vagrant

De Wiki de EGC
Revisión del 13:54 17 nov 2024 de Jmorenol (discusión | contribuciones) (Modifica el archivo index.html desde el host)
Saltar a: navegación, buscar

Vagrant

Instalación de Vagrant

Instrucciones para instalar Vagrant, VirtualBox y Ansible sobre Ubuntu 22.04 (Jammy Jellyfish):

#Añadir el repo oficial y la clave GPG
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

# Actualizar la lista de paquetes
sudo apt update

# Instalar vagrant, ansible y virtualbox
sudo apt install vagrant ansible virtualbox

Introducción a Vagrant

Vagrant es una herramienta que permite crear y gestionar entornos de máquinas virtuales de forma sencilla y reproducible. Para comenzar, ejecutaremos una máquina sencilla utilizando una box de Ubuntu.

Pasos iniciales

¿Por qué no debemos tener más de un `Vagrantfile` en el mismo directorio?

En Vagrant, cada directorio puede contener solo un archivo `Vagrantfile`. Este archivo es el que Vagrant utiliza para configurar y gestionar las máquinas virtuales. Si tienes más de un `Vagrantfile` en el mismo directorio, Vagrant no sabrá cuál utilizar y esto causará errores. Por lo tanto, es importante organizar los ejercicios en directorios separados para mantener los entornos de trabajo independientes.

Recomendación: Cada vez que trabajes en un ejercicio de Vagrant, crea una carpeta diferente para cada entorno. De este modo, te   asegurarás de que cada `Vagrantfile` está aislado y no interfiere con otros.

Crear un directorio para el primer ejercicio

Antes de empezar con la creación de la máquina virtual, vamos a crear un directorio para este ejercicio. Esto es esencial para que el entorno de trabajo esté organizado y no interfiera con otros posibles proyectos o ejercicios.

# Crear un directorio para el ejercicio
$ mkdir ejercicio1
$ cd ejercicio1

Inicializar un entorno con un `Vagrantfile`

Ahora que tenemos el directorio preparado, vamos a inicializar un entorno de trabajo con Vagrant. Al ejecutar el siguiente comando, Vagrant creará un archivo llamado `Vagrantfile`, que contendrá la configuración básica para la máquina virtual que vamos a levantar.

# Inicializar un entorno con la box ubuntu/trusty32
$ vagrant init ubuntu/trusty32

Esto generará un archivo `Vagrantfile` en el directorio actual, que contiene las configuraciones predeterminadas para crear una máquina virtual basada en Ubuntu 14.04 (Trusty Tahr).


Explicación del `Vagrantfile` Generado

Cuando ejecutas el comando `vagrant init`, Vagrant genera un archivo llamado `Vagrantfile` en el directorio actual. Este archivo contiene la configuración básica para la máquina virtual. A continuación se muestra un ejemplo de un `Vagrantfile` básico y una explicación de cada parte.

# -*- mode: ruby -*-
# vi: set ft=ruby :

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

  # Definición de la Box
  config.vm.box = "ubuntu/trusty32"

  # Redirección de puertos
  # Este comando es útil si se quiere acceder a servicios dentro de la máquina
  config.vm.network "forwarded_port", guest: 80, host: 8080

  # Carpeta compartida entre la máquina host y la máquina virtual
  config.vm.synced_folder ".", "/vagrant"

  # Habilitar el uso de VirtualBox como proveedor
  config.vm.provider "virtualbox" do |vb|
    # Personalización de la memoria RAM para la VM
    vb.memory = "1024"
  end

end
Descripción de cada sección

Configuración Básica de Vagrant:

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

Esta línea indica que se está utilizando la versión 2 de la configuración de Vagrant. El bloque que sigue (`do |config|`) define todas las configuraciones para la máquina virtual.

Box a utilizar:

  
config.vm.box = "ubuntu/trusty32"

Define la box que se utilizará para crear la máquina virtual. En este caso, se utiliza una box de Ubuntu 14.04 de 32 bits, pero puedes cambiarla a cualquier otra según tus necesidades.

Redirección de puertos:

config.vm.network "forwarded_port", guest: 80, host: 8080

Esta línea establece la redirección de puertos entre la máquina virtual y el host. En este caso, se redirige el puerto 80 de la máquina virtual al puerto 8080 del host. Esto es útil para acceder a servicios como un servidor web que esté corriendo dentro de la máquina virtual desde el navegador del host.

Carpeta compartida:

config.vm.synced_folder ".", "/vagrant"

Aquí se establece una carpeta compartida entre el host y la máquina virtual. El primer parámetro (`"."`) se refiere a la carpeta actual en el host, y el segundo (`"/vagrant"`) es la carpeta en la máquina virtual. Cualquier archivo colocado en la carpeta del host será accesible dentro de la máquina virtual y viceversa.

Configuración de VirtualBox:

config.vm.provider "virtualbox" do |vb|
 vb.memory = "1024"
end

Esta sección configura el proveedor de virtualización a utilizar (en este caso, VirtualBox). En este caso, se ha configurado para que la máquina virtual tenga 1 GB de memoria RAM (1024 MB). Puedes ajustar este valor según los recursos disponibles en tu máquina.

Levantar la máquina virtual

Con el `Vagrantfile` listo, es hora de levantar la máquina virtual. El siguiente comando descargará la imagen de la box (si no está previamente descargada) y creará una máquina virtual según las especificaciones del `Vagrantfile`.

# Levantar la máquina virtual
$ vagrant up

Este proceso puede tardar algunos minutos dependiendo de la velocidad de tu conexión a Internet, ya que Vagrant descargará la box y configurará la máquina virtual.

Verificar que tenemos dos sistemas funcionando

Una vez que la máquina virtual esté en funcionamiento, podemos verificar que todo está bien ejecutándose. Primero, accedemos a la máquina virtual a través de SSH y comprobamos el nombre del sistema operativo con el siguiente comando:

# Conecta a la máquina virtual a través de SSH y ejecuta una orden
$ vagrant ssh -c 'hostnamectl' # Si pide contraseña, utiliza 'vagrant'

La opción -c de la orden anterior hace que tras conectarse por SSH y ejecutar la orden 'hostnamectl' en la máquina virtual, regresa automáticamente al host. Así que en esta misma terminal puedes verificar el sistema operativo del host para comprobar que estamos trabajando con dos sistemas diferentes:

# En el host, verificar el sistema operativo
$ hostnamectl

Ver el estado de las máquinas virtuales

Puedes comprobar el estado de todas las máquinas virtuales que Vagrant está gestionando con el siguiente comando. Esto te permitirá ver si tu máquina está funcionando correctamente:

# Ver el estado de las máquinas virtuales
$ vagrant global-status

Entrar en la máquina virtual

Si deseas interactuar con la máquina virtual, puedes acceder a ella en cualquier momento utilizando SSH. El siguiente comando te permitirá iniciar sesión en la máquina virtual:

# Iniciar sesión en la máquina virtual
$ vagrant ssh # Si pide contraseña, utiliza 'vagrant'

Crear un fichero en el sistema guest

Dentro de la máquina virtual, podemos crear un archivo para comprobar que tenemos acceso al sistema de archivos. El siguiente comando creará un archivo de texto llamado `hola.txt` en el directorio `/home` de la máquina virtual:

# Crear un archivo en el sistema de archivos de la VM
$ cd /home
$ sudo vi hola.txt

Dentro del archivo, puedes escribir cualquier contenido y guardarlo.

Apagar la máquina y liberar recursos

Cuando hayas terminado de trabajar, es recomendable apagar la máquina para liberar recursos en tu máquina local. Puedes hacerlo con el siguiente comando:

#Sal de la terminal de la máquina virtual
$ exit
# Apagar la máquina
$ vagrant halt #(la opción -f simula un apagado forzado)

Esto apagará la máquina virtual y liberará los recursos que estaba utilizando.

Levantar la máquina nuevamente

Al levantar nuevamente la máquina virtual, podemos comprobar que el archivo que creamos sigue existiendo en el sistema. Vagrant guarda el estado de la máquina virtual, por lo que los cambios realizados se conservan entre apagados y arranques:

# Iniciar de nuevo la máquina
$ vagrant up
# Entrar en la máquina mediante ssh
$ vagrant ssh 
# Verificar que el fichero sigue presente
$ cat /home/hola.txt

Parar y destruir la máquina virtual

Cuando ya no necesitemos la máquina virtual, podemos detenerla y destruirla para liberar los recursos del sistema. El siguiente comando apagará la máquina y la eliminará completamente:

# Salir de la máquina virtual
$ exit
# Destruir la máquina y liberar los recursos
$ vagrant destroy

Gestión de Boxes

Vagrant gestiona las boxes, que son imágenes de máquinas virtuales preconfiguradas. Es importante saber cómo listar y eliminar las boxes cuando ya no las necesitemos.

# Lista de boxes disponibles en nuestro sistema local
$ vagrant box list

# Para eliminar una box
$ vagrant box remove ubuntu/trusty32

Carpetas Compartidas y Redirección de Puertos

En este ejercicio, aprenderás a trabajar con carpetas compartidas entre el sistema host y la máquina virtual, y a configurar la redirección de puertos para acceder a servicios dentro de la máquina virtual desde el host.

Crear un directorio para el segundo ejercicio

Vamos a crear un nuevo directorio para este ejercicio. Esto nos permite mantener los entornos de trabajo aislados:

# Crear un directorio para el segundo ejercicio
$ mkdir ejercicio2
$ cd ejercicio2

Inicializar el entorno con la box "obihann/nginx"

Vamos a utilizar la box "obihann/nginx", que es una imagen preconfigurada con Nginx. Inicializamos el entorno con esta box:

# Inicializar un entorno con la box obihann/nginx
$ vagrant init obihann/nginx

Levantar la máquina virtual

Ahora que hemos configurado el entorno con la box de Nginx, levantamos la máquina virtual:

# Levantar la máquina
$ vagrant up

Verificar la carpeta compartida

Vagrant crea automáticamente una carpeta compartida en la máquina virtual. Para verificar que esta carpeta existe, ejecutamos el siguiente comando dentro de la máquina virtual:

# Verificar el directorio compartido
$ ls /vagrant

Esta carpeta `/vagrant` está vinculada al directorio en el host donde ejecutaste el comando `vagrant init`.

Configurar la redirección de puertos

La máquina virtual que estamos usando ejecuta un servidor Nginx en el puerto 80. Para poder acceder a este servidor desde el navegador del host, necesitamos redirigir el puerto 80 de la máquina virtual al puerto 8080 de nuestro host. Para hacer esto, editamos el `Vagrantfile` y agregamos la siguiente línea:

config.vm.network "forwarded_port", guest: 80, host: 8080

Esto hará que el servidor Nginx en el puerto 80 de la máquina virtual sea accesible desde el puerto 8080 en tu máquina host.

Recargar la máquina virtual

Después de realizar cambios en el `Vagrantfile`, debemos recargar la máquina virtual para aplicar la configuración:

# Recargar la máquina para aplicar cambios
$ vagrant reload

Añadir un archivo index.html

Para comprobar que la redirección de puertos funciona correctamente, añadimos un archivo `index.html` en el directorio `/www` de la máquina virtual. Este archivo se mostrará cuando accedamos a la dirección `localhost:8080` en el navegador.

# Entrar en la máquina virtual
$ vagrant ssh
# Ir al directorio vagrant/www
$ cd vagrant/www 
# Crear el archivo index.html dentro de la máquina virtual
$ echo '<h1>Bienvenido a Nginx en Vagrant</h1>' > index.html

Ahora, desde el navegador del host, podemos ver el sistema funcionando en la dirección http://localhost:8080/.

Modifica el archivo index.html desde el host

Para comprobar que la carpeta compartida funciona correctamente, puedes modificar el archivo `index.html` del directorio `www` en la propia máquina anfitriona. Este es el archivo que se muestra cuando accedemos a la dirección `localhost:8080` en el navegador.

# Desde el host
$ echo '<h2>Modificado desde el host</h2>' >> www/index.html

Ahora, desde el navegador del host, podemos ver la modificación realizada al visitar de nuevo la dirección http://localhost:8080/.

Parar y destruir la máquina virtual

Al igual que en el primer ejercicio, es recomendable apagar y destruir la máquina para liberar recursos cuando hayamos terminado de trabajar con ella:

# Apagar la máquina
$ vagrant halt

# Destruir la máquina
$ vagrant destroy