Virtualización y configuración de entornos de desarrollo con Homestead
Clase 5 de 17 • Curso de Symfony Framework
Entorno de desarrollo
¡Felicitaciones! Estás listo/a para ensuciarte las manos conmigo.
Claro que antes de tirar nuestra primera línea de código debemos preparar el terreno.
Hablemos un poco sobre los entornos de trabajo.
Típicamente en un proyecto de software nos encontraremos con, al menos, dos entornos diferentes:
- Desarrollo
- Producción
Salvo que seas Chuck Norris que va directo a producción claro ;)
Bien, asumiendo que no lo eres, acordemos en que tendremos un entorno (una computadora con su sistema operativo, software de base y demás) donde se conectarán a nuestra aplicación los usuarios reales y otro donde tú trabajarás en las increíbles mejoras que le realizarás.
Está bien que la aplicación se rompa de tanto en tanto en el entorno de desarrollo… es lo esperable.
No está bien que la aplicación se rompa en el entorno productivo.
Un esquema simplificado de trabajo será el siguiente:
El código nuevo se escribe (¡y se prueba!) en el entorno de desarrollo y, una vez está listo para consumo humano se despliega en producción.
Un punto muy importante: el código no sabe dónde se está corriendo… es tu responsabilidad garantizar que lo que en tu computadora funciona también lo haga en Producción.
Un modo muy simple de dar esa garantía es usar una computadora exactamente igual en producción y en desarrollo.
¡Alto! ¡No corras todavía! Eso no significa que tengas que comprar una computadora diferente para cada proyecto que encares… afortunadamente tenemos una mejor solución: la virtualización.
De qué se trata la virtualización
La virtualización es una técnica que permite emular un entorno de computación, es decir, correr un sistema dentro de otro.
Las principales ventajas de utilizar entornos virtualizados son:
- No requieres comprar y montar hardware especial.
- Si algo sale mal se puede tirar todo a la basura y empezar de nuevo sin mayores costos.
- Al no instalar nada en la computadora física es muy fácil mantener la independencia entre proyectos.
El último punto es probablemente el más importante… si trabajaste en paralelo en varios proyectos de software sabrás de los dolores de cabeza que trae cuando un proyecto usa la versión 1.x de un lenguaje y otro la 2.x… al virtualizar eliminas el problema de tajo.
Qué herramientas existen
Existen diversas herramientas que permiten generar entornos virtuales, entre ellas:
- VirtualBox
- VMWare
- Qemu
Todos estos son motores de virtualización, aplicaciones que puedes instalar en tu computadora y, a través de ellos, crear hardware virtual al cual puedes instalarle un sistema operativo diferente y cuantas aplicaciones quieras, sin que ello interceda con tu día a día.
Otra herramienta que está muy de moda estos días y que, precisamente por ello, no quiero dejar de mencionar es Docker.
A los fines prácticos no hay mucha diferencia entre usar Docker o alguna de las otras que te menciono, sin embargo, internamente son muy diferentes.
Qué herramientas usaremos
En este curso utilizaremos VirtualBox (es gratis y puedes descargarlo de aquí) pero, para hacernos la vida un poco más simple agregaremos un par de herramientas que se montan sobre esta: Vagrant y Homestead.
Vagrant es una herramienta de automatización de máquinas virtuales.
De lo que se trata es de un script capaz de leer una especificación y crear una máquina virtual acorde y, una vez creada, mantenerla actualizada.
Como se trata de una herramienta de línea de comandos es muy buena para utilizarse dentro de scripts.
Vagrant también es gratuito y puedes descargarlo de aquí.
Y por último usaremos una herramienta que se monta sobre Vagrant para hacer algunas cosas todavía más fáciles (así de vago soy): Homestead.
Homestead es otra herramienta de línea de comandos que permite automatizar algunas tareas típicas del montaje de entornos virtuales para desarrollo web (descargar, instalar y configurar un servidor web por ejemplo).
¡Ya puedes armar tu entorno de trabajo!
Preparando nuestro entorno
Lo primero que haremos será inicializar el entorno Homestead, para ello ejecuta el siguiente comando:
vagrant box add laravel/homestead
Este comando descargará la máquina virtual base sobre la que armarás la tuya (en realidad será Homestead quien se encargue de esto, no te preocupes).
Cuando haya finalizado este comando será hora de instalar Homestead. Para ello ejecuta:
git clone https://github.com/laravel/homestead.git ~/Homestead
Con este comando descargarás Homestead a tu directorio personal.
A continuación ejecuta:
cd ~/Homestead git checkout release bash init.sh
Al finalizar contarás con un archivo de configuración de Homestead (Homestead.yaml) similar a:
--- ip: "192.168.10.10" memory: 2048 cpus: 2 provider: virtualbox authorize: ~/.ssh/id_rsa.pub keys: - ~/.ssh/id_rsa folders: - map: ~/code to: /home/vagrant/code sites: - map: homestead.test to: /home/vagrant/code/public databases: - homestead features: - mariadb: false - ohmyzsh: false - webdriver: false # ports: # - send: 50000 # to: 5000 # - send: 7777 # to: 777 # protocol: udp
Por el momento lo único que haremos será agregar estas líneas:
php: "7.3" type: "symfony4"
Justo debajo de
folders: - map: ~/code to: /home/vagrant/code
Ten cuidado de usar siempre espacios (¡no tabs!), de otro modo el YAML será inválido.
Por si no estás familiarizado con YAML, se trata de un lenguaje de etiquetas bastante potente y sumamente estructurado.
En Symfony se utiliza ampliamente así que vale la pena conocerlo un poco.
Listo, ahora pasemos a arreglar el archivo hosts (/etc/hosts si estás en Linux o Mac o C:\Windows\System32\Drivers\etc\hosts si estás en Windows).
En ese archivo agrega:
192.168.10.10 homestead.test
Para finalizar ejecuta estos comandos:
cd ~/Homestead vagrant up
Y con eso tendrás tu entorno Homestead listo para desarrollar, ¡yuhu!
Pues bien, ahora que tenemos todo lo necesario… Symfony, ¡allí vamos!