Hace años utilizaba XAMPP. Después me pasé a MAMP, pero desde hace un tiempo, he decidido instalar directamente todo lo necesario en mi macbook pro para desarrollar de forma local. No fue muy complicado utilizando homebrew y siguiendo este tutorial. En poco más de 1 hora ya tenía todos mis sitios en desarrollo configurados y podía trabajar tranquilamente.
Desde que actualicé a Yosemite, mi configuración de servidor ha empezado a fallar. Un error recurrente de php empezó a aparecer en casi todos mis sitios:
Por lo que he podido leer este error ocurre cuando el sistema operativo llega al límite del número de archivos que puede tener abierto. Al final no me ha quedado muy claro si era culpa del Xdebug o de la última versión de MySQL, el caso es que por más que lo he intentado fui incapaz de dar con la solución a este problema. Sólo un reinicio conseguía solucionar temporalmente este error, lo cual me recordaba viejos tiempos de cuando era usuario de Windows 95 y en los que pasaba más tiempo reiniciando que trabajando.
Aguanté de todas formas durante un tiempo, ya que el error no ocurría muy a menudo aunque cuando salía, siempre era en el momento más inoportuno… Maldita ley de murphy. Entonces ya había empezado a escuchar hablar de Vagrant pero todavía no había dado el paso de utilizarlo. Finalmente, llegó El Capitán y cuando pensaba que el error había desaparecido, a los pocos días el error volvió a aparecer y la cosa se puso todavía peor.
En Yosemite el error salía de pascuas en ramos pero en El Capitán empezó a aparecer muy a menudo. También es posible que sea porque tengo más aplicaciones instaladas o ejecutándose, pero el caso es que coincidió con la actualización.
Harto de tener que reiniciar y revisar continuamente google probando soluciones, decidí que era la excusa que necesitaba para probar por fin Vagrant.
¿Qué es Vagrant?
Supongo que habrás instalado alguna vez un software de virtualización, sea Parallels, VMware, VirtualBox, … Y posiblemente hayas instalado una Ubuntu, Debian, Fedora, … para trastear un poco.
Pues bien Vagrant, en resumidas cuentas, te permite instalar y configurar un servidor en una máquina virtual de la forma más sencilla que te puedas imaginar. Puedes tener tu máquina y servidor configurado en prácticamente menos tiempo de lo que te costaría hacerte un café (sin contar el tiempo de descargar la imagen del sistema operativo que elijas, claro).
Con un simple archivo llamado Vagrantfile en el que escribirás unas pocas líneas de código indicando qué sistema operativo quieres, qué hardware necesitas simular y una instrucción por consola “vagrant up”, tendrás tu máquina operativa en pocos minutos.
¿Por qué utilizar Vagrant?
Si trabajas de programador, seguro que te ha pasado alguna vez que tu código funciona perfectamente en tu máquina, lo subes al repositorio, otro compañero o tu cliente se lo descarga y te dice que no funciona. Tu respuesta inmediata sería:
Se acabaron estos días con Vagrant. En vez de compartir sólo tu código, puedes compartir la configuración de tu máquina virtual y tu compañero/cliente puede reproducir con Vagrant exactamente la misma máquina virtual, con tu misma configuración y probar tu código en el mismo entorno que tú has utilizado.
Dí adios a los problemas de versiones de php o me falta la extensión X. Da igual que lo montes en un Mac o un Windows, tu aplicación siempre correrá en la misma máquina virtual.
Para mi, supone el fin del error del que hablaba al principio del artículo. Desde que he migrado a Vagrant no he vuelto a sufrir el problema.
¿Convencido? Pues así de sencillo es utilizar Vagrant
- Instalar VirtualBox o cualquier otro software de virtualización. Para este tutorial, utilizaré VirtualBox.
- Instalar Vagrant.
- (Opcional) Instalar el plugin vagrant hostmanager. No es obligatorio, pero gracias a este paso no tengo que añadir manualmente las entradas a mi archivo “hosts”. Se añade automáticamente cuando arranco la máquina de desarrollo. Para instalarlo, abre el terminal y ejecuta el siguiente comando:
1vagrant plugin install vagrant-hostmanager - Crea un directorio por ejemplo llamado «vagrant-test». Abre otra vez la consola y entra en ese directorio.
- Desde consola, en ese directorio, escribe lo siguiente:
1vagrant init hashicorp/precise64 - Esta instrucción creará un archivo llamado Vagrantfile. En este archivo, podrás especificar todas las características que deseas en tu máquina virtual. No voy a profundizar mucho en este post, pero este podría ser el contenido básico de un archivo Vagrantfile.
123456Vagrant.configure(2) do |config|config.vm.box = "hashicorp/precise64"config.vm.network "private_network", ip: "192.168.33.10"config.vm.hostname = "vagrant-test.dev"config.vm.synced_folder "./", "/var/www"end
En estas 6 líneas de código, le estoy diciendo a Vagrant:
- Que me instale la imagen de máquina “hashicorp/precise64”
- Que configure una red privada y asigne la ip estática “192.168.33.10” a mi máquina.
- Que el hostname de mi máquina sea “vagrant-test.dev”.
- Que sincronice la carpeta “./“ con la carpeta “/var/www” de mi máquina virtual.
- Ejecutar por consola:
1vagrant up
Después de un rato esperando a que se descargue la imagen utilizada, la máquina estará lista para ser utilizada. Con “vagrant ssh”, accederás a tu máquina por ssh y podrás instalar apache o cualquier cosa que desees.
Esto no es más que el comienzo
Esto no es más que la punta del iceberg. Existe otro archivo (o múltiples archivos si los divides) llamado el provision file. En este archivo, podrás escribir instrucciones que quieres que se ejecuten cuando utilices “vagrant up”. Por ejemplo, actualizar el sistema, descargar, instalar y configurar apache, descargar módulos de php, … Las posibilidades son prácticamente infinitas. Puedes crear un archivo a tu medida y reutilizarlo tantas veces como quieras.
Vagrant está siendo utilizado ya por muchas personas y compañías y ya existen multitud de imágenes de máquinas que ya vienen con todo preinstalado para que puedas empezar a desarrollar: Scotchbox, VVV, VCCW, Homestead, …
También existen ya múltiples webs en las que puedes generar los archivos necesarios para configurar una máquina virtual utilizando una interfaz web: Rove.io, PuPHPet, …
En próximos artículos, hablaré de algunas de las boxes más interesantes que he podido probar.