Ya sabemos que el principal objetivo de Laravel es hacerte mucho más fácil, rápido y especialmente divertido el desarrollo de tus ideas y aplicaciones. Por otra parte, ya te explicamos las ventajas de utilizar Vagrant, un programa que facilita la administración de máquinas virtuales de desarrollo

Hoy les presentamos el siguiente paso de usar Vagrant, se llama Homestead y viene de la mano del mismo desarrollador de Laravel, Taylor Otwell, así que no tienes nada que temer, Taylor quiere que seas feliz y después de tener Homestead instalado, lo serás.

Vagrant, Laravel

Homestead combina Vagrant + Laravel creando así la unión perfecta para empezar a desarrollar tu aplicación web rápidamente. Homestead es básicamente una caja o ‘box’ en la terminología de Vagrant que trae instalado todo el software necesario para programar una aplicación en Laravel, entre ellos están:

  • Ubuntu 14.04
  • PHP 5.6
  • HHVM
  • Nginx
  • MySQL
  • Postgres
  • Node (With Bower, Grunt, and Gulp)
  • Redis
  • Memcached
  • Beanstalkd
  • Laravel Envoy
  • Fabric + HipChat Extension

Si no conoces algunos no te preocupes, es para aplicaciones más complejas o que necesitan mejor rendimiento.

Requisitos

Homestead necesita Vagrant 1.6 y es compatible con cualquier software de virtualización.
Como nota importante si vas a utilizar Vagrant en Windows necesitas activar la virtualización (VT-x) en la configuración de la BIOS.

Instalación y configuración

Instalar Vagrant

Vagrant Virtualbox

Instalar Vagrant es muy sencillo, sólo necesitas ejecutar los instaladores de VirtualBox y de Vagrant (vienen para Windows, Linux y Mac).

En este post anterior te explicamos todo sobre Vagrant.

Descargar la caja de Vagrant

Ya es claro que Homestead funciona sobre Vagrant así que una vez lo tengan instalado podrían ejecutar el siguiente comando:

vagrant box add laravel/homestead

Éste comando descargará e instalará la caja oficial de Homestead, la descarga son aproximadamente 700mb pero lo hace rápidamente (según tu Internet), así que no desesperes que ya viene lo mejor!

Clonar el repositorio de Homestead

Una vez hayas descargado correctamente la caja de Vagrant debes clonar el repositorio de Homestead desde Github con el siguiente comando:

git clone https://github.com/laravel/homestead.git Homestead

Es recomendable que lo clones en una carpeta de fácil acceso.

Establecer llave SSH

¿Muchos pasos? ¡Ya casi está! Abre el archivo Homestead.yaml y escribi la ruta absoluta de una llave SSH, generalmente es ~/.ssh/id_rsa.pub. Si no tienes una llave SSH creada puedes crear una ejecutando el comando:

ssh-keygen -t rsa -C "[email protected]"

Las llaves SSH son muy útiles cuando trabajamos con herramientas como Git

Carpetas compartidas

Homestead te permite configurar las carpetas compartidas entre tu computador y la máquina virtual. Las carpetas compartidas sirven para tener los archivos sincronizados entre los dos ambientes, cualquier cambio que hagas en la máquina virtual se verá reflejado en tu computador y viceversa, la principal ventaja es que no necesitas tener instalado decenas de programas con diferentes versiones para correr tu código, simplemente inicias la máquina virtual que necesitas y ya está.

La opción de configuración en el archivo Homestead.yaml se llama folders, el cual está conformado por dos índices map y to, map corresponde a la carpeta de tu computador y to a la carpeta en la máquina virtual. Puedes agregar todas las carpetas compartidas que necesites.

folders:
    - map: ~/Infinite/UP
      to: /home/vagrant/Github
    - map: ~/Infinite/Me
      to: /home/vagrant/Personal

Configurar sitios en Nginx

Nginx

Si leyeron cuidadosamente la lista de software que viene preinstalado con Homestead habrán notado que no está Apache, esto es porque Nginx es más rápido y fácil de configurar y además completamente compatible con PHP y Laravel (Te extrañaremos Apache).

Por esta y muchas otras razones Homestead lo tiene como servidor web para tus maravillosos desarrollos y hacerte la vida más fácil. Con Homestead no tienes que preocuparte por instalarlo, ni crear los sitios, ni el enlace simbólico, etc., lo único que tienes que hacer es editar la opción sites, acá también están las opciones map y to, donde map corresponde al dominio local o de desarrollo y to a la carpeta en la máquina virtual. Puedes agregar todos los sitios que necesites. Recuerda que Homestead está pensado para guardar todos tus proyectos de Laravel o PHP en un solo lugar.

sites:
    - map: laravel-reader.app
      to: /home/vagrant/Github/laravel-reader/public
    - map: my-idea.dev
      to: /home/vagrant/Personal/my-idea/public

Iniciar Vagrant

El último paso y el más divertido y sencillo de todos es ejecutar vagrant up en la carpeta donde descargaste Homestead y esperar tan solo unos instantes a que tus sitios y carpetas compartidas sean creados y configurados automáticamente gracias a la magia del Internet!. Mentiras: Vagrant ejecuta el archivo Vagrantfile el cual carga el archivo de configuración Homestead.yaml y lo pasa a través del archivo de Ruby scripts/homestead.rb el cual realiza toda la configuración haciendo uso de otros scripts de Bash que copian archivos, crear configuraciones, inician y restauran servicios.

Como último paso debes agregar tus dominios locales o de desarrollo al archivo hosts de tu sistema operativo de la siguiente manera:

127.0.0.1  laravel-reader.app
127.0.0.1  my-idea.dev

Generalmente este archivo esta ubicado en /etc/hosts en plataformas *UNIX o en C:\Windows\System32\drivers\etc\hosts en Windows.

Esto hace que cuando hagas una petición a my-idea.dev:8000 en el navegador la máquina virtual sea la que responda y no un dominio de Internet.

Ahora puedes abrir tu navegador y entrar a la dirección http://my-idea.dev:8000 y tu aplicación te recibirá con los brazos abiertos.

Uso diario

Conectarse máquina virtual

Para conectarte a la máquina virtual basta con ejecutar el comando vagrant ssh en el directorio donde descargaste Homestead y ya está, te recibirá una copia fresca de Ubuntu 14.04.1 LTS y todo lo necesario para empezar a programar.

Ahora, naturalmente, vas a alguna de las carpetas que configuraste e instalas Laravel, algo que ya te sabes de memoria, no? NO!? ;).

Agregar más sitios

Bueno, todo muy bonito la primer vez pero ¿Qué sucede si quiero agregar más sitios? Vale, pues muy fácil, estamos para ayudarnos. Solo tienes que agregar la nueva entrada en la opción sites en el archivo de configuración Homestead.yml luego ejecutar vagrant provision y listo. (Recuerda agregar tu sitio también en el archivo de hosts.)

Puertos

Vagrant no Homestead mapea o conecta puertos desde la máquina virtual hacia tu computador, esta es una de sus principales ventajas es que no tienes los puertos principales ocupados con aplicaciones que ni sabes cual ocupan como WAMP.

Homestead tiene los puertos configurados de la siguiente manera:

  • SSH: 2222 -> Disponible en 22
  • HTTP: 8000 -> Disponible en 80
  • MySQL: 33060 -> Disponible en 3306
  • Postgres: 54320 -> Disponible en 5432

Es decir, que si necesitas conectarte a la base de datos MySQL o Postgress de la máquina virtual desde Navicat deberías conectarte a la dirección 127.0.0.1, al puerto 33060 o 54320 respectivamente con las credenciales homestead:secret.

Consejos y recomendaciones

Instala NodeJS, Ruby, PHP, Nginx, MySQL, Postgres, Redis, etc, en una maquína virtual y Git, el software de control de versiones en tu computador, he probado muchas maneras y está es la mejor que he encontrado, conocer el historial de tu código, saber quien cambió o eliminó es algo que necesitas de vez en cuando sin necesidad de ejecutar Vagrant, así que viene muy a la mano tenerlo instalado en tu computador en vez de en la máquina virtual.

Personalmente no me gusta tener que escribir 5 carácteres más (:8000) en el navegador para entrar a la aplicación, por lo que cambié en el archivo hosts la dirección IP local por la dirección IP de Homestead 192.168.10.10 y así simplemente  con el dominio tengo para ver mi idea viviendo y respirando.

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Crea un entorno de desarrollo virtual con Vagrant Lección siguiente Aprende a instalar y usar Vagrant y Laravel Homestead