1. Paquetes
  2. Laravel Homestead

Introducción

Laravel se esfuerza por hacer que toda la experiencia de desarrollo en PHP sea encantadora, incluido tu entorno de desarrollo local. Laravel Homestead es una caja Vagrant oficial y preempaquetada que te proporciona un maravilloso entorno de desarrollo sin requerir que instales PHP, un servidor web u otro software de servidor en tu máquina local.

Vagrant proporciona una forma simple y elegante de gestionar y aprovisionar máquinas virtuales. Las cajas Vagrant son completamente desechables. Si algo sale mal, puedes destruir y volver a crear la caja en minutos.

Homestead se ejecuta en cualquier sistema Windows, macOS o Linux e incluye Nginx, PHP, MySQL, PostgreSQL, Redis, Memcached, Node y todo el otro software que necesitas para desarrollar increíbles aplicaciones Laravel.

Advertencia Si estás utilizando Windows, es posible que necesites habilitar la virtualización de hardware (VT-x). Por lo general, se puede habilitar a través de tu BIOS. Si estás utilizando Hyper-V en un sistema UEFI, es posible que también debas desactivar Hyper-V para acceder a VT-x.

Software Incluido

  • Ubuntu 20.04
  • Git
  • PHP 8.2
  • PHP 8.1
  • PHP 8.0
  • PHP 7.4
  • PHP 7.3
  • PHP 7.2
  • PHP 7.1
  • PHP 7.0
  • PHP 5.6
  • Nginx
  • MySQL 8.0
  • lmm
  • Sqlite3
  • PostgreSQL 15
  • Composer
  • Docker
  • 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
  • Elasticsearch
  • EventStoreDB
  • Flyway
  • Gearman
  • Go
  • Grafana
  • InfluxDB
  • Logstash
  • Mailpit (Replaces Mailhog)
  • MariaDB
  • Meilisearch
  • MinIO
  • MongoDB
  • Neo4j
  • Oh My Zsh
  • Open Resty
  • PM2
  • Python
  • R
  • RabbitMQ
  • Rust
  • RVM (Ruby Version Manager)
  • Solr
  • TimescaleDB
  • Trader (PHP extension)
  • Webdriver & Laravel Dusk Utilities

Instalación y Configuración

Primeros Pasos

Antes de lanzar tu entorno Homestead, debes instalar Vagrant así como uno de los siguientes proveedores compatibles:

Todos estos paquetes de software ofrecen instaladores visuales fáciles de usar para todos los sistemas operativos populares.

Para utilizar el proveedor Parallels, deberás instalar el complemento Vagrant de Parallels. Es gratuito.

Instalando Homestead

Puedes instalar Homestead clonando el repositorio de Homestead en tu máquina anfitriona. Considera clonar el repositorio en una carpeta Homestead dentro de tu directorio "home", ya que la máquina virtual Homestead servirá como anfitrión para todas tus aplicaciones Laravel. A lo largo de esta documentación, nos referiremos a este directorio como tu "directorio Homestead":

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

Después de clonar el repositorio de Laravel Homestead, deberías cambiar a la rama release. Esta rama siempre contiene la última versión estable de Homestead:

cd ~/Homestead
 
git checkout release

A continuación, ejecuta el comando bash init.sh desde el directorio de Homestead para crear el archivo de configuración Homestead.yaml. El archivo Homestead.yaml es donde configurarás todos los ajustes para tu instalación de Homestead. Este archivo se colocará en el directorio de Homestead:

# macOS / Linux...
bash init.sh
 
# Windows...
init.bat

Configurando Homestead

Configurando su Proveedor

La clave provider en tu archivo Homestead.yaml indica qué proveedor de Vagrant se debe usar: virtualbox o parallels:

provider: virtualbox

Advertencia Si estás utilizando Apple Silicon, se requiere el proveedor Parallels.

Configurando Carpetas Compartidas

La propiedad folders del archivo Homestead.yaml lista todas las carpetas que deseas compartir con tu entorno Homestead. A medida que se cambian los archivos dentro de estas carpetas, se sincronizarán entre tu máquina local y el entorno virtual de Homestead. Puedes configurar tantas carpetas compartidas como sea necesario:

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

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

Siempre debes asignar aplicaciones individuales a su propia asignación de carpeta en lugar de asignar un directorio único que contenga todas tus aplicaciones. Cuando asignas una carpeta, la máquina virtual debe realizar un seguimiento de todas las operaciones de E/S de disco para cada archivo en la carpeta. Puedes experimentar una reducción de rendimiento si tienes un gran número de archivos en una carpeta:

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

Advertencia Nunca debes montar . (el directorio actual) al usar Homestead. Esto hace que Vagrant no mapee la carpeta actual a /vagrant y romperá funciones opcionales y causará resultados inesperados durante el aprovisionamiento.

Para habilitar NFS, puedes agregar una opción type a tu asignación de carpetas:

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

Advertencia Al usar NFS en Windows, debes considerar instalar el complemento vagrant-winnfsd. Este complemento mantendrá los permisos correctos de usuario/grupo para archivos y directorios dentro de la máquina virtual Homestead.

También puedes pasar cualquier opción compatible con Synced Folders de Vagrant enumerándolas bajo la clave options:

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

Configurando Sitios Nginx

¿No estás familiarizado con Nginx? No hay problema. La propiedad sites de tu archivo Homestead.yaml te permite mapear fácilmente un "dominio" a una carpeta en tu entorno Homestead. Se incluye una configuración de sitio de muestra en el archivo Homestead.yaml. Nuevamente, puedes agregar tantos sitios como necesites en tu entorno Homestead. Homestead puede servir como un entorno virtual conveniente para cada aplicación Laravel en la que estés trabajando:

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

Si cambias la propiedad sites después de aprovisionar la máquina virtual Homestead, debes ejecutar el comando vagrant reload --provision en tu terminal para actualizar la configuración de Nginx en la máquina virtual.

Advertencia Los scripts de Homestead están diseñados para ser lo más idempotentes posible. Sin embargo, si experimentas problemas durante el aprovisionamiento, debes destruir y reconstruir la máquina ejecutando el comando vagrant destroy && vagrant up.

Resolución de Nombres de Host

Homestead publica nombres de host usando mDNS para la resolución automática de host. Si estableces hostname: homestead en tu archivo Homestead.yaml, el host estará disponible en homestead.local. macOS, iOS y las distribuciones de escritorio de Linux incluyen soporte para mDNS de forma predeterminada. Si usas Windows, debes instalar Bonjour Print Services for Windows.

El uso de nombres de host automáticos funciona mejor para instalaciones por proyecto de Homestead. Si hospedas varios sitios en una única instancia de Homestead, puedes agregar los "dominios" de tus sitios web al archivo hosts de tu máquina. El archivo hosts redirigirá las solicitudes para tus sitios de Homestead a la máquina virtual de Homestead. En macOS y Linux, este archivo se encuentra en /etc/hosts. En Windows, está en C:\Windows\System32\drivers\etc\hosts. Las líneas que agregues a este archivo se verán así:

192.168.56.56 homestead.test

Asegúrate de que la dirección IP listada sea la que se establece en tu archivo Homestead.yaml. Una vez que hayas agregado el dominio a tu archivo hosts y hayas iniciado la caja Vagrant, podrás acceder al sitio a través de tu navegador web:

http://homestead.test

Configurando Servicios

Homestead inicia varios servicios de forma predeterminada; sin embargo, puedes personalizar qué servicios están habilitados o deshabilitados durante la aprovisionamiento. Por ejemplo, puedes habilitar PostgreSQL y deshabilitar MySQL modificando la opción services dentro de tu archivo Homestead.yaml:

services:
- enabled:
- "postgresql"
- disabled:
- "mysql"

Los servicios especificados se iniciarán o detendrán según su orden en las directivas enabled y disabled.

Iniciando la Caja Vagrant

Una vez que hayas editado el Homestead.yaml a tu gusto, ejecuta el comando vagrant up desde tu directorio Homestead. Vagrant iniciará la máquina virtual y configurará automáticamente tus carpetas compartidas y sitios Nginx.

Para destruir la máquina, puedes usar el comando vagrant destroy.

Instalación por Proyecto

En lugar de instalar Homestead globalmente y compartir la misma máquina virtual Homestead en todos tus proyectos, puedes configurar una instancia de Homestead para cada proyecto que manejes. Instalar Homestead por proyecto puede ser beneficioso si deseas incluir un archivo Vagrantfile con tu proyecto, lo que permite a otros trabajar en el proyecto realizar vagrant up inmediatamente después de clonar el repositorio del proyecto.

Puedes instalar Homestead en tu proyecto usando el administrador de paquetes Composer:

composer require laravel/homestead --dev

Una vez que Homestead se haya instalado, llama al comando make de Homestead para generar el Vagrantfile y el archivo Homestead.yaml para tu proyecto. Estos archivos se colocarán en la raíz de tu proyecto. El comando make configurará automáticamente las directivas sites y folders en el archivo Homestead.yaml:

# macOS / Linux...
php vendor/bin/homestead make
 
# Windows...
vendor\\bin\\homestead make

A continuación, ejecuta el comando vagrant up en tu terminal y accede a tu proyecto en http://homestead.test en tu navegador. Recuerda que aún deberás agregar una entrada en el archivo /etc/hosts para homestead.test o el dominio de tu elección si no estás utilizando la resolución automática de nombres de host.

Instalación de Funcionalidades Opcionales

El software opcional se instala utilizando la opción features dentro de tu archivo Homestead.yaml. La mayoría de las características se pueden habilitar o deshabilitar 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
- elasticsearch:
version: 7.9.0
- eventstore: true
version: 21.2.0
- flyway: true
- gearman: true
- golang: true
- grafana: true
- influxdb: true
- logstash: true
- mailpit: true
- mariadb: true
- meilisearch: true
- minio: true
- mongodb: true
- mysql: true
- neo4j: true
- ohmyzsh: true
- openresty: true
- pm2: true
- python: true
- r-base: true
- rabbitmq: true
- rustc: true
- rvm: true
- solr: true
- timescaledb: true
- trader: true
- webdriver: true

Elasticsearch

Puedes especificar una versión compatible de Elasticsearch, que debe ser un número de versión exacto (major.minor.patch). La instalación predeterminada creará un clúster llamado 'homestead'. Nunca debes asignar a Elasticsearch más de la mitad de la memoria del sistema operativo, así que asegúrate de que tu máquina virtual Homestead tenga al menos el doble de la asignación de Elasticsearch.

Nota Consulta la documentación de Elasticsearch para aprender cómo personalizar tu configuración.

MariaDB

Habilitar MariaDB eliminará MySQL e instalará MariaDB. MariaDB suele servir como un reemplazo compatible con MySQL, así que debes seguir utilizando el controlador de base de datos mysql en la configuración de la base de datos de tu aplicación.

MongoDB

La instalación predeterminada de MongoDB establecerá el nombre de usuario de la base de datos como homestead y la contraseña correspondiente como secret.

Neo4j

La instalación predeterminada de Neo4j establecerá el nombre de usuario de la base de datos como homestead y la contraseña correspondiente como secret. Para acceder al navegador de Neo4j, visita http://homestead.test:7474 a través de tu navegador web. Los puertos 7687 (Bolt), 7474 (HTTP) y 7473 (HTTPS) están listos para atender las solicitudes del cliente Neo4j.

Alias

Puedes agregar alias de Bash a tu máquina virtual Homestead modificando el archivo aliases dentro de tu directorio Homestead:

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

Después de haber actualizado el archivo aliases, debes reprovisionar la máquina virtual Homestead utilizando el comando vagrant reload --provision. Esto asegurará que tus nuevos alias estén disponibles en la máquina.

Actualizando Homestead

Antes de comenzar a actualizar Homestead, debes asegurarte de haber eliminado tu máquina virtual actual ejecutando el siguiente comando en tu directorio Homestead:

vagrant destroy

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

git fetch
 
git pull origin release

Estos comandos obtienen el último código de Homestead desde el repositorio de GitHub, recuperan las últimas etiquetas y luego seleccionan la última versión etiquetada. Puedes encontrar la versión estable más reciente en la página de lanzamientos de GitHub de Homestead.

Si instalaste Homestead a través del archivo composer.json de tu proyecto, debes asegurarte de que tu archivo composer.json contenga \"laravel/homestead\": \"^12\" y actualizar tus dependencias:

composer update

A continuación, debes actualizar la caja de Vagrant utilizando el comando vagrant box update:

vagrant box update

Después de actualizar la caja de Vagrant, debes ejecutar el comando bash init.sh desde el directorio de Homestead para actualizar los archivos de configuración adicionales de Homestead. Se te preguntará si deseas sobrescribir tus archivos existentes Homestead.yaml, after.sh y aliases:

# macOS / Linux...
bash init.sh
 
# Windows...
init.bat

Finalmente, deberás regenerar tu máquina virtual Homestead para utilizar la última instalación de Vagrant:

vagrant up

Uso Diario

Conexión Via SSH

Puedes conectarte por SSH a tu máquina virtual ejecutando el comando de terminal vagrant ssh desde tu directorio Homestead.

Añadiendo Sitios Adicionales

Una vez que tu entorno Homestead esté aprovisionado y en funcionamiento, es posible que desees agregar sitios Nginx adicionales para tus otros proyectos Laravel. Puedes ejecutar tantos proyectos Laravel como desees en un solo entorno Homestead. Para agregar un sitio adicional, agrega el sitio a tu archivo Homestead.yaml.

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

Advertencia Asegúrate de haber configurado un mapeo de carpetas para el directorio del proyecto antes de agregar el sitio.

Si Vagrant no está gestionando automáticamente tu archivo "hosts", es posible que necesites agregar el nuevo sitio también a ese archivo. En macOS y Linux, este archivo se encuentra en /etc/hosts. En Windows, está en C:\Windows\System32\drivers\etc\hosts:

192.168.56.56 homestead.test
192.168.56.56 another.test

Una vez que se haya agregado el sitio, ejecuta el comando vagrant reload --provision desde tu directorio Homestead.

Tipos de Sitios

Homestead admite varios "tipos" de sitios que te permiten ejecutar fácilmente proyectos que no se basan en Laravel. Por ejemplo, podemos agregar fácilmente una aplicación Statamic a Homestead usando el tipo de sitio statamic:

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

Los tipos de sitio disponibles son: apache, apache-proxy, apigility, expressive, laravel (el predeterminado), proxy (para nginx), silverstripe, statamic, symfony2, symfony4 y zf.

Parámetros del Sitio

Puedes agregar valores adicionales de fastcgi_param de Nginx a tu sitio mediante la directiva de sitio params:

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

Variables de Entorno

Puedes definir variables de entorno globales agregándolas a tu archivo Homestead.yaml:

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

Después de actualizar el archivo Homestead.yaml, asegúrate de reprovisionar la máquina ejecutando el comando vagrant reload --provision. Esto actualizará la configuración de PHP-FPM para todas las versiones de PHP instaladas y también actualizará el entorno para el usuario vagrant.

Puertos

De forma predeterminada, los siguientes puertos se reenvían a tu entorno Homestead:

  • HTTP: 8000 → Forwards To 80
  • HTTPS: 44300 → Forwards To 443

Reenvío de Puertos Adicionales

Si lo deseas, puedes reenviar puertos adicionales a la caja Vagrant definiendo una entrada de configuración ports dentro de tu archivo Homestead.yaml. Después de actualizar el archivo Homestead.yaml, asegúrate de reprovisionar la máquina ejecutando el comando vagrant reload --provision.

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

A continuación, se muestra una lista de puertos de servicio adicionales de Homestead que es posible que desees asignar desde tu máquina anfitriona a tu caja Vagrant:

  • SSH: 2222 → To 22
  • ngrok UI: 4040 → To 4040
  • MySQL: 33060 → To 3306
  • PostgreSQL: 54320 → To 5432
  • MongoDB: 27017 → To 27017
  • Mailhog: 8025 → To 8025
  • Minio: 9600 → To 9600

Versiones de PHP

Homestead admite ejecutar varias versiones de PHP en la misma máquina virtual. Puedes especificar qué versión de PHP usar para un sitio dado dentro de tu archivo Homestead.yaml. Las versiones de PHP disponibles son: "5.6", "7.0", "7.1", "7.2", "7.3", "7.4", "8.0", "8.1" y "8.2" (el predeterminado):

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

Dentro de tu máquina virtual Homestead, puedes usar cualquiera de las versiones de PHP admitidas a través de la 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
php8.0 artisan list
php8.1 artisan list
php8.2 artisan list

Puedes cambiar la versión predeterminada de PHP utilizada por la CLI emitiendo los siguientes comandos desde tu máquina virtual Homestead:

php56
php70
php71
php72
php73
php74
php80
php81
php82

Conexión a Bases de Datos

Se configura una base de datos homestead para MySQL y PostgreSQL de forma predeterminada. Para conectarte a tu base de datos MySQL o PostgreSQL desde el cliente de base de datos de tu máquina anfitriona, debes conectarte a 127.0.0.1 en el puerto 33060 (MySQL) o 54320 (PostgreSQL). El nombre de usuario y la contraseña para ambas bases de datos son homestead / secret.

Advertencia Solo debes usar estos puertos no estándar al conectarte a las bases de datos desde tu máquina host. Utilizarás los puertos predeterminados 3306 y 5432 en el archivo de configuración database de tu aplicación Laravel, ya que Laravel se ejecuta dentro de la máquina virtual.

Copias de Seguridad de Bases de Datos

Homestead puede realizar automáticamente copias de seguridad de tu base de datos cuando se destruye tu máquina virtual Homestead. Para utilizar esta función, debes estar utilizando Vagrant 2.1.0 o superior. O, si estás utilizando una versión más antigua de Vagrant, debes instalar el complemento vagrant-triggers. Para habilitar copias de seguridad automáticas de la base de datos, agrega la siguiente línea a tu archivo Homestead.yaml:

backup: true

Una vez configurado, Homestead exportará tus bases de datos a los directorios .backup/mysql_backup y .backup/postgres_backup cuando se ejecute el comando vagrant destroy. Estos directorios se pueden encontrar en la carpeta donde instalaste Homestead o en la raíz de tu proyecto si estás utilizando el método de instalación por proyecto.

Configurando Programaciones Cron

Laravel proporciona una forma conveniente de programar trabajos cron programando un solo comando Artisan schedule:run que se ejecuta cada minuto. El comando schedule:run examinará la programación de trabajos definida en tu clase App\Console\Kernel para determinar qué tareas programadas ejecutar.

Si deseas que se ejecute el comando schedule:run para un sitio de Homestead, puedes establecer la opción schedule en true al definir el sitio:

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

El trabajo cron para el sitio se definirá en el directorio /etc/cron.d de la máquina virtual Homestead.

Configurando MailHog

MailHog te permite interceptar tus correos electrónicos salientes y examinarlos sin enviar realmente el correo a sus destinatarios. Para comenzar, actualiza el archivo .env de tu aplicación 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, puedes acceder al panel 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, actualiza tu archivo Homestead.yaml con la siguiente opción de configuración en la sección features:

minio: true

De forma predeterminada, Minio está disponible en el puerto 9600. Puedes acceder al panel de control de Minio visitando http://localhost:9600. La clave de acceso predeterminada es homestead, mientras que la clave secreta predeterminada es secretkey. Al acceder a Minio, siempre debes usar la región us-east-1.

Para usar Minio, deberás ajustar la configuración del disco S3 en el archivo de configuración config/filesystems.php de tu aplicación. Deberás agregar la opción use_path_style_endpoint a la configuración del disco y cambiar la clave url a 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,
]

Finalmente, 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 "S3" con Minio, agrega una directiva buckets a tu archivo Homestead.yaml. Después de definir tus buckets, debes ejecutar el comando vagrant reload --provision en tu terminal:

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

Los valores admitidos para policy incluyen: none, download, upload y public.

Laravel Dusk

Para ejecutar pruebas Laravel Dusk dentro de Homestead, debes habilitar la característica webdriver en tu configuración de Homestead:

features:
- webdriver: true

Después de habilitar la característica webdriver, debes ejecutar el comando vagrant reload --provision en tu terminal.

Compartiendo su Entorno

A veces, es posible que desees compartir lo que estás trabajando actualmente con compañeros de trabajo o un cliente. Vagrant tiene soporte incorporado para esto a través del comando vagrant share; sin embargo, esto no funcionará si tienes varios sitios configurados en tu archivo Homestead.yaml.

Para resolver este problema, Homestead incluye su propio comando share. Para comenzar, conéctate por SSH a tu máquina virtual Homestead a través de vagrant ssh y ejecuta el comando share homestead.test. Este comando compartirá el sitio homestead.test desde tu archivo de configuración Homestead.yaml. Puedes sustituir cualquier otro sitio configurado por homestead.test:

share homestead.test

Después de ejecutar el comando, verás una pantalla de Ngrok que contiene el registro de actividad y las URL públicas para el sitio compartido. Si deseas especificar una región personalizada, un subdominio u otras opciones de tiempo de ejecución de Ngrok, puedes agregarlas a tu comando share:

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

Si necesitas compartir contenido a través de HTTPS en lugar de HTTP, usar el comando sshare en lugar de share te permitirá hacerlo.

Advertencia Recuerda, Vagrant es inherentemente inseguro y estás exponiendo tu máquina virtual a Internet al ejecutar el comando share.

Depuración y Perfilado

Depuración de Solicitudes Web con Xdebug

Homestead incluye soporte para la depuración paso a paso utilizando Xdebug. Por ejemplo, puedes acceder a una página en tu navegador y PHP se conectará a tu IDE para permitir la inspección y modificación del código en ejecución.

De forma predeterminada, Xdebug ya está en funcionamiento y listo para aceptar conexiones. Si necesitas habilitar Xdebug en la CLI, ejecuta el comando sudo phpenmod xdebug dentro de tu máquina virtual Homestead. A continuación, sigue las instrucciones de tu IDE para habilitar la depuración. Finalmente, configura tu navegador para activar Xdebug con una extensión o bookmarklet.

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

Iniciar Xdebug Automáticamente

Al depurar 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 por una cabecera o cookie personalizada para iniciar la depuración. Para forzar que Xdebug se inicie automáticamente, modifica el archivo /etc/php/7.x/fpm/conf.d/20-xdebug.ini dentro de tu máquina virtual Homestead y agrega la siguiente configuración:

; If Homestead.yaml contains a different subnet for the IP address, this address may be different...
xdebug.client_host = 192.168.10.1
xdebug.mode = debug
xdebug.start_with_request = yes

Depuración de Aplicaciones de Línea de Comandos

Para depurar una aplicación PHP CLI, utiliza el alias de shell xphp dentro de tu máquina virtual Homestead:

xphp /path/to/script

Perfilado de Aplicaciones con Blackfire

Blackfire es un servicio para perfilar solicitudes web y aplicaciones CLI. Ofrece una interfaz de usuario interactiva que muestra datos de perfil en gráficos de llamadas y líneas de tiempo. Está diseñado para su uso en desarrollo, puesta en escena y producción, sin ningún costo adicional para los usuarios finales. Además, Blackfire proporciona verificaciones de rendimiento, calidad y seguridad en el código y la configuración de php.ini.

El Blackfire Player es una aplicación de código abierto para rastrear la web, realizar pruebas y extraer información que puede funcionar conjuntamente con Blackfire para crear escenarios de perfil.

Para habilitar Blackfire, usa la configuración de "features" en tu 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 Blackfire. Blackfire ofrece diversas opciones para perfilar una aplicación, incluido una herramienta CLI y una extensión de navegador. Por favor, consulta la documentación de Blackfire para obtener más detalles.

Interfaces de Red

La propiedad networks del archivo Homestead.yaml configura interfaces de red para tu máquina virtual Homestead. Puedes configurar tantas interfaces como sea necesario:

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

Para habilitar una interfaz bridged, configura una opción bridge para la red y cambia el tipo de red a public_network:

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

Para habilitar DHCP, simplemente elimina la opción ip de tu configuración:

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

Para actualizar el dispositivo que la red está utilizando, puedes agregar una opción dev a la configuración de la red. El valor dev predeterminado es eth0:

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

Ampliando Homestead

Puedes ampliar Homestead utilizando el script after.sh en la raíz de tu directorio Homestead. En este archivo, puedes agregar comandos de shell que sean necesarios para configurar y personalizar correctamente tu máquina virtual.

Cuando personalizas Homestead, Ubuntu puede preguntarte si deseas conservar la configuración original de un paquete o sobrescribirla con un nuevo archivo de configuración. Para evitar esto, debes usar el siguiente comando al instalar 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 package-name

Personalizaciones del Usuario

Cuando usas Homestead con tu equipo, es posible que desees ajustar Homestead para que se adapte mejor a tu estilo de desarrollo personal. Para lograr esto, puedes crear un archivo user-customizations.sh en la raíz de tu directorio Homestead (el mismo directorio que contiene tu archivo Homestead.yaml). En este archivo, puedes realizar cualquier personalización que desees; sin embargo, el archivo user-customizations.sh no debe estar bajo control de versiones.

Configuraciones Específicas del Proveedor

VirtualBox

natdnshostresolver

De forma predeterminada, Homestead configura la opción natdnshostresolver en on. Esto permite que Homestead utilice la configuración DNS de tu sistema operativo host. Si deseas anular este comportamiento, agrega las siguientes opciones de configuración a tu archivo Homestead.yaml:

provider: virtualbox
natdnshostresolver: 'off'