> Manuales > Manual de Laravel

Instalación y configuración de Laravel Homestead, el entorno de desarrollo para Laravel basado en una máquina virtual completa, ideal para el desarrollo de aplicaciones usando el framework PHP.

Laravel Homestead

En este artículo vamos a ofrecer las pautas para contar con el mejor entorno de desarrollo posible para Laravel, el más profesional, fácil de instalar y de mayor versatilidad, ayudándonos de la virtualización de la máquina de desarrollo y Vagrant.

La fórmula tiene el nombre de Homestead, una herramienta oficial creada por el equipo de Laravel para facilitar la vida a los desarrolladores que quieran usar este framework PHP para comenzar un proyecto rápidamente.

Si bien es cierto que desde que apareció Laravel Sail el equipo de Laravel le ha dado mucha relevancia a este entorno de desarrollo basado en Docker, muchos seguimos prefiriendo Homestead, porque nos permite controlar mejor el rendimiento y la velocidad de la compilación de los assets del lado del frontend, como los bundles Javascript. Homestead es un poco más pesado y ocupa más espacio en el disco, pero tiene sus ventajas.

El problema de Homestead es que es un poco más complicado y laborioso de configurar en esta guía te vamos a explicar todos los detalles, incluso algunas configuraciones avanzadas que te permitirán resolver prácticamente cualquier duda que puedas tener. Pero, por si acaso lo necesitas, en el artículo de instalación de Laravel te explicamos al principio diversas alternativas de entornos de desarrollo si es que ves Homestead demasiado avanzado para ti.

La idea es que los desarrolladores tengamos que implementar el menor número de configuraciones en nuestras máquinas y que con dos o tres comandos podamos conseguir todo lo que necesitaría el entorno de desarrollo más exigente.

Nota: Con este texto dimos inicio al Manual de Laravel, en el que pretendemos enseñar a los lectores a trabajar con este importante framework PHP. Así que siéntate cómodo y aprovecha para comenzar con nosotros esta zambullida en profundidad a Laravel. Homestead es una excelente alternativa como entorno de desarrollo, pero no es la única, también tienes otras muy buenas alternativas como Valet o Sail.

Qué es exactamente Homestead

Es una "Box de Vagrant". Por si no lo sabes, Vagrant es una capa por encima de Virtualbox (o de otros sistemas de virtualización como VMWare) que nos sirve para crear entornos de desarrollo y las Box en su terminología son imágenes de sistemas operativos ya instalados. Generalmente vienen "peladas", tal como tendríamos el ordenador si hubiéramos acabado de instalar el sistema operativo en ese momento. O en algunos casos, como Laravel Homestead, ya configurados con distintos paquetes de software.

Homestead te instala software como: Ubuntu, PHP, HHVM, Nginx, MySQL, PostgreSQL, NodeJS, Redis y algunas librerías como Memcached, Laravel Envoy, Beanstalkd...

Por qué Homestead

Porque la comunidad de creadores de Laravel quieren acercarte al framework. Facilitarte no solo la entrada como desarrollador de Laravel, sino también proporcionarte el entorno de desarrollo más adecuado para acometer cualquier tipo de proyecto.

Realmente puedes contar con Laravel funcionando en un Xampp, Mamp o similares, pero si virtualizas tendrás varias ventajas como contar con un entorno mucho más parecido al de producción, independiente de otros proyectos con los que estés desarrollando y además el mismo sistema, con los mismos paquetes de software. No tiene sentido extenderse mucho en las ventajas de los entornos virtualizados, porque ya hemos hablado de ellos en otras ocasiones. Pero piensa además que puedes conseguir todo eso con la facilidad de lanzar unos pocos comandos para generar automáticamente toda la infraestructura perfectamente configurada.

Qué necesitas

Instalar VirtualBox como sistema de virtualización, o Parallels Desktop si lo prefieres (aunque en ese caso tendrías que instalar un plugin adicional llamado "Vagrant Parallels Provider").

Generalmente instalas primero el software de virtualización (VirtualBox o Parallels) y luego instalas Vagrant. Tanto VirtualBox como Vagrant son gratuitos y multiplataforma.

En los Mac con procesador M1 no está disponible en este momento VirtualBox, por lo que tendrás que usar Parallels. Por tanto, si tienes el chip M1 de Apple no te queda otra que pasar por caja, ya que Parallels Desktop es de pago. De todos modos, sinceramente, Parallels tiene mucho más nivel y facilidad de uso que VirtualBox, por lo que si necesitas usar virtualización merece bastante la pena. Sin embargo el software no es barato y encima necesitas las versiones "pro" o "enterprise" para poder usar Vagrant y solo se ofrecen mediante suscripción, por lo que todos los años tendrás que hacer un desembolso. La solución más económoca para usuarios Mac M1 sería Laravel Sail.

Si tienes Chip M1 el plugin de Vagrant que necesitas para Parallels se puede instalar con el comando:

vagrant plugin install vagrant-parallels

Box de Homestead

La "Box" de Vagrant es la imagen de la virtualización que se va a instalar en tu sistema. Existe una Box específica de Homestead. La puedes instalar a mano con los siguientes pasos, pero también puedes dejar que el proceso de Homestead lo haga automáticamente por ti, por lo que los siguientes pasos son opcionales.

Una vez instalados ambos programas (tu software de virtualización y Vagrant) se pueden descargar imágenes de Vagrant mediante comandos. Para descargar la caja "Box" de Homestead debes saber que existen dos box de Vagrant dependiendo de la arquitectura del procesador.

Box Vagrant Homestead para procesadores Intel

En Windows, Linux y Mac con chip de Intel, lanzarás el siguiente comando de consola.

vagrant box add laravel/homestead

Box Vagrant Homestead para procesadores Mac M1

En ordenadores MacOs con el chip M1 (Apple Silicon) usarás este comando:

vagrant box add laravel/homestead-arm

Ese comando lo podrás lanzar desde cualquier carpeta, desde el terminal de línea de comandos, claro está.

Nota: Si tienes una versión antigua de Vagrant quizás tengas que darle la URL completa de la localización de la Box.
vagrant box add laravel/homestead https://atlas.hashicorp.com/laravel/boxes/homestead

Instalar Homestead

El tercer paso sería instalar el propio Homestead. Para ello usaremos la box que acabamos de descargar y Vagrant. Pero necesitamos un archivo de configuración que se encuentra en Github que contiene toda la información de configuración que Vagrant necesitaría para generar y aprovisionar la máquina virtual para desarrollar con Laravel.

Para ello abrimos un terminal y nos situamos en nuestra carpeta de proyectos habitual y desde allí clonaremos el repositorio de Homestead con Git.

git clone https://github.com/laravel/homestead.git Homestead
Nota: Ese comando clona un repositorio. El repositorio está en Github en la ruta https://github.com/laravel/homestead.git. El parámetro final del comando anterior git clone que está definido como "Homestead" es la carpeta donde va a colocar los archivos del repositorio que estás clonando. Si quisieras podrías cambiarle el nombre a la carpeta de destino, por ejemplo, "proyecto-prueba" en vez de "Homestead", para lo que el comando sería el siguiente:
git clone https://github.com/laravel/homestead.git proyecto-prueba
La estructura de carpetas que tengas tú en tu ordenador de momento es indiferente y responderá a tus propias preferencias. Lo que te interesa es todo lo que tiene el repositorio, que te vas a descargar con el comando "git clone". El lugar donde esté localizada la carpeta donde te descargas el repo de Homestead es lo de menos, por ejemplo muchas personas prefieren colocarla en la carpeta "Dropbox" para que cuando se realicen cambios en el proyecto se realicen copias de seguridad automáticas en la nube.

Después de haber realizado el clonado del repositorio de Laravel Homestead sería una buena idea hacer un checkout (para moverse a una rama de Git) a "release". Esta rama contiene el software en su última versión estable, que sería la más recomendada en todo momento:

cd Homestead
git checkout release

Dentro de ese repositorio clonado tenemos en un archivo bash con el nombre "init.sh" que tiene el código con los comandos para crear el archivo de configuración Homestead.yaml. Simplemente lo tienes que ejecutar.

Si estás en Mac o Linux lo harás con el comando:

bash init.sh

Si tu sistema operativo es Windows, entonces el comando para ejecutar init.sh es:

init.bat

Obviamente el comando "bash init.sh" lo debes ejecutar desde la ruta donde se encuentra el archivo init.sh, en la carpeta del repositorio que acabas de clonar. Verás que simplemente te da un mensaje de respuesta "Homestead initialized!". Eso quiere decir que ha ido bien y ha podido crear los archivos de configuración necesarios para los siguientes pasos.

Configuración de Laravel Homestead

Entre los arhivos de configuración que se crean al ejecutar el init.sh hay uno que necesitarás editar, llamado "Homestead.yaml".

Dependiendo de la versión de Homestead que tengas instalada el archivo Homestead.yaml puede estar en lugares distintos. Actualmente (estamos en Laravel 9 en este momento) lo encuentras en la misma carpeta de Homestead. En versiones antiguas lo encuentras en tu carpeta personal (la de tu usuario dentro de tu sistema operativo) y dentro de ella en la carpeta oculta ".homestead".

Si abres Homestead.yaml podrás encontrar los datos de configuración de la máquina virtual Homestead, el servidor de desarrollo virtualizado que vamos a crear, que incluye datos como la IP del servidor, las CPUs, memoria asignada, carpetas que se compartirán entre la máquina de desarrollo y el ordenador anfitrión (nuestro ordenador físico) y cosas así.

En un principio necesitamos tocar pocas cosas del Homestead.yaml, porque la mayoría ya se ha configurado automáticamente, acorde con nuestro sistema operativo gracias al archivo init.sh, pero podrás desear cambiar los siguientes item:

Adicionalmente, yo personalmente hago una configuración menos generosa de recursos de la máquina Homestead y no suelo tener problema con ella. Si observas, hay dos configuraciones de memoria y cpu para la virtualización. Inicialmente vienen así:

memory: 2048
cpus: 2

Eso quiere decir que va a consumir 2 Gigas de tu memoria ram y 2 cpu. Podrías configurar perfectamente unos valores menores y, si fuera necesario, subirlo más adelante.

Sinceramente, tengo aplicaciones Laravel en producción atendiendo a decenas de usuarios concurrentes con menos recursos del sistema. En local, atendiendo a un único desarrollador, puede ser suficiente con una CPU y 512 de memoria. Si no fuera suficiente, siempre estás a tiempo de editar esos valores y aumentarlos. El único problema que puedes tener es que algunos procesos saturen la memoria. En ese caso recibirás un mensaje de memoria "exhausted". Especialmente Composer, si lo ejecutas desde la virtualización, consume bastante memoria.

Definir la Box de Vagrant para ordenadores Apple M1

Muy importante: Si tienes un Mac con Chip de Apple (Apple Silicon) necesitas definir una variable de configuración extra en el archivo Homestead.yaml, para informar de la box de Vagrant que se va a usar.

Además, debes tener en cuenta que el provider debe de ser "parallels".

provider: parallels
box: laravel/homestead-arm

Crear la llave de SSH

Esta es la llave para la conexión con el servidor virtual por línea de comandos. Si no tienes una la puedes crear. Desde Mac o Linux es tan sencillo como lanzar el siguiente comando:

ssh-keygen -t rsa -C "you@homestead"

Desde Windows la recomendación es usar el "Bash de Git" (el programa de terminal que te viene incorporado cuando instalas Git) y lanzar el mismo comando anterior. Aunque también podrías usar el popular software PuTTY y PuTTYgen.

Si tienes cualquier duda sobre el proceso de creación de llaves, tanto en Linux, Windows o MacOS, te recomendamos leer el artículo sobre Crear llaves ssh.

En el anterior comando no necesitas editar nada, lo pones tal cual. Enseguida verás que el programa que te genera la clave te pide la ruta donde va a colocar esta key generada. El propio programa te muestra una ruta predeterminada donde sugiere se coloquen las llaves. Podemos pulsar enter sin escribir nada para aceptar esa ruta o bien escribir cualquier otra ruta donde se generará la clave. Puedes poner lo que quieras, con tal que te acuerdes de la ruta que has seleccionado.

Nota: en cuanto a la ruta donde se van a colocar las claves es totalmente personalizable. Pon la que quieras, simplemente acuérdate donde están los archivos. Para ser más específicos y por si alguien se pierde, pueden darse tres casos:
  • Que te parezca bien la ruta donde te sugiere que va a crear las claves. En ese caso puedes apretar enter y listo. En mi caso la ruta donde se colocarían las claves de manera predeterminada es /Users/midesweb/.ssh/id_rsa. Por tanto se crearán los archivos id_rsa e id_rsa.pub en la carpeta /Users/midesweb/.ssh.
  • Que escribas el nombre de un archivo simplemente, algo como "homesteadkey". En ese caso te creará las claves en el directorio donde estás situado cuando hiciste el comando ssh-keygen, archivos homesteadkey y homesteadkey.pub.
  • Que que escribas una ruta absoluta, algo como /Users/midesweb/.ssh/nuevaclave, en cuyo caso te colocará la clave en esa ruta absoluta, tanto la clave privada /Users/midesweb/.ssh/nuevaclave como la pública /Users/midesweb/.ssh/nuevaclave.pub

El programa de generar las key te pedirá también insertar una frase como clave, que puedes poner la que desees. O bien una cadena vacía si quieres ahorrarte indicar una frase que te puedas olvidar. Como es solo para trabajar en local sería suficiente.

Como decíamos, una vez generada la clave lo que te interesa es saber la ruta donde se ha colocado, que tendrás que usar para configurar el archivo Homestead.yaml.

El lugar donde vas a tener que introducir la ruta de la clave será algo como esto:


authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

Esa ruta es la que tienes que configurar según la localización de las llaves creadas. Generalmente si seleccionaste la carpeta predeterminada que sugería el comando ssh-keygen ni siquiera tendrías que editar nada. Si las claves las guardaste en otro lugar, entonces tendrás que indicarlo aquí. De todos modos, no tiene ninguna complicación, es saber la ruta donde está tu clave e indicarla en el Homestead.yaml.

Recuerda que ~/ es un alias de tu ruta personal (ver otra nota más abajo donde se habla sobre este tema). Pero si te lía lo puedes cambiar por una ruta absoluta y punto.

Carpetas del servidor virtual y mapeo a las carpetas locales

Una de las características de los entornos con Vagrant es que hay determinadas carpetas del servidor virtual (invitado) que están mapeadas a directorios locales de tu máquina real (anfitrión). Esto te permite editar archivos de tu proyecto como los editarías en cualquier otra situación, con tus editores de código preferidos, trabajando en local como si lo hicieras con un sistema más tradicional tipo Xampp o Mamp, Wamp, etc. Las carpetas locales están enlazadas con las carpetas del servidor, por lo que no tienes que subir los archivos por FTP, SCP ni nada parecido. Cuando modifiques algún archivo, o crees archivos nuevos en tu carpeta local, automáticamente esos cambios estarán sincronizados en las carpetas enlazadas del servidor virtualizado. Podrías configurar tantas carpetas compartidas como necesites en tu proyecto, generalmente una por cada aplicación Laravel que estés desarrollando.

Ahora en el archivo Homestead.yaml tendrás que definir esa estructura de carpetas, que se adaptará a tus costumbres habituales. Como hemos comentado antes, tendrás una carpeta de tu ordenador donde guardas tus proyectos y seguirá siendo así. Por tanto, es simplemente guardar este proyecto en una carpeta en una ruta habitual para ti.

folders:
    - map: ~/carpeta_de_proyectos/proyecto_x/codigo
      to: /home/projects

En este lugar colocamos en "map" el valor de nuestra carpeta en el ordenador anfitrión y en "to" la ruta de la carpeta del ordenador virtualizado que vamos a crear con Vagrant y Homestead. La carpeta que estás indicando en "map", que corresponde con tu ordenador real, debería existir.

Ten en cuenta que en una máquina virtual de Homestead podrías mantener varios proyectos Laravel, por tanto no sería descabellado que usases una declaración Folders abierta a esa posibilidad, donde mapeas una carpeta de proyectos en el anfitrión a otra de proyectos en la máquina virtual.

folders:
    - map: ~/carpeta_instalacion_homestead/proyectos/
      to: /home/vagrant/proyectos/
Nota: Una aclaración acerca de las rutas para los de Windows. "~/" corresponde con la carpeta raíz de tu usuario. Por ejemplo, si tu usuario (con el que entras en Windows es ·micromante" esa ruta correspondería con una carpeta como "C:/Users/micromante". La carpeta "~/.homestead" correspondería físicamente con "C:/Users/micromante/.homestead". Si usas el terminal básico del Windows no reconocerá la ruta ~/, así que tendrás que usar la ruta real de tu carpeta de usuario, la física o ruta real. Si usas un terminal un poco mejor, por ejemplo el Git Bash sí que te reconocerá ese nombre lógico ~/ y te llevará a tu carpeta de usuario, sea cual sea tu nombre de usuario, igual que ocurre en el terminal de Linux o Mac.

De nuevo, no hay necesidad de colocar algo específico en la sección folders, sino que será tal como tú desees organizar las carpetas, tanto en el servidor Homestead como en tu ordenador local.

Definir la configuración de los sitios que vamos a albergar en esta máquina Homestead

Nos queda un valor que configurar, que es el nombre del host virtual que nos va a configurar Homestead en esta máquina virtual que estamos a punto de crear. Este host virtual o "virtualhost" lo usaremos para entrar en el proyecto desde un navegador, con un nombre de dominio, como si fuera un servidor remoto. Lógicamente ese dominio solo estará disponible desde tu ordenador y tendrás que configurar el conocido archivo "hosts" para asociar la IP del servidor al nombre de dominio virtual.

sites:
    - map: homestead.dw
      to: /home/projects/mi_proyecto/public

En este mismo artículo, más para el final, encuentras una descripción detallada sobre cómo configurar varios proyectos de Laravel en una misma instalación de Homestead, con el código del Yaml de una configuración real.

Definir las versiones de PHP

Si usas Homestead 6 o superior tienes la posibilidad de definir la versión de PHP que quieres usar para cada proyecto.

sites:
    - map: site-demo.test
      to: /home/vagrant/site-demo/public
      php: "8.0"

Además, haciendo uso de la consola de Homestead puedes definir qué versión de PHP quieres usar por línea de comandos, simplemente indicando el comando de esta manera:

php8.0 artisan -V

Definir los virtualhost en el archivo hosts

En este caso en "map" colocamos el nombre de dominio para el virtualhost y en "to" indicamos la carpeta del servidor virtual donde va a estar el "document root". Si te fijas, ese document root debe colgar de la carpeta que tienes en la máquina virtual que has enlazado con tu carpeta real, de ese modo podrás editar en local los archivos de tu proyecto que se servirá desde el ordenador virtual.

Nota: En una instalación de Homestead serías capaz de albergar varios proyectos si así lo deseas, con diversos host virtuales. Insistimos en que cada uno de los host virtuales tendrás que configurarlo en el archivo de hosts de tu ordenador, asociando la IP que hayas configurado para esta máquina virtual con el nombre de dominio de tus virtualhost.

Tu archivo hosts tendrás que editarlo agregando esta líneas, que quedará más o menos de esta forma:

192.168.10.10	homestead.dw

Aunque lógicamente, tendrás que poner la IP que hayas definido en el campo IP de Homestead.yaml y el nombre de dominio que hayas definido en los "sites", en el campo "map".

Nota: La configuración del archivo Hosts está explicada en el artículo: Modificar el archivo de Hosts en Windows, Linux y Mac

Lanzar la máquina virtual

Una vez configurado el Homestead.yaml tienes que lanzar la máquina virtual, es decir, tendrás que ponerla en marcha, con el conocido comando de Vagrant:

vagrant up

Ese comando lo tienes que lanzar desde la carpeta donde has puesto el repositorio de Homestead, que clonaste con Git. La primera vez que se ejecute va a tardar un poco, porque tiene que instanciar y configurar toda la máquina, pero luego iniciar la máquina virtual será muy rápido, también con el comando "vagrant up".

Nota: En los comentarios del artículo nos han preguntado en qué momento hacer el "vagrant init". Ese comando no lo necesitas hacer tú mismo. Sirve para que se cree el Vagrantfile y configurar una carpeta para que albergue una máquina virtual que vas a crear con Vagrant. Pero básicamente el Vagrantfile es lo que te descargas al clonar el repositorio y las configuraciones que necesita Vagrant y que realizas predeterminadamente al hacer al "Vagrant init" son las que has aprendido a definir en el archivo Homestead.yaml.

Por tanto, si en algún momento haces un "vagrant up" y te pide hacer un "vagrant init" es que estás haciendo el "vagrant up" desde una carpeta incorrecta. En ese caso fíjate que estés situado en el repositorio de Homestead que has clonado. En esa carpeta debería haber un Vagrantfile, ya que es uno de los archivos del repositorio clonado.

Una vez lanzada la máquina virtual podríamos hacer una primera prueba accediendo a la IP del servidor virtual con tu navegador.

http://192.168.10.10/

(Ojo, la URL podría ser otra si tocaste en el Homestead.yaml el dato ip: "192.168.10.10". Si no es esa, será la IP que hayas configurado en tu caso)

De momento no veremos nada, pero al menos el navegador no deberías recibir tampoco el típico error del navegador para informar que el host no ha sido encontrado. En mi caso aparece el mensaje "No input file specified.". Esto es porque no tenemos todavía ningún archivo en el servidor, como código del proyecto, así como tampoco se ha creado la carpeta "public" que es "document root", o aquella carpeta raíz que hayas configurado en el yaml.

Ahora se trataría de colocar un archivo dentro de la carpeta que has definido como raíz de tu dominio en el campo "to:" de la configuración "sites". Recuerda que esa carpeta está enlazada desde el servidor virtual con una ruta en tu directorio de los proyectos, tal como se ha configurado.

Puedes colocar un index.php con un "Hola mundo" para probar. Lo colocarás en una ruta tal como lo hayas configurado en tu caso, siguiendo los valores definidos en este artículo nos quedaría una como esta:

Ordenador vitualizado:

/home/projects/mi_proyecto/public

Equivalente en el host anfitrión (ordenador real):

~/carpeta_de_proyectos/codigo/mi_proyecto/public

Ahora accediendo a la IP del servidor podrías encontrar tu index.php. Además, si has podido configurar correctamente tu virtualhost, podrás acceder a partir del nombre del dominio creado en tu máquina.

http://homestead.dw/

Con esto es todo, de momento tenemos nuestra máquina funcionando, lista para instalar Laravel, pero aún nos queda toda la instalación del framework PHP Laravel y algún trabajo más para comenzar a desarrollar. Lo veremos en próximos artículos.

Antes de acabar sería solo comentar que tenemos un #programadorIO sobre Laravel Homestead que amplía la información relatada en este artículo. Recuerda también que puedes encontrar la documentación oficial de Homestead para Laravel 5 en este enlace.

Código completo del Homestead.yaml

En los comentarios del artículo nos han pedido reproducir el código completo de un archivo Homestead.yaml. La verdad es que no lo habíamos hecho porque las configuraciones dependen mucho de las preferencias, costumbres, sistemas operativos y rutas de cada uno, por lo que no sería adecuado hacer un "copia-pega" del archivo. Para evitar confusiones y posibles copias literales lo habíamos dejado pasar. No obstante, para que sirva de referencia para comparar vuestros archivos con los nuestros, dejo aquí el código completo.

---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: ~/html/Homestead/codigo
      to: /home/projects

sites:
    - map: homestead.dw
      to: /home/projects/homestead/public
    - map: testlaravel.com
      to: /home/projects/testlaravel/public

databases:
    - homestead

variables:
    - key: APP_ENV
      value: local

# blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar

# ports:
#     - send: 93000
#       to: 9300
#     - send: 7777
#       to: 777
#       protocol: udp

Mantener varios proyectos de Laravel en una instalación de Homestead

Estás trabajando con Laravel y te has decantado, tal como se recomienda, trabajar en el entorno Homestead. Tienes una máquina virtual con una instalación de Laravel, pero quieres manejar diferentes proyectos, de manera independiente, reutilizando la misma máquina virtual, para no tener que gastar mayor espacio en disco o tiempo en crear una máquina nueva.

Esta es una situación muy común y que tiene una sencilla solución, simplemente a través de la configuración del archivo Homestead.yaml, creando distintos host para cada proyecto, asociados a otras carpetas del servidor.

Obviamente, para llegar a este artículo tienes que saber Qué es Homestead y saber cómo instalar Laravel. Lo que vamos a aprender de nuevo es algo muy sencillo, simplemente configurar varios host virtuales para cada proyecto.

Configuración de "sites" en Homestead.yaml

Recuerda que el archivo Homestead.yaml" está en la carpeta ".homestead" que está situada en la raíz de tu usuario. Tanto en Windows, Linux o Mac: "~/.homestead".

Nota: Solo un detalle para los de Windows, la carpeta "~/.homestead" físicamente estará en una ruta del disco donde tengas instalado Windows. Si tu usuario se llama "carlos" y has instalado Windows en el disco C, tu carpeta estaría físicamente en una ruta absoluta como esta C:\Users\carlos\.homestead. Recuerda que si usas un terminal medianamente bueno como el que te viene con Git (git bash) sí que te reconocerá las rutas comenzando con ~/ como rutas a la carpeta de tu usuario Windows.

Dentro del Homestead.yaml está el epígrafe "sites", sobre el que podemos construir cualquier número de hosts virtuales (virtualhost en la terminología de servidores, que significa que el servidor web reconocerá esa carpeta como un sitio aparte, al que se accederá por un nombre de dominio independiente).

Si queremos crear varios host independientes, uno para cada proyecto Laravel, simplemente tenemos que listar ese número de virtualhost tal como sigue:

sites:
    - map: proyecto1.local.com
      to: /home/projects/proyecto1/public
    - map: proyecto2.local.com
      to: /home/projects/proyecto2/public
    - map: proyecto3.local.com
      to: /home/projects/proyecto3/public

Podemos tener tantos virtualhost como queramos. Luego se trata de crear las carpetas mapeadas a cada uno de esos host virtuales en la máquina Homestead, algo que seguramente harás solamente cuando llegue el paso de la instalación del framework Laravel 5 tal como se explicó anteriormente.

Te voy a dejar aquí una configuración real de folders y sites que tengo yo en un ordenador de desarrollo, donde tenemos varios sitios con sus correspondientes carpetas mapeadas.

folders:
    - map: ~/sites/eit/eitv2
      to: /home/vagrant/eit
      type: "nfs"
    - map: ~/sites/dw/dw2019
      to: /home/vagrant/dw
      type: "nfs"
    - map: ~/sites/guiarte/gglobal
      to: /home/vagrant/gglobal
      type: "nfs"
    - map: ~/sites/realtimeserver
      to: /home/vagrant/realtimeserver
      type: "nfs"

sites:
    - map: eit.test
      to: /home/vagrant/eit/public
    - map: dw2019.test
      to: /home/vagrant/dw/public
    - map: gglobal.test
      to: /home/vagrant/gglobal/public
    - map: realtimeserver.test
      to: /home/vagrant/realtimeserver/public

Aprovisionar los cambios en el archivo Homestead.yaml

Si simplemente cambias el archivo Homestead.yaml las nuevas configuraciones no funcionarán, ni tan siquiera si reinicias la máquina virtual. Por ello tendrás que hacer un paso adicional para aprovisionar de nuevo la máquina atendiendo a los nuevos valores de configuración.

Eso se consigue con un comando como el que sigue:

vagrant reload --provision

Ese comando para la máquina virtual y luego la reconfigura, tomando los nuevos datos indicados en el archivo de configuración. Luego la vuelve a encender ya con las nuevas configuraciones. No hace falta que la máquina virtual esté parada.

Si tienes algún problema con ese comando prueba a ejecutar antes "vagrant provision".

vagrant provision
vagrant reload --provision

Nota: Solo para mencionarlo por si a alguien se le ocurre, no hace falta hacer el vagrant destroy para eliminar la máquina virtual de Homestead y luego volverla a crear. Eso podría funcionar, pero se te eliminarán los proyectos que has creado.

Volver a configurar el archivo hosts

También podrá resultar obvio, pero hay que comentar que, inmediatamente después de crear los nuevos virtualhost y antes de poder acceder a ellos por los nombres de dominio configurados, deberás editar tu archivo hosts para agregar la IP del servidor asociada al nuevo nombre de dominio que se está definiendo. Colocarás una línea como esta:

192.168.10.10 proyecto2.local.com

También ojo con esa línea porque tu máquina Homestead podría tener otra IP distinta si lo editaste en el archivo Homestead.yaml y lógicamente el nombre del dominio para el virtualhost también será otra, que hayas configurado en tu archivo yaml.

Con eso es todo! en lugar de crear máquinas nuevas para colocar proyectos distintos de Laravel, lo que generalmente harás es crear nuevos host virtuales sobre la misma máquina, así compartes el mismo entorno de desarrollo para diferentes proyectos Laravel 5.

Es una situación bastante común, pero no implica necesariamente que lo tengas que hacer así. Para un proyecto, por cualquier motivo, podrías preferir crear una máquina virtual totalmente independiente, creando una nueva instancia de Homestead, en lugar de reutilizar la que ya tenías.

Conclusión sobre Laravel Homestead

Laravel Homestead es una solución muy cómoda y profesional para trabajar con Laravel. Permite tener un entorno de desarrollo configurado rápidamente en una máquina Linux, que seguramente sea el ambiente donde la aplicación va a estar en producción.

La única desventaja de Homestead con respecto a otros entornos de desarrollo más sencillos es quizás que las máquinas virtuales consumen bastantes recursos, como RAM. en tu ordenador de desarrollo pero la verdad es que con 512Kb de ram para la máquina virtual y un único core puedes ejecutar perfectamente tus proyectos Laravel. Si te lo puedes permitir en tu ordenador, es una excelente alternativa.

Hemos aprendido a trabajar con Homestead y a configurar la mayoría de los detalles que necesitarás en los proyectos. Además hemos aprendido a usar una única máquina virtual para todos los proyectos, para ahorrar espacio en disco no tener la incomodidad de tener que arrancar o detener las máquinas virtuales cuando necesitas cambiar de proyecto.

Finalmente, cabe decir que Homestead no es la única opción como entorno de desarrollo para Laravel. Existen otras alternativas bastante interesantes como Sail para usar Docker, o incluso si estás en Mac tienes Valet que es un entorno especialmente ligero.

Carlos Ruiz Ruso

Consultor tecnológico para el desarrollo de proyectos online especializado en Wo...

Manual