Virtualizando con Homestead

5/17

Lectura

Entorno de desarrollo

¡Felicitaciones! Estás listo/a para ensuciarte las manos conmigo.

Excelente por Mr burns

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:

Esquema explicativo de nuestro entorno de trabajo

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!

Aportes 17

Preguntas 1

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

Si tienes instalado docker y docker-compose puedes levantar un proyecto en un minuto:

docker-compose.yaml

version: '2'

services:
  symfony:
    image: 'docker.io/bitnami/symfony:1-debian-10'
    ports:
      - '5000:8000'
    volumes:
      - '.:/app'
    environment:
      - SYMFONY_PROJECT_NAME=simple-jobs
      - MARIADB_HOST=mariadb
      - MARIADB_PORT_NUMBER=3306
      - MARIADB_USER=alberto
      - MARIADB_PASSWORD=secret
      - MARIADB_DATABASE=simple_jobs
    depends_on:
      - mariadb
  phpmyadmin:
    image: 'docker.io/bitnami/phpmyadmin:5-debian-10'
    ports:
      - '8080:8080'
      - '443:8443'
    depends_on:
      - mariadb
  mariadb:
    image: 'bitnami/mariadb:10.3'
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
      - MARIADB_USER=alberto
      - MARIADB_PASSWORD=secret
      - MARIADB_DATABASE=simple_jobs

En el mismo directorio ejecuta docker-compose up en tu terminal y vete a localhost:5000. Tambień tienes phpmyadmin en localhost:8080

No entiendo porque no utilizan Docker , Vagrant siempre me genera errores y problemas en las instalaciones , me paso igual en el curso de PHP , utilice este tutorial https://platzi.com/tutoriales/1901-symfony-framework-2020/5982-entorno-de-trabajo-para-symfony-usando-docker/ y pude configurar todo.(Ubuntu 20:04)

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

Les va a salir algo como esto, en mi caso di enter a todo !!!solo para realizar el curso!!!.

  1. Enter a file in which to save the key (/c/Users/you/.ssh/id_rsa): (ENTER)

  2. Enter passphrase (empty for no passphrase): (ENTER)

  3. Enter same passphrase again:(ENTER)

Leer si eres nuevo

  1. No lo menciona pero estos pasos que hizo solo funcionan si estás en Linux, específicamente en un entorno basado en Debian, como ubuntu.

Si eres usuario de Windows te recomiendo mucho más utilizar la herramienta Laragon.

Si eres un usuario intermedio, hay mejores herramientas que homestead en la actualidad, por ejemplo Docker.

Si tienes complicaciones con la instalación te recomiendo mil veces más optar por las opciones que menciono

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

Queremos Docker de una. La tendencia de VM esta bajando mucho gracias a Docker. ¿Se podra actualizar el curso con Docker?

Nos dice que pongamos 192.168.10.10 homestead.test en el archivo host pero no nos explica porque se hace eso.

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.

Salvo que seas Chuck Norris que va directo a producción 🤣🤣🤣

Todo listo!

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

Tengo ubuntu 16.04, me toco forzar para que instalara php7,4 y vagran 2. Pero por ahora va todo funcionando bien.

Por ahora me saltaré esta parte, no tengo planeado instalar una máquina virtual en mi PC. Espero no tener muchos problemas.