Laravel Homestead

# Introducción

Laravel se esfuerza por hacer que toda la experiencia de desarrollo PHP sea encantadora, incluyendo su entorno de desarrollo local. Vagrant provee una simple y elegante manera de gestionar y suministrar máquinas virtuales.

Laravel Homestead es una Vagrant box oficial que le provee de un maravilloso entorno de desarrollo sin requerirle instalar PHP, un servidor web, y cualquier otras aplicaciones de servidor en su máquina local. No más preocupaciones acerca de estropear su sistema operativo! Las "boxes" de Vagrant son completamente desechables. Si algo sale mal, ¡se puede destruir la box y crearla nuevamente en cuestión de minutos!

Homestead funciona en cualquier sistema Windows, Mac o Linux, e incluye Nginx, PHP, MySQL, PostgreSQL, Redis, Memcached, Node, y todos los otros beneficios que necesitas para desarrollar increíbles aplicaciones Laravel.

Si está utilizando Windows, podría necesitar activar la virtualización por hardware (VT-x). Normalmente, ésta puede activarse a través de su BIOS. Si está utilizando Hyper-V en una sistema UEFI, además puede necesitar desactivar Hyper-V para acceder a VT-x.

Software incluídos

  • Ubuntu 18.04
  • Git
  • PHP 7.4
  • PHP 7.3
  • PHP 7.2
  • PHP 7.1
  • PHP 7.0
  • PHP 5.6
  • Nginx
  • MySQL
  • lmm for MySQL or MariaDB database snapshots
  • Sqlite3
  • PostgreSQL (9.6, 10, 11, 12)
  • Composer
  • Node (With Yarn, Bower, Grunt, and Gulp)
  • Redis
  • Memcached
  • Beanstalkd
  • Mailhog
  • avahi
  • ngrok
  • Xdebug
  • XHProf / Tideways / XHGui
  • wp-cli

Software opcional

  • Apache
  • Blackfire
  • Cassandra
  • Chronograf
  • CouchDB
  • Crystal & Lucky Framework
  • Docker
  • Elasticsearch
  • Gearman
  • Go
  • Grafana
  • InfluxDB
  • MariaDB
  • MinIO
  • MongoDB
  • MySQL 8
  • Neo4j
  • Oh My Zsh
  • Open Resty
  • PM2
  • Python
  • RabbitMQ
  • Solr
  • Webdriver & Laravel Dusk Utilities

# Instalación y configuración

Primeros pasos

Antes de arrancar tu entorno de Homestead, deberá instalar VirtualBox 6.x, VMWare, Parallels o Hyper-V así como Vagrant. Todos estos programas poseen instaladores visuales de fácil uso para los todos los sistemas operativos más populares.

Para utilizar el proveedor de VMware, deberá adquirir tanto el plug-in VMware Fusion / Workstation como el VMware Vagrant plug-in. Aunque no es gratuito, VMware puede proporcionar un rendimiento más rápido de la carpeta compartida desde el principio.

Para utilizar el proveedor de Parallels, deberá instalar el Parallels Vagrant plug-in. Es gratuito.

Debido a las limitaciones de los limitaciones de los Vagrant, el proveedor de Hyper-V ignora todas las configuraciones de red.

Instalando Homestead con Vagrant

Una vez que VirtualBox / VMware y Vagrant han sido instalados, debe agregar la box de laravel/homestead a la instalación de Vagrant, utilizando el siguiente comando desde su consola. Tomará algunos minutos para que la box se descargue, esto dependerá de la velocidad de la conexión a internet:

vagrant box add laravel/homestead

Si este comando falla, asegúrese de que su instalación de Vagrant está actualizada.

Homestead emite periódicamente casillas "alfa" / "beta" para pruebas, que pueden interferir con el comando vagrant box add. Si tiene problemas para ejecutar vagrant box add, puede ejecutar el comando vagrant up y la casilla correcta se descargará cuando Vagrant intente iniciar la máquina virtual.

Instalando Homestead

Puede instalar Homestead simplemente clonando el repositorio. Considere clonar el repositorio dentro de una carpeta llamada Homestead en su directorio home, así la Homestead box servirá como host para todos sus projectos Laravel:

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

Deberías revisar una versión etiquetada de Homestead ya que la rama master puede no ser siempre estable. Puede encontrar la última versión estable en la GitHub Release Page. También puede consultar la rama release que siempre contiene la última versión estable:

cd ~/Homestead

git checkout release

Una vez haya clonado el repositorio Homestead, ejecute el comando bash init.sh desde el directorio Homestead para crear el archivo de configuración Homestead.yaml. El fichero Homestead.yaml será colocado en el directorio Homestead:

// Mac / Linux...
bash init.sh

// Windows...
init.bat

Configurar Homestead

Establecer proveedor

La clav provider en su fichero Homestead.yaml indica que proveedor Vagrant debería ser usado: virtualbox, vmware_fusion, vmware_workstation, parallels o hyperv. Puede configurar el proveedor que prefiera:

provider: virtualbox

Configurar directorios compartidos

La propiedad folders del archivo Homestead.yaml enumera todas las carpetas que dese compartir con el entorno Homestead. Cuando los ficheros en esas carpetas cambien, se mantendrán sincronizados entre su máquina local y el entorno Homestead. Puede configurar tantas carpetas como sean necesarias:

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

Los usuarios de Windows no deben usar la sintaxis ~/ path y en su lugar deben usar la ruta completa de su proyecto, como C:\Users\user\Code\project1.

Siempre debes asignar los proyectos individuales a su propia carpeta de asignación en lugar de asignar toda tu carpeta ~/code. Cuando se asigna una carpeta, la máquina virtual debe llevar un registro de todas las IO del disco para cada archivo de la carpeta. Esto conduce a problemas de rendimiento si tiene un gran número de archivos en una carpeta.

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

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

Nunca debes montar. (el directorio actual) cuando se utiliza Homestead. Esto hace que Vagrant no asigne la carpeta actual a /vagrant y romperá las características opcionales y causará resultados inesperados mientras se aprovisiona.

Para habilitar NFS, sólo tienes que añadir una simple marca a la configuración de la carpeta sincronizada:

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

Al usar NFS en Windows, deberías considerar la posibilidad de instalar el plug-in vagrant-winnfsd. Este plug-in mantendrá los permisos de usuario/grupo correctos para los archivos y directorios dentro del cuadro de Homestead.

También puede pasar cualquier opción soportada por Vagrant's Synced Folders listandolo baljo la key de options:

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

Configurar sitios Nginx

¿No está familiarizado con Nginx? No hay problema. La propiedad sites le permite de una manera sencilla mapear un "dominio" a una carpeta en su entorno Homestead. Un ejemplo de configuración de una sitio web está incluído en el archivo Homestead.yaml. De nuevo, puede añadir tantos sitios a su entorno Homestead como sean necesarios. Homestead puede servir como un entorno virtualizado para cada proyecto de Laravel en el que esté trabajando:

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

Si cambia la propiedad sites después de provisionar Homestead box, debería volver a ejecutar  vagrant reload --provision  para actualizar la configuración de Nginx en la máquina virtual.

Los guiones de la casa están construidos para ser lo más idependiente posible. Sin embargo, si usted está experimentando problemas en el aprovisionamiento debe destruir y reconstruir la máquina a través de vagrant destroy && vagrant up.

Activar / desactivar servicios

Homestead inicia varios servicios de manera predeterminada; sin embargo, puede personalizar qué servicios están habilitados o deshabilitados durante el aprovisionamiento. Por ejemplo, puede habilitar PostgreSQL y deshabilitar MySQL:

services:
    - enabled:
        - "postgresql@12-main"
    - disabled:
        - "mysql"

Los servicios especificados se iniciarán o detendrán en función de su orden en las directivas enableddisabled.

Hostname Resolution

Homestead publica los nombres de host en mDNS para la resolución automática del host. Si establece hostname: homestead en su archivo Homestead.yaml, el host estará disponible en homestead.local. Las distribuciones de escritorio de MacOS, iOS y Linux incluyen soporte mDNS sde forma predeterminada. Windows requiere la instalación Bonjour Print Services para Windows.

El uso de nombres de host automáticos funciona mejor para instalaciones "por proyecto" de Homestead. Si hospeda varios sitios en una sola instancia de Homestead, puede agregar los "dominios" para sus sitios Web al archivo hosts de su máquina. El archivo hosts fredirigirá las solicitudes de sus sitios de Homestead a su máquina de Homestead. En Mac y Linux, este archivo se encuentra en /etc/hosts. En Windows, se encuentra en C:\Windows\System32\drivers\etc\hosts. Las líneas que añadas a este archivo se verán como las siguientes:

192.168.10.10  homestead.test

Asegúrate de que la dirección IP que aparece es la que está en tu archivo Homestead.yaml. Una vez que haya agregado el dominio a su archivo hosts y lanzado el cuadro Vagabundo podrá acceder al sitio a través de su navegador Web:

http://homestead.test

Levantando Vagrant Box

Una vez que ha editado Homestead.yaml  a su gusto, ejecute el comando vagrant up desde el directorio de Homestead. Vagrant iniciará la máquina virtual y automáticamente configurará los directorios compartidos y sitios web en Nginx.

Para apagar la máquina, puede utilizar el comando vagrant destroy --force.

Instalación por proyecto

En lugar de instalar Homestead de manera global y compartir el mismo Homestead box entre todos sus proyectos, puede configurar una instancia de Homestead para cada proyecto que gestione. Instalando Homested para cada proyecto podrá beneficiarse si desea entregar el fichero Vagrantfile con su proyecto, permitiendo a otros trabajar en el proyecto usando simplement vagrant up.

Para instalar Homestead directamente en su proyecto, se requiere la utilización de Composer:

composer require laravel/homestead --dev

Una vez que Homestead ha sido instalado, utilizar el comando make  para generar el fichero VagrantfileHomestead.yaml f en la raíz del proyecto. El comando make configurará automáticamente las directivas de lose sitioscarpetas en el archivo Homestead.yaml.

Mac / Linux:

php vendor/bin/homestead make

Windows:

vendor\\bin\\homestead make

A continuación, ejecute el comando vagrant up en su terminal y desde su navegador, acceda a su proyecto en http://homestead.test. Recordar, todavía es necesario añadir una fila al archivo /etc/hosts para el dominio homestead.test o el dominio elegido.

Instalación de características opcionales

El software opcional se instala utilizando el ajuste de "características" en el archivo de configuración de Homestead. La mayoría de las características se pueden activar o desactivar con un valor booleano, mientras que algunas características permiten múltiples opciones de configuración:

features:
    - blackfire:
        server_id: "server_id"
        server_token: "server_value"
        client_id: "client_id"
        client_token: "client_value"
    - cassandra: true
    - chronograf: true
    - couchdb: true
    - crystal: true
    - docker: true
    - elasticsearch:
        version: 7.9.0
    - gearman: true
    - golang: true
    - grafana: true
    - influxdb: true
    - mariadb: true
    - minio: true
    - mongodb: true
    - mysql8: true
    - neo4j: true
    - ohmyzsh: true
    - openresty: true
    - pm2: true
    - python: true
    - rabbitmq: true
    - solr: true
    - webdriver: true

MariaDB

Habilitar MariaDB eliminará MySQL e instalará MariaDB. MariaDB sirve como un sustituto de MySQL, por lo que debe seguir utilizando el controlador de base de datos mysql en la configuración de la base de datos de su aplicación.

MongoDB

La instalación por defecto de MongoDB pondrá el nombre de usuario de la base de datos en homestead y la correspondiente contraseña en secret.

Elasticsearch

Puede especificar una versión soportada de Elasticsearch, que puede ser una versión principal o un número de versión exacto (major.minor.patch). La instalación por defecto creará un grupo llamado "homestead". Nunca debe dar a Elasticsearch más de la mitad de la memoria del sistema operativo, así que asegúrese de que su máquina Homestead tiene al menos el doble de la asignación de Elasticsearch.

Revise la Documentación de Elasticsearch para aprender a personalizar tu configuración.

Neo4j

La instalación por defecto de Neo4j establecerá el nombre de usuario de la base de datos en homestead ay la correspondiente contraseña en secret. Para acceder al navegador Neo4j, visite http://homestead.test:7474 a través de su navegador web. Los puertos 7687 (Bolt), 7474 (HTTP), y 7473 (HTTPS) están listos para servir las peticiones del cliente de Neo4j.

Aliases

Puede agregar alias de Bash a su máquina de Homestead modificando el archivo de aliases dentro del directorio de Homestead:

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

Después de haber actualizado el archivo de aliases, debería reaprovisionar la máquina Homestead usando el comando vagrant reload --provision. Esto asegurará que sus nuevos alias estén disponibles en la máquina.

# Uso diario

Accediendo globalmente al Homestead

A veces puede necesitar arrancar su máquina Homestead vagrant up desde cualquier parte de su sistema. Para conseguir esto en sistemas Mac / Linux agregando una función Bash a su perfil Bash. En Windows, puede realizar esto agregando un fichero "batch" a su PATH. Estos scripts le permitirán ejecutar cualquier comando Vagrant desde cualquier sitio en su sistema y automaticamente apuntará a su instalación Homestead:

Mac / Linux

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

Asegúrese de cambiar el camino ~/Homestead en la función por la situación de su instalación actual de Homestead. Una vez la función esté instalada, podrá ejecutar comandos como homestead up o homestead ssh desde cualquier parte de su sistema.

Windows

Cree un fichero batch homestead.bat, en cualquier parte de su máquina, con el siguiente contenido:

@echo off

set cwd=%cd%
set homesteadVagrant=C:\Homestead

cd /d %homesteadVagrant% && vagrant %*
cd /d %cwd%

set cwd=
set homesteadVagrant=

Asegúrese de cambiar el camino de ejemplo C:\Homestead en el script a la situación actual de su instalación Homestead. Después de crear el fichero, agrege la situación a su PATH. Puede ahora ejecutar comandos como homestead up o homestead ssh desde cualquier parte de su sistema.

Conectando a través de SSH

Puede, usando SSH, entrar a su máquina virtual introduciendo en su terminal el comando vagrant ssh desde el directorio Homestead.

Pero probablemente necesitará frecuentemente entrar a su máquina utilizando SSH, considere agregar la "función" descrita a con anterioridad a su máquina anfritrión para usarla rápidamente.

Conectando a la base de datos

Una base de datos homestead está configurada tanto para MySQL como para PostgreSQL desde el principio. Para conectarse a su base de datos MySQL o PostgreSQL desde el cliente de base de datos de su máquina anfitriona, debe conectarse a 127.0.0.1 y al puerto 33060 (MySQL) o 54320 (PostgreSQL). El nombre de usuario y la contraseña para ambas bases de datos es homestead / secret.

Sólo debe utilizar estos puertos no estándar cuando se conecte a las bases de datos desde su máquina anfitriona. Usará los puertos 3306 y 5432 por defecto en su archivo de configuración de la base de datos Laravel ya que Laravel se está ejecutando dentro de la máquina virtual.

Database Backups

Homestead puede hacer una copia de seguridad automática de su base de datos cuando su caja de Vagabundos sea destruida. Para utilizar esta característica, debe estar usando Vagrant 2.1.0 o superior. O, si está usando una versión más antigua de Vagrant, debe instalar el plug-in de vagrant-triggers. Para habilitar las copias de seguridad automáticas de la base de datos, agregue la siguiente línea a su archivo Homestead.yaml:

backup: true

Una vez configurado, Homestead exportará sus bases de datos a los directorios mysql_backup y postgres_backup cuando se ejecute el comando vagrant destroy Estos directorios se pueden encontrar en la carpeta donde clonó Homestead o en la raíz de su proyecto si está usando el método de installación por proyecto.

Instataneas de la base de datos

Homestead apoya la congelación del estado de las bases de datos MySQL y MariaDB y la ramificación entre ellas usando Logical MySQL Manager. Por ejemplo, imagina trabajar en un sitio con una base de datos de varios gigabytes. Puedes importar la base de datos y tomar una instantánea. Después de hacer algún trabajo y crear algún contenido de prueba localmente, puede restaurar rápidamente el estado original.

Bajo el capó, LMM utiliza la funcionalidad de instantánea delgada de LVM con soporte de copia en escritura. En la práctica, esto significa que cambiar una sola fila de una tabla sólo hará que los cambios realizados se escriban en el disco, lo que ahorrará un tiempo y espacio significativos en el disco durante las restauraciones.

Ya que lmm" interactúa con LVM, debe ser ejecutado como root. TPara ver todos los comandos disponibles, ejecute sudo lmm dentro de su caja Vagrant. Un flujo de trabajo común se ve como el siguiente:

  1. Importar una base de datos en la rama maestra por defecto.
  2. Guarde una instantánea de la base de datos sin modificar utilizando sudo lmm branch prod-YYYY-MM-DD.
  3. Modificar la base de datos.
  4. Ejecute sudo lmm merge prod-YYYY-MM-DD para deshacer todos los cambios.
  5. Ejecute sudo lmm delete <branch> para eliminar las ramas innecesarias.

Adding Additional Sites

Una vez su entorno Homestead está aprovisionado y corriendo, puede querer agregar sitios Nginx adicionales para sus aplicaciones Laravel. Puede ejecutar cuantas instalaciones Laravel desee en un entorno único de Homestead. Para agregar sitios adicionales, simplemente agréguelos a su fichero Homestead.yaml:

sites:
    - map: homestead.test
      to: /home/vagrant/project1/public
    - map: another.test
      to: /home/vagrant/project2/public

Si Vagrant no está gestionando su fichero "hosts" automáticamente, además deberá añadir el nuevo sitio a ese fichero:

192.168.10.10  homestead.test
192.168.10.10  another.test

Una vez que el sitio ha sido agregado, ejecute el comando vagrant reload --provision desde su directorio *Homestead.

Tipos de sitio

Homestead soporta varios tipos de sitios los cuales le permiten fácilmente ejecutar projectos que no estén basados en Laravel. Por ejemplo, podemos, fácilmente, agregar una aplicación Symfony a Homestead usando el tipo de sitio symfony2:

sites:
    - map: symfony2.test
      to: /home/vagrant/my-symfony-project/web
      type: "symfony2"

Los tipos de sitios disponibles son:  apache, apigility, expressive, laravel (por defecto), proxy, silverstripe, statamic, symfony2, symfony4, y zf.

Parámetros de sitio

Puede agregar a Nginx valores fastcgi_param adicionales a su sitio a través de la directiva de sitio params. Por ejemplo, nosotros agregamos un parámetro FOO con el valor de BAR:

sites:
    - map: homestead.test
      to: /home/vagrant/project1/public
      params:
          - key: FOO
            value: BAR

Variables de entorno

Se pueden establecer variables de entorno globales añadiéndolas al archivo Homestead.yaml:

variables:
    - key: APP_ENV
      value: local
    - key: FOO
      value: bar

Tras actualizar Homestead.yaml, asegúrese de re-provisionar la máquina ejecutando vagrant reload --provision. Esto actualizará la configuración de PHP-FPM para todas las versiones de PHP instaladas y actualizará el entorno para el usuario de vagrant.

Wildcard SSL

Homestead configura un certificado SSL autofirmado para cada sitio definido en la sección sites: de su archivo Homestead.yaml. Si desea generar un certificado SSL con comodín para un sitio, puede agregar una opción de wildcard a la configuración de ese sitio. De forma predeterminada, el sitio utilizará el certificado comodín en lugar del certificado de dominio específico:

- map: foo.domain.test
  to: /home/vagrant/domain
  wildcard: "yes"

Si la opción use_wildcard se establece en no, el certificado comodín se generará pero no se utilizará:

- map: foo.domain.test
  to: /home/vagrant/domain
  wildcard: "yes"
  use_wildcard: "no"

Configurando programación cron

Laravel ofrece una manera sencilla de agendar tareas al cron agregando el comando de Artisan schedule:run Artisan command to be run every minute. The schedule:run especificando que se ejecute cada minuto. El comando schedule:run examinará la programación de trabajo definida en su clase App\Console\Kernel  para determinar cuales trabajos deberían ser ejecutados.

Si quieres que el comando schedule:run corra para un sitio de Homestead en particular, deberás asignar la opción schedule a true cuando definas el sitio:

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

La tarea Cron para el sitio será definida en directorio /etc/cron.d de tu máquina virtual.

Configurando Mailhog

Mailhog le permite fácilmente capturar sus correos electrónicos salientes y examinarlos sin realmente enviarlos a sus destinatarios. Para empezar, actualice su fichero .env para usar la siguiente configuración de correo:

MAIL_MAILER=smtp
MAIL_HOST=localhost
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

Una vez que Mailhog ha sido configurado, puede acceder al panel de control de Mailhog en http://localhost:8025.

Configurando Minio

Minio es un servidor de almacenamiento de objetos de código abierto con una API compatible con Amazon S3. Para instalar Minio, actualice su archivo Homestead.yaml con la siguiente opción de configuración en la sección "features":

minio: true

Por defecto, Minio está disponible en el puerto 9600. Puedes acceder al panel de control de Minio visitando http://localhost:9600/. La clave de acceso por defecto es homestead, mientras que la clave secreta por defecto es secretkey. Cuando se accede a Minio, siempre se debe utilizar la región us-east-1.

Para poder usar el Minio, tendrá que ajustar la configuración del disco S3 en su archivo de configuración config/filesystems.php. Tendrá que añadir la opción use_path_style_endpoint a la configuración del disco, así como cambiar la tecla url por endpoint:

's3' => [
    'driver' => 's3',
    'key' => env('AWS_ACCESS_KEY_ID'),
    'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'region' => env('AWS_DEFAULT_REGION'),
    'bucket' => env('AWS_BUCKET'),
    'endpoint' => env('AWS_URL'),
    'use_path_style_endpoint' => true,
]

Por último, asegúrate de que tu archivo .env tenga las siguientes opciones:

AWS_ACCESS_KEY_ID=homestead
AWS_SECRET_ACCESS_KEY=secretkey
AWS_DEFAULT_REGION=us-east-1
AWS_URL=http://localhost:9600

Para aprovisionar buckets, agregue una directiva de buckets al archivo de configuración de Homestead:

buckets:
    - name: your-bucket
      policy: public
    - name: your-private-bucket
      policy: none

Los valores de policy soportadas incluye: none, download, upload, y public.

Ports

Por defecto, los siguientes puertos se redirigen 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

Rederigir otros puertos

Si desea, se pueden redirigir puertos adicionales a la box de Vagrant, así como especificar su protocolo:

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

Compartir su entorno

A veces puede desear compartir lo que está trabajando con otros compañeros o con un cliente. Vagrant integra un sistema que a través de vagrant share; soporta esto, no obstante, esto no funcionará si tiene multiples sitios configurados en su fichero Homestead.yaml.

Para resolver este problema, Homestead incluye su propio comando share. Para empezar, conecte a través de SSH con su máquina Homestead con el comando vagrant ssh y ejecute share homestead.test. Esto compartirá el sitio homestead.test desde su fichero de configuración Homestead.yaml. Por supuesto, puede sustituirr homestead.test por cualquiera de los sitios configurados:

share homestead.test

Después de ejecutar el comando, verá aparecer una pantalla Ngrok conteniendo el registro de actividad y las URLs públicamente accesibles para el sitio compartido. Si quisiera especificar una region especifica, subdominio o cualquier otra opción Ngrok en tiempo de ejecución, puede agregarlas a su comando share:

share homestead.test -region=eu -subdomain=laravel

Recuerde que Vagrant es inherentemente inseguro y está exponiendo su máquina virtual a Internet cuando ejecuta el comandoe share.

Multiple PHP Versions

Homestead 6 introdujo el soporte para múltiples versiones de PHP en la misma máquina virtual. Puede especificar qué versión de PHP utilizar para un sitio determinado dentro de su archivo Homestead.yaml. Las versiones de PHP disponibles son: "5.6", "7.0", "7.1", "7.2", "7.3" y "7.4" (por defecto):

sites:
    - map: homestead.test
      to: /home/vagrant/project1/public
      php: "7.1"

Además, puedes usar cualquiera de las versiones de PHP soportadas a través del CLI:

php5.6 artisan list
php7.0 artisan list
php7.1 artisan list
php7.2 artisan list
php7.3 artisan list
php7.4 artisan list

También puede actualizar la versión de CLI predeterminada emitiendo los siguientes comandos desde su máquina virtual Homestead:

php56
php70
php71
php72
php73
php74

Web Servers

Homestead utiliza el servidor web de Nginx de forma predeterminada. Sin embargo, puede instalar Apache si se especifica apache como tipo de sitio. Si bien ambos servidores Web pueden instalarse al mismo tiempo, no pueden estar ejecutándose al mismo tiempo. El comando flip shell está disponible para facilitar el proceso de cambio entre los servidores web. El comando flip determina automáticamente qué servidor web se está ejecutando, lo apaga y luego inicia el otro servidor. Para usar este comando, SSH en su máquina Homestead y ejecutar el comando en su terminal:

flip

Mail

Homestead incluye el agente de transferencia de correo Postfix, que está escuchando en el puerto 1025 por defecto. Por lo tanto, puede indicar a su aplicación que utilice el controlador de correo smtp en el puerto 1025 del localhost. Entonces, todo el correo enviado será manejado por Postfix y capturado por Mailhog. Para ver tus correos electrónicos enviados, abre http://localhost:8025 en tu navegador de Internet.

# Depuración y perfilado

Depuración de peticiones web con Xdebug

Homestead incluye soporte para la depuración por pasos usando Xdebug. Por ejemplo, puede cargar una página web desde un navegador, y PHP se conectará a su IDE para permitir la inspección y modificación del código en ejecución.

Por defecto, Xdebug ya está funcionando y listo para aceptar conexiones. Si necesitas habilitar Xdebug en el CLI ejecuta el comando sudo phpenmod xdebug dentro de tu caja Vagrant. Luego, sigue las instrucciones de tu IDE para habilitar la depuración. Finalmente, configura tu navegador para que active Xdebug con una extensión o bookmarklet.

Xdebug hace que PHP se ejecute significativamente más lento. Para desactivar Xdebug, ejecuta sudo phpdismod xdebug dentro de tu caja Vagrant y reinicia el servicio FPM

Depuración de aplicaciones CLI

To debug a PHP CLI application, use the xphp shell alias inside your Vagrant box:

xphp path/to/script

Arranque automático de Xdebug

Cuando se depuran las pruebas funcionales que realizan solicitudes al servidor web, es más fácil iniciar automáticamente la depuración en lugar de modificar las pruebas para que pasen a través de un encabezado personalizado o una cookie para activar la depuración. Para forzar a Xdebug a que se inicie automáticamente, modifique /etc/php/7.x/fpm/conf.d/20-xdebug.ini dentro de tu Vagrant box y añade la siguiente configuración:

; If Homestead.yaml contains a different subnet for the IP address, this address may be different...
xdebug.remote_host = 192.168.10.1
xdebug.remote_autostart = 1

Perfilar las aplicaciones con Blackfire

Blackfire es un servicio SaaS para hacer perfiles de solicitudes web y aplicaciones CLI y escribir aserciones de rendimiento. Ofrece una interfaz de usuario interactiva que muestra los datos del perfil en gráficos de llamadas y líneas de tiempo. Está construido para su uso en el desarrollo, la puesta en escena y la producción, sin gastos generales para los usuarios finales. Proporciona comprobaciones de rendimiento, calidad y seguridad del código y de los ajustes de configuración del php.ini.

El Blackfire Player es una aplicación de código abierto de rastreo, prueba y raspado web que puede trabajar conjuntamente con Blackfire para crear escenarios de perfiles.

Para habilitar Blackfire, utilice el ajuste de "características" en el archivo de configuración de Homestead:

features:
    - blackfire:
        server_id: "server_id"
        server_token: "server_value"
        client_id: "client_id"
        client_token: "client_value"

Las credenciales del servidor Blackfire y las credenciales del cliente requieren una cuenta de usiario. Blackfire ofrece varias opciones para perfilar una aplicación, incluyendo una herramienta CLI y una extensión del navegador. Por favor, revise la documentación de Blackfire para más detalle.

Perfilando el rendimiento del PHP usando XHGui

XHGui es una interfaz de usuario para explorar el rendimiento de sus aplicaciones PHP. Para habilitar XHGui, añade xhgui: 'true' a la configuración de tu sitio:

sites:
    -
        map: your-site.test
        to: /home/vagrant/your-site/public
        type: "apache"
        xhgui: 'true'

Si el sitio ya existe, asegúrese de ejecutar vagrant provision después de actualizar su configuración.

Para perfilar una solicitud web, añada xhgui=on como parámetro de consulta a una solicitud. XHGui adjuntará automáticamente una cookie a la respuesta para que las solicitudes posteriores no necesiten el valor de la cadena de consulta. Puede ver los resultados del perfil de su solicitud navegando en http://your-site.test/xhgui.

Para perfilar una solicitud de CLI usando XHGui, anteponga al comando el prefijo XHGUI=on:

XHGUI=on path/to/script

Los resultados de los perfiles de CLI pueden ser vistos de la misma manera que los resultados de los perfiles de la web.

Tenga en cuenta que el acto de hacer perfiles retrasa la ejecución de los guiones, y los tiempos absolutos pueden ser tanto como el doble de las peticiones del mundo real. Por lo tanto, siempre compare las mejoras porcentuales y no los números absolutos. Además, tenga en cuenta que el tiempo de ejecución incluye cualquier tiempo de pausa en un depurador.

Dado que los perfiles de rendimiento ocupan un espacio significativo en el disco, se eliminan automáticamente después de unos días.

Network Interfaces

La propiedad networks de Homestead.yaml configura los interfaces de red para su entorno Homestead. Puede configurar tantas interfaces como sean necesarias:

networks:
    - type: "private_network"
      ip: "192.168.10.20"

Para activar una interfaz enlazada, configure una configuración de bridge y cambie el tipo red a public_network:

networks:
    - type: "public_network"
      ip: "192.168.10.20"
      bridge: "en1: Wi-Fi (AirPort)"

Para activar DHCP, sólo elimine la opción ip de su configuración:

networks:
    - type: "public_network"
      bridge: "en1: Wi-Fi (AirPort)"

# Extendiendo Homestead

Puede ampliar Homestead utilizando el script after.sh en la raíz del directorio de Homestead. Dentro de este archivo, puede agregar cualquier comando de shell que sea necesario para configurar y personalizar correctamente su máquina virtual.

Al personalizar Homestead, Ubuntu puede preguntarle si desea mantener la configuración original de un paquete o sobrescribirla con un nuevo archivo de configuración. Para evitar esto, debe utilizar el siguiente comando cuando instale los paquetes para evitar sobrescribir cualquier configuración escrita previamente por Homestead:

sudo apt-get -y \
    -o Dpkg::Options::="--force-confdef" \
    -o Dpkg::Options::="--force-confold" \
    install your-package

Personalización del usuario

Al utilizar Homestead en un equipo, es posible que desee ajustar Homestead para que se adapte mejor a su estilo de desarrollo personal. Puede crear un archivo user-customizations.sh fen la raíz del directorio de Homestead (el mismo directorio que contiene su Homestead.yaml). Dentro de este archivo, puede realizar cualquier personalización que desee; sin embargo, el user-customizations.sh no debe ser controlado por la versión.

# Actualizando Homestead

Antes de comenzar a actualizar Homestead, asegúrese de que ha eliminado su máquina virtual actual ejecutando el siguiente comando en el directorio de Homestead:

vagrant destroy

A continuación, debe actualizar el código fuente de Homestead. Si clonaste el repositorio puedes ejecutar los siguientes comandos en la ubicación en la que clonaste originalmente el repositorio:

git fetch

git pull origin release

Estos comandos extraen el último código de Homestead del repositorio de GitHub, recuperan las últimas etiquetas y luego comprueban la última versión etiquetada. Puedes encontrar la última versión estable en el GitHub releases page.

Si ha instalado Homestead a través del archivo composer.json de su proyecto, debe asegurarse de que su archivo composer.json contiene "laravel/homestead": "^11" y actualizar sus dependencias:

composer update

Entonces, deberías actualizar la caja de los vagabundos usando el comando vagrant box update:

vagrant box update

A continuación, debe ejecutar el comando bash init.sh desde el directorio de Homestead para actualizar algunos archivos de configuración adicionales. Se le preguntará si desea sobrescribir los archivos existentes Homestead.yaml, after.sh, y aliases:

// Mac / Linux...
bash init.sh

// Windows...
init.bat

Por último, tendrá que regenerar su caja de Homestead para utilizar la última instalación Vagrant:

vagrant up

# Ajustes específicos del proveedor

VirtualBox

natdnshostresolver

Por defecto, Homestead establece la configuración natdnshostresolver a on. Esto permite a Homestead utilizar las configuración del DNS de su sistema operativo anfitrión. Si quisiera sobreeescribir este comportamiento, agregue las siguientes líneas a su fichero Homestead.yaml:

provider: virtualbox
natdnshostresolver: 'off'

Enlaces simbólicos en Windows

Si los enlaces simbólicos no funcionan correctamente en su máquina de Windows, puede que tenga que añadir el siguiente bloque a su Vagrantfile:

config.vm.provider "virtualbox" do |v|
    v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
end