¡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:
Me he encontrado con este problema:
Check your Homestead.yaml (or Homestead.json) file, the path to your private key does not exist.
SOLUCIÓN:
Use git bash para solucionarlo:
Copiar y pegar el siguiente comando, el mail puede ser suyo
Yo en lo personal no planeo virtualizar nada, prefiero desarrollar usando mi propia máquina, sin contar que la virtualización te consume recursos… espero que esto no sea un hueco para seguir el curso
Me agrada montar entornos virtuales para poder practicar y combinar todo lo aprendido. En caso de romperla, puedo crear otra sin romper mi máquina principal.
Siento que usar temas de entornos virtuales como vagran y virtualbox le quitan la emocion de los errores de depencias y sobre todo de desarmar la pc para saber el error, por que luego llevarlo al servidor se pone complejo por que ahi no funciona tu super comando genial xd, aunque docker tambien te libra de eso.
Vagrant y Homestead desde que los conoci en Platzi, ha sido lo mejor para montar todos los proyectos en mi equipo. Se puede hasta usar Homestead para diferentes versiones de PHP sin problema.
Hola a todos, si la aplicación que vamos a desarrollar, la queremos montar en AWS, las maquinas virtuales que simulan el entorno de producción, me sirven para cualquier servidor de producción???. Gracias.
Me encanta el carisma de Mauro, Jajajaja…
Pero creo que usaré Docker por experimentar, tome el curso de docker para el de django avanzado y que decisión más inteligente porque no lo dejo de usar ahora.
Hola a todos!, he creado un repositorio en GitHub con todo lo neceseario para arrancar el proyecto con Docker.
Este repositorio tiene los servicios de: PHP(Symfony) + Nginx + MySQL, el esqueleto (Symfony) del proyecto ya está montado además la conexión a la BBDD también, espero que pueda ayudarles: https://github.com/JesusCH92/symfony-dockerizado.git
Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.