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.