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
.
- 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
- 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"]
- 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
- 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