Diferencia entre revisiones de «Tutorial Campo de entrenamiento de Vagrant»
(Página creada con «= Vagrant = == Instalación de Vagrant == Instrucciones para instalar Vagrant, VirtualBox y Ansible sobre Ubuntu 22.04 (Jammy Jellyfish): <syntaxhighlight lang="bash" li...») |
(Añadida explicación rápida de vim para la gente que nunca lo haya usado) |
||
(No se muestran 8 ediciones intermedias de 2 usuarios) | |||
Línea 5: | Línea 5: | ||
Instrucciones para instalar Vagrant, VirtualBox y Ansible sobre Ubuntu 22.04 (Jammy Jellyfish): | Instrucciones para instalar Vagrant, VirtualBox y Ansible sobre Ubuntu 22.04 (Jammy Jellyfish): | ||
− | <syntaxhighlight lang="bash" | + | <syntaxhighlight lang="bash"> |
# Actualizar la lista de paquetes | # Actualizar la lista de paquetes | ||
sudo apt update | sudo apt update | ||
Línea 11: | Línea 11: | ||
# Instalar vagrant, ansible y virtualbox | # Instalar vagrant, ansible y virtualbox | ||
sudo apt install vagrant ansible virtualbox | sudo apt install vagrant ansible virtualbox | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Si el paquete vagrant no está disponible tendrás que añadir manualmente el repo oficial y la clave GPG: | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | 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 ansible virtualbox | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Línea 19: | Línea 27: | ||
=== Pasos iniciales === | === 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. | |
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
# Crear un directorio para el ejercicio | # Crear un directorio para el ejercicio | ||
− | $ mkdir | + | $ mkdir ejercicio1 |
− | $ cd | + | $ cd ejercicio1 |
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ==== 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. | ||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
Línea 40: | Línea 52: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 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. | ||
+ | |||
+ | <syntaxhighlight lang="ruby"> | ||
+ | # -*- 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 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ====== Descripción de cada sección ====== | ||
+ | |||
+ | '''Configuración Básica de Vagrant''': | ||
+ | <pre> | ||
+ | Vagrant.configure("2") do |config| | ||
+ | </pre> | ||
+ | |||
+ | 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''': | ||
+ | <pre> | ||
+ | config.vm.box = "ubuntu/trusty32" | ||
+ | </pre> | ||
+ | |||
+ | 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''': | ||
+ | <pre> | ||
+ | config.vm.network "forwarded_port", guest: 80, host: 8080 | ||
+ | </pre> | ||
+ | |||
+ | 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''': | ||
+ | <pre> | ||
+ | config.vm.synced_folder ".", "/vagrant" | ||
+ | </pre> | ||
+ | |||
+ | 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''': | ||
+ | <pre> | ||
+ | config.vm.provider "virtualbox" do |vb| | ||
+ | vb.memory = "1024" | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | 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`. | ||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
Línea 47: | Línea 132: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 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: | ||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
− | # | + | # 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' | $ vagrant ssh -c 'hostnamectl' # Si pide contraseña, utiliza 'vagrant' | ||
+ | </syntaxhighlight> | ||
− | # En | + | 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: |
+ | |||
+ | <syntaxhighlight lang="sh"> | ||
+ | # En el host, verificar el sistema operativo | ||
$ hostnamectl | $ hostnamectl | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ==== 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: | ||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
Línea 64: | Línea 159: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ==== 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: | ||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
Línea 71: | Línea 168: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ==== 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. | ||
+ | Con el comando "vi" realmente estamos abriendo el editor "vim". Cuando entres notarás que aunque escribas, no aparece texto. Esto es porque te encuentras en el modo "normal". Para escribir, presiona "i" (cambiar a modo "insert") y escribe lo que sea. Cuando termines, pulsa "esc" para volver a modo normal. Finalmente, pulsa ":" para entrar en modo "command line", y escribe "wq" ("w" para "write", es decir, guardar cambios; y "q" para "quit", es decir, salir de vim): | ||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
# Crear un archivo en el sistema de archivos de la VM | # Crear un archivo en el sistema de archivos de la VM | ||
$ cd /home | $ cd /home | ||
− | $ vi hola.txt | + | $ sudo vi hola.txt |
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 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: | ||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
+ | #Sal de la terminal de la máquina virtual | ||
+ | $ exit | ||
# Apagar la máquina | # Apagar la máquina | ||
$ vagrant halt #(la opción -f simula un apagado forzado) | $ vagrant halt #(la opción -f simula un apagado forzado) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 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: | ||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
# Iniciar de nuevo la máquina | # Iniciar de nuevo la máquina | ||
$ vagrant up | $ vagrant up | ||
+ | # Entrar en la máquina mediante ssh | ||
+ | $ vagrant ssh | ||
# Verificar que el fichero sigue presente | # Verificar que el fichero sigue presente | ||
$ cat /home/hola.txt | $ cat /home/hola.txt | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ==== 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: | ||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
+ | # Salir de la máquina virtual | ||
+ | $ exit | ||
# Destruir la máquina y liberar los recursos | # Destruir la máquina y liberar los recursos | ||
$ vagrant destroy | $ vagrant destroy | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | == 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. | |
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
Línea 114: | Línea 230: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == Carpetas compartidas y redirección de puertos | + | == 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: | |
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
# Crear un directorio para el segundo ejercicio | # Crear un directorio para el segundo ejercicio | ||
− | $ mkdir | + | $ mkdir ejercicio2 |
− | $ cd | + | $ cd ejercicio2 |
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ==== 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: | ||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
Línea 133: | Línea 253: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ==== Levantar la máquina virtual ==== | |
+ | |||
+ | Ahora que hemos configurado el entorno con la box de Nginx, levantamos la máquina virtual: | ||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
Línea 140: | Línea 262: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ==== 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: | ||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
Línea 147: | Línea 271: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 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: | ||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
Línea 153: | Línea 281: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 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: | ||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
Línea 160: | Línea 292: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ==== 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. | ||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
+ | # 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 | # Crear el archivo index.html dentro de la máquina virtual | ||
− | $ echo '<h1>Bienvenido a Nginx en Vagrant</h1>' > | + | $ echo '<h1>Bienvenido a Nginx en Vagrant</h1>' > index.html |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 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. | |
− | |||
− | |||
− | |||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
− | + | # Desde el host | |
− | $ | + | $ echo '<h2>Modificado desde el host</h2>' >> www/index.html |
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 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: | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
+ | # Apagar la máquina | ||
$ vagrant halt | $ vagrant halt | ||
− | |||
− | |||
− | + | # Destruir la máquina | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
$ vagrant destroy | $ vagrant destroy | ||
</syntaxhighlight> | </syntaxhighlight> |
Revisión actual del 20:47 20 nov 2024
Contenido
- 1 Vagrant
- 1.1 Instalación de Vagrant
- 1.2 Introducción a Vagrant
- 1.2.1 Pasos iniciales
- 1.2.1.1 ¿Por qué no debemos tener más de un `Vagrantfile` en el mismo directorio?
- 1.2.1.2 Crear un directorio para el primer ejercicio
- 1.2.1.3 Inicializar un entorno con un `Vagrantfile`
- 1.2.1.4 Levantar la máquina virtual
- 1.2.1.5 Verificar que tenemos dos sistemas funcionando
- 1.2.1.6 Ver el estado de las máquinas virtuales
- 1.2.1.7 Entrar en la máquina virtual
- 1.2.1.8 Crear un fichero en el sistema guest
- 1.2.1.9 Apagar la máquina y liberar recursos
- 1.2.1.10 Levantar la máquina nuevamente
- 1.2.1.11 Parar y destruir la máquina virtual
- 1.2.1 Pasos iniciales
- 1.3 Gestión de Boxes
- 1.4 Carpetas Compartidas y Redirección de Puertos
- 1.4.1 Crear un directorio para el segundo ejercicio
- 1.4.2 Inicializar el entorno con la box "obihann/nginx"
- 1.4.3 Levantar la máquina virtual
- 1.4.4 Verificar la carpeta compartida
- 1.4.5 Configurar la redirección de puertos
- 1.4.6 Recargar la máquina virtual
- 1.4.7 Añadir un archivo index.html
- 1.4.8 Modifica el archivo index.html desde el host
- 1.4.9 Parar y destruir la máquina virtual
Vagrant
Instalación de Vagrant
Instrucciones para instalar Vagrant, VirtualBox y Ansible sobre Ubuntu 22.04 (Jammy Jellyfish):
# Actualizar la lista de paquetes
sudo apt update
# Instalar vagrant, ansible y virtualbox
sudo apt install vagrant ansible virtualbox
Si el paquete vagrant no está disponible tendrás que añadir manualmente 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
sudo apt update && 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. Con el comando "vi" realmente estamos abriendo el editor "vim". Cuando entres notarás que aunque escribas, no aparece texto. Esto es porque te encuentras en el modo "normal". Para escribir, presiona "i" (cambiar a modo "insert") y escribe lo que sea. Cuando termines, pulsa "esc" para volver a modo normal. Finalmente, pulsa ":" para entrar en modo "command line", y escribe "wq" ("w" para "write", es decir, guardar cambios; y "q" para "quit", es decir, salir de vim):
# 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