Cargando...

Implementar un entorno LAMP con Vagrant

Vagrant es una herramienta para crear entornos virtuales de una forma sencilla y replicable. En este artículo, te enseñaré a implementar algo básico, un entorno de desarrollo LAMP (Linux + Apache + MySQL + PHP).

Lo que aprenderás

    Beneficios de usar Vagrant
    Crear un entorno virtual en Vagrant
    Aprovisionamiento en Vagrant con Bash Script
    Sincronización de directorios en Vagrant
    Iniciar entorno Vagrant

Requisitos previos

    Tener instalado VirtualBox
    Tener instalado Vagrant

Beneficios de Vagrant

Es normal escuchar o leer que Vagrant es una herramienta orientada al desarrollo de software, pero lo cierto es que nos proporciona un flujo de trabajo unificado, es decir, es el mismo flujo independientemente si eres desarrollador o administrador de sistemas. La infraestructura se define en un archivo de configuración declarativo que describe todos los requisitos del servidor, sistema operativo, paquetes, configuraciones, usuarios, etc. Por tanto, podemos crear entornos de desarrollo idénticos al ambiente de producción, y de esta forma simplificamos errores al desplegar en producción.

No hace mucho tiempo, me topaba con errores al desplegar una aplicación en otro entorno por falta de alguna librería, un módulo en el servidor, permisos, etc. Estas situaciones son comunes cuando trabajas con un gestor de paquetes como XAMPP, por ejemplo. También, me pasó algunas veces en la universidad, realizaba mi práctica en una máquina virtual, luego lo probaba en otro equipo y no funcionaba igual, en esos casos toca correr para arreglarlo. En el campo laboral no te puedes permitir ese tipo de errores porque los costos de corregir un error aumentan exponencialmente cuando más se acerca a producción. El clásico “En mi máquina funciona” con Vagrant es cosa del pasado, ahora podemos decir, “En producción, también funciona”.

Otra cosa que me encanta de Vagrant es la posibilidad de usar las herramientas ya conocidas. Si trabajamos en un entorno remoto, tenemos que renunciar a nuestros editores y programas favoritos, mientras que Vagrant funciona en el sistema local y ofrece la flexibilidad para usar el editor de código, IDE y navegador preferido, todo desde la máquina física.

Vagrantfile

En el ejemplo que comparto ponemos en práctica las utilidades mencionadas. En el Vagrantfile se describen los requisitos de la máquina virtual, y luego tenemos un Script Bash que se encargará de instalar los paquetes y realizar las configuraciones, que para este caso son mínimas, únicamente se crea un sitio virtual en Apache. También, se utiliza el mecanismo básico de sincronización, de modo tal, que puedes escribir tu código en la máquina física y sincronizar el directorio de trabajo con el DocumentRoot del sitio en la máquina virtual.

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.hostname = "WebServer"
  config.vm.provider "virtualbox" do |vb|
    vb.name = "WebServer"
    vb.memory = "512"
    vb.cpus = "2"
    vb.linked_clone = true if Gem::Version.new(Vagrant::VERSION) >= Gem::Version.new('1.8.0')
  end

  config.vm.network "private_network", ip: "192.168.2.100"
  config.vm.synced_folder "App/WebApp", "/var/www/WebApp",
    owner: "www-data", group: "www-data"
  config.vm.provision "shell", path: "Config/config.sh"
end
A continuación, una breve explicación sobre el contenido del Vagrantfile. Estoy usando una box ubuntu/bionic64 (Ubuntu 18.04) para VirtualBox, la máquina virtual tendrá 512 MB de RAM y 2 CPU. Se asignará una dirección IP estática, 192.168.2.100 (verifica que esta dirección no esté en el rango de tu red local). Posteriormente se hace la sincronización del directorio que contiene la aplicación con el directorio del sitio en la máquina virtual, se le asigna el usuario www-data como propiestario y grupo www-data al directorio remoto. Finalmente, se incluye el Script Bash para hacer la instalación de los paquetes y configuraciones requeridas.

Aprovisionamiento en Vagrant con Bash

El siguiente Script instala Apache, MySQL y PHP 7.3. Además, realiza una configuración básica de un sitio virtual y deshabilita el sitio virtual que tiene Apache por omisión, no obstante, puedes agregar las configuraciones necesarias para tu escenario.También, se crea un usuario en MySQL para acceder a las bases de datos.

#!/usr/bin/env bash

SitePath="/var/www/WebApp"
UserDB="user_db"
PassDB="Password_DB*"

# Instalación de paquetes
sudo apt update
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install apache2 mysql-server php7.3 php7.3-mysql php7.3-mbstring -y

# Configuración del sitio virtual PHP
echo "<VirtualHost *:80>
   DocumentRoot $SitePath
   ErrorLog \${APACHE_LOG_DIR}/webapp_error.log
   CustomLog \${APACHE_LOG_DIR}/webapp_access.log combined
</VirtualHost>" | sudo tee /etc/apache2/sites-available/webapp.conf

sudo a2ensite webapp.conf
sudo a2dissite 000-default.conf
sudo /etc/init.d/apache2 restart

# Crear un usuario para MyQSL
mysql -u root -e "CREATE USER '$UserDB'@'localhost' IDENTIFIED BY '$PassDB';"
mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO '$UserDB'@'localhost';"
mysql -u root -e "FLUSH PRIVILEGES;"
Debo decir que Bash es posiblemente la forma más fácil, pero no es la única opción y tampoco la mejor. Vagrant también se integra con las herramientas de gestión de configuración existentes como Ansible, Chef, Puppet o SaltStack.

Iniciar el entorno Vagrant

Está todo preparado, solo nos queda iniciar el entorno. Es tan sencillo como ejecutar desde la línea de comandos:

vagrant up

¿Quiéres hacer el despliegue en producción? Consulta nuestro artículo Desplegar aplicación en producción con Vagrant.

Después de que finalice el proceso podemos acceder con la dirección IP desde el navegador, tendremos la aplicación en funcionamiento y por supuesto, podemos continuar el desarrollo. En este ejemplo la aplicación es un simple phpinfo.

Visualizando el sitio web en el navegador



  • John Doe
    43 Sales$156,24 Totals
    62%
  • Rosy O'Dowell
    12 Leads$56,24 Totals
    32%

With supporting text below as a natural lead-in to additional content.

Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled.