Laravel Homestead

Laravel Homestead es un "box" de Vagrant que te va a ayudar a configurar en una máquina virtual un entorno de desarrollo para poder trabajar con Laravel, sin la necesidad de instalar PHP, un servidor web o cualquier otro software en tu ordenador. Esto lo convierte en un entorno completamente desechable, ya que podrás eliminarlo y volver a crearlo en cuestión de minutos.

Homestead incluye un servidor web Nginx, PHP 7.2, PHP 7.1, PHP 7.0, PHP 5.6, MySQL, PostgreSQL, Redis, Memcached, Node, y todo lo que necesitas para construir aplicaciones con Laravel.

Instalar Laravel Homestead

Requisitos

Estas son algunas herramientas que vas a necesitar:

  • Vagrant: te va a permitir instalar el entorno de desarrollo de Laravel, a través del "box" laravel/homestead, que trae todo el software necesario para poder utilizar Laravel en una máquina virtual.
  • VirtualBox: te va a permitir lanzar una máquina virtual dentro de nuestro ordenador, donde instalaremos el entorno de desarrollo de Laravel.
  • Composer: es un manejador de dependencias de PHP.

Puedes seguir estos tutoriales para instalarlas:

Instalar Homestead en modo global

Instalar Homestead Vagrant Box

Una vez que has instalado VirtualBox y Vagrant, tienes que añadir el "box" laravel/homestead a Vagrant. Cuando te pregunte por el software con el que se va a utilizar este box, selecciona la opción de virtualbox.

vagrant box add laravel/homestead

TIP

Si este comando falla asegúrate de tener instalada la última versión de Vagrant.

Instalar Homestead

Ahora tienes que instalar Homestead clonando el repositorio en tu directorio "home"; así podrás utilizarlo en todos tus proyectos Laravel:

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

Utiliza la última versión estable:

cd ~/Homestead
git checkout v7.9.0

Después, ejecuta el siguiente script para crear el archivo de configuración Homestead.yaml:

bash init.sh

Configurar Homestead

Las siguientes configuraciones se realizan dentro del archivo Homestead.yaml.

  1. Configurar proveedor

La propiedad provider indica el software que vas a utilizar junto a Vagrant, que puede ser: virtualbox, vmware_fusion, vmware_workstation, parallels o hyperv.

provider: virtualbox
  1. Configurar carpetas compartidas

La propiedad folders enumera todas las carpetas que quieres compartir con el entorno Homestead. Los archivos de estas carpetas se sincronizarán entre tu ordenador y el entorno Homestead.

folders:
    - map: ~/code
      to: /home/vagrant/code

Si vas a utilizar Homestead para varios proyectos, utiliza la siguiente configuración:

folders:
    - map: ~/code/project1
      to: /home/vagrant/code/project1

    - map: ~/code/project2
      to: /home/vagrant/code/project2

Para habilitar NFS, simplemente necesitas añadir lo siguiente:

folders:
    - map: ~/code
      to: /home/vagrant/code
      type: "nfs"

TIP

Si utilizas NFS, debes instalar el plugin vagrant-bindfs para manejar correctamente los permisos de usuario dentro del entorno Homestead.

También puedes añadir otras opciones utilizando la propiedad options:

folders:
    - map: ~/code
      to: /home/vagrant/code
      type: "rsync"
      options:
        rsync__args: ["--verbose", "--archive", "--delete", "-zz"]
        rsync__exclude: ["node_modules"]
  1. Configurar Nginx

La propiedad sites permite vincular un “dominio” a una carpeta del entorno Homestead.

sites:
    - map: homestead.test
      to: /home/vagrant/code/Laravel/public

Si cambias esta propiedad después de arrancar Homestead, deberías reiniciar Vagrant para actualizar la configuración de Nginx en la máquina virtual:

vagrant reload --provision
  1. Configurar los hosts

Los “dominios” que hayas utilizado para configurar Nginx tienes que añadirlos al archivo hosts de tu ordenador, que se encuentra en /etc/hosts.

192.168.10.10  homestead.test

Asegúrate de que la IP utilizada es la que viene en el archivo de configuración Homestead.yaml. Una vez hecho esto podrás acceder al sitio web desde tu navegador:

http://homestead.test

Lanzar Homestead

Una vez editado el archivo Homestead.yaml, ejecuta el comando vagrant up desde el directorio de tu proyecto. Vagrant arrancará la máquina virtual y configurará automáticamente el entorno Homestead.

Para actualizar la máquina virtual, utiliza el comando: vagrant reload --provision.

Para apagar la máquina virtual: vagrant destroy --force.

Acceder a Homestead desde cualquier directorio

Si quieres poder lanzar el comando vagrant up desde cualquier directorio, puedes añadir esta función a tu archivo ~/.zshrc:

function homestead() {
  (cd ~/Homestead && vagrant $*)
}

Ahora ya puedes lanzar comandos del tipo homestead up o homestead ssh desde cualquier directorio en tu ordenador.

Alias

Se pueden añadir alias a la máquina virtual Homestead modificando el archivo aliases del directorio Homestead.

alias c='clear'
alias ..='cd ..'

Después de modificar este archivo deberás reiniciar la máquina virtual con el comando vagrant reload --provision.

Instalar Homestead por proyecto

En vez de instalar Homestead globalmente y compartir una misma configuración para todos los proyectos, puedes configurar Homestead para cada proyecto, lo cual será mucho más cómodo si trabajas con más gente, ya que podréis ejecutar vagrant up desde el propio directorio del proyecto.

Para instalar Homestead directamente en el proyecto, utiliza Composer:

composer require laravel/homestead --dev

Una vez instalado, usa el siguiente comando para generar los archivos Vagrantfile y Homestead.yaml:

php vendor/bin/homestead make

Después, ejecuta vagrant up y ya podrás acceder al proyecto desde http://homestead.test después de haber modificado correctamente el archivo hosts.

Conexión SSH

Para conectarte a la máquina virtual por SSH:

vagrant ssh

Conexión a la base de datos

Para conectarte a la base de datos desde tu ordenador, tienes que conectarte al host 127.0.0.1 en el puerto 33060 (MySQL) o 54320 (PostgreSQL). El nombre de usuario y la contraseña son homestead / secret.

TIP

Esto sólo aplica cuando nos conectemos a la base de datos desde cualquier cliente en nuestro ordenador. En nuestra configuración de Laravel mantendremos los puertos por defecto, 3306 y 5432, ya que Laravel corre dentro de la máquina virtual.

Backups de la base de datos

Homestead puede hacer backups automáticos de la base de datos cuando eliminamos la máquina virtual. Para ello, tenemos que añadir lo siguiente al archivo Homestead.yaml:

backup: true

Una vez configurado, Homestead exportará la base de datos a la carpeta mysql_backup/postgres_backup cuando ejecutemos el comando vagrant destroy.

Configurar Cron jobs

Para ejecutar Cron jobs de Laravel en la máquina virtual, tienes que habilitarlos de la siguiente manera:

sites:
  - map: homestead.test
    to: /home/vagrant/code/public
    schedule: true

El Cron job será definido en la carpeta /etc/cron.d de la máquina virtual.

Puertos

Por defecto, los siguientes puertos son reenviados al entorno Homestead:

  • SSH: 2222 → Forwards To 22
  • ngrok UI: 4040 → Forwards To 4040
  • HTTP: 8000 → Forwards To 80
  • HTTPS: 44300 → Forwards To 443
  • MySQL: 33060 → Forwards To 3306
  • PostgreSQL: 54320 → Forwards To 5432
  • MongoDB: 27017 → Forwards To 27017
  • Mailhog: 8025 → Forwards To 8025
  • Minio: 9600 → Forwards To 9600

Si quieres reenviar puertos adicionales:

ports:
  - send: 50000
    to: 5000
  - send: 7777
    to: 777
    protocol: udp

Compartir el entorno de desarrollo

A veces puede que necesites compartir lo que estás desarrollando con algún compañero o con algún cliente.

Si sólo tienes un único sitio web configurado en tu entorno Homestead, podrás hacer esto mediante el comando:

vagrant share

Si tienes más de un sitio web configurado, accede por SSH a la máquina virtual mediante vagrant ssh y ejecuta:

share homestead.test

Esto compartirá el dominio homestead.test.

Después verás una pantalla de Ngrok con los logs de actividad y las URLs del sitio compartido.

WARNING

Recuerda que Vagrant no es seguro y estarás exponiendo tu máquina virtual a cualquier persona en Internet cuando ejecutes el comando share.

Actualizar Homestead

Para actualizar Homestead, puedes hacerlo siguiendo dos sencillos pasos.

Primero, deberías actualizar Vagrant con el comando:

vagrant box update

Segundo, tienes que actualizar el código base de Homestead. Si clonaste el repositorio, puedes hacer git pull origin master.

Si instalaste Homestead con Composer, asegúrate de que el archivo composer.json contiene la versión que quieres instalar, por ejemplo, "laravel/homestead": "^7", y actualiza tus dependencias:

composer update