Mantener varios proyectos con Homestead

  • Por
  • PHP
Tutorial para albergar varios proyectos realizados con Laravel en una misma máquina virtual Homestead, con varias instalaciones del framework PHP.

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.

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.

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.

Conclusión

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.