- Introducción
- Instalación
- Servir Sitios
- Compartir Sitios
- Variables de Entorno Específicas por Sitio
- Proxy para Servicios
- Drivers Personalizados de Valet
- Otros Comandos de Valet
- Directorios y Archivos de Valet
#Introducción
¿Busca una forma aún más sencilla de desarrollar aplicaciones Laravel en macOS? Pruebe Laravel Herd. Herd incluye todo lo necesario para comenzar con el desarrollo en Laravel, incluyendo Valet, PHP y Composer.
Laravel Valet es un entorno de desarrollo para minimalistas en macOS. Laravel Valet configura su Mac para que siempre ejecute Nginx en segundo plano al iniciar la máquina. Luego, usando DnsMasq, Valet hace proxy de todas las solicitudes en el dominio *.test para apuntar a los sitios instalados en su máquina local.
En otras palabras, Valet es un entorno de desarrollo Laravel extremadamente rápido que usa aproximadamente 7 MB de RAM. Valet no es un reemplazo completo para Sail o Homestead, pero ofrece una excelente alternativa si desea lo básico flexible, prefiere velocidad extrema o trabaja en una máquina con memoria RAM limitada.
De fábrica, Valet soporta, pero no se limita a:
<style> #valet-support > ul { column-count: 3; -moz-column-count: 3; -webkit-column-count: 3; line-height: 1.9; } </style>Sin embargo, puede extender Valet con sus propios drivers personalizados.
#Instalación
Valet requiere macOS y Homebrew. Antes de la instalación, asegúrese de que ningún otro programa como Apache o Nginx esté usando el puerto 80 de su máquina local.
Para comenzar, primero debe asegurarse de que Homebrew esté actualizado usando el comando update:
brew update
Luego, debe usar Homebrew para instalar PHP:
brew install php
Después de instalar PHP, estará listo para instalar el gestor de paquetes Composer. Además, debe asegurarse de que el directorio $HOME/.composer/vendor/bin esté en la variable "PATH" de su sistema. Una vez instalado Composer, puede instalar Laravel Valet como un paquete global de Composer:
composer global require laravel/valet
Finalmente, puede ejecutar el comando install de Valet. Esto configurará e instalará Valet y DnsMasq. Además, los demonios de los que depende Valet se configurarán para iniciarse cuando su sistema arranque:
valet install
Una vez instalado Valet, intente hacer ping a cualquier dominio *.test desde su terminal con un comando como ping foobar.test. Si Valet está instalado correctamente, debería ver que este dominio responde en 127.0.0.1.
Valet iniciará automáticamente sus servicios requeridos cada vez que su máquina se encienda.
#Versiones de PHP
En lugar de modificar su versión global de PHP, puede indicarle a Valet que use versiones de PHP por sitio mediante el comando isolate comando.
Valet le permite cambiar versiones de PHP usando el comando valet use php@version. Valet instalará la versión especificada de PHP vía Homebrew si no está ya instalada:
valet use php@8.1
valet use php
También puede crear un archivo .valetrc en la raíz de su proyecto. El archivo .valetrc debe contener la versión de PHP que el sitio debe usar:
php=php@8.1
Una vez creado este archivo, simplemente puede ejecutar el comando valet use y este determinará la versión de PHP preferida del sitio leyendo el archivo.
Valet solo sirve una versión de PHP a la vez, incluso si tiene múltiples versiones instaladas.
#Base de Datos
Si su aplicación necesita una base de datos, consulte DBngin, que ofrece una herramienta gratuita todo en uno para gestión de bases de datos que incluye MySQL, PostgreSQL y Redis. Después de instalar DBngin, puede conectarse a su base de datos en 127.0.0.1 usando el usuario root y una contraseña vacía.
#Restablecer su Instalación
Si tiene problemas para que su instalación de Valet funcione correctamente, ejecutar el comando composer global require laravel/valet seguido de valet install restablecerá su instalación y puede resolver varios problemas. En casos raros, puede ser necesario "restablecer a fondo" Valet ejecutando valet uninstall --force seguido de valet install.
#Actualizando Valet
Puede actualizar su instalación de Valet ejecutando el comando composer global require laravel/valet en su terminal. Después de actualizar, es buena práctica ejecutar el comando valet install para que Valet pueda hacer mejoras adicionales en sus archivos de configuración si es necesario.
#Actualizando a Valet 4
Si está actualizando de Valet 3 a Valet 4, siga estos pasos para actualizar correctamente su instalación de Valet:
- Si ha añadido archivos
.valetphprcpara personalizar la versión de PHP de su sitio, renombre cada archivo.valetphprca.valetrc. Luego, antepongaphp=al contenido existente del archivo.valetrc. - Actualice cualquier driver personalizado para que coincida con el namespace, extensión, type-hints y return type-hints del nuevo sistema de drivers. Puede consultar el SampleValetDriver de Valet como ejemplo.
- Si usa PHP 7.1 - 7.4 para servir sus sitios, asegúrese de seguir usando Homebrew para instalar una versión de PHP 8.0 o superior, ya que Valet usará esta versión, incluso si no es la versión principal vinculada, para ejecutar algunos de sus scripts.
#Servir Sitios
Una vez instalado Valet, está listo para comenzar a servir sus aplicaciones Laravel. Valet ofrece dos comandos para ayudarle a servir sus aplicaciones: park y link.
#El comando park
El comando park registra un directorio en su máquina que contiene sus aplicaciones. Una vez que el directorio ha sido registrado con Valet, todos los directorios dentro de ese directorio serán accesibles en su navegador web en http://<directory-name>.test:
cd ~/Sites
valet park
Eso es todo. Ahora, cualquier aplicación que cree dentro de su directorio registrado se servirá automáticamente usando la convención http://<directory-name>.test. Por ejemplo, si su directorio registrado contiene un directorio llamado "laravel", la aplicación en ese directorio será accesible en http://laravel.test. Además, Valet le permite acceder automáticamente al sitio usando subdominios comodín (http://foo.laravel.test).
#El comando link
El comando link también puede usarse para servir sus aplicaciones Laravel. Este comando es útil si desea servir un solo sitio en un directorio y no todo el directorio:
cd ~/Sites/laravel
valet link
Una vez que una aplicación ha sido vinculada a Valet usando el comando link, puede acceder a la aplicación usando el nombre de su directorio. Por ejemplo, el sitio vinculado en el ejemplo anterior puede ser accedido en http://laravel.test. Además, Valet permite acceder automáticamente al sitio usando subdominios comodín (http://foo.laravel.test).
Si desea servir la aplicación en un nombre de host diferente, puede pasar el nombre de host al comando link. Por ejemplo, puede ejecutar el siguiente comando para hacer que una aplicación esté disponible en http://application.test:
cd ~/Sites/laravel
valet link application
Por supuesto, también puede servir aplicaciones en subdominios usando el comando link:
valet link api.application
Puede ejecutar el comando links para mostrar una lista de todos sus directorios vinculados:
valet links
El comando unlink puede usarse para eliminar el enlace simbólico de un sitio:
cd ~/Sites/laravel
valet unlink
#Asegurando Sitios con TLS
Por defecto, Valet sirve sitios sobre HTTP. Sin embargo, si desea servir un sitio sobre TLS cifrado usando HTTP/2, puede usar el comando secure. Por ejemplo, si su sitio está siendo servido por Valet en el dominio laravel.test, debe ejecutar el siguiente comando para asegurar el sitio:
valet secure laravel
Para "desasegurar" un sitio y volver a servir su tráfico sobre HTTP simple, use el comando unsecure. Al igual que el comando secure, este comando acepta el nombre de host que desea desasegurar:
valet unsecure laravel
#Servir un Sitio Predeterminado
A veces, puede querer configurar Valet para que sirva un sitio "predeterminado" en lugar de un 404 al visitar un dominio test desconocido. Para lograr esto, puede agregar una opción default a su archivo de configuración ~/.config/valet/config.json que contenga la ruta al sitio que debe servir como predeterminado:
"default": "/Users/Sally/Sites/example-site",
#Versiones de PHP por Sitio
Por defecto, Valet usa su instalación global de PHP para servir sus sitios. Sin embargo, si necesita soportar múltiples versiones de PHP en varios sitios, puede usar el comando isolate para especificar qué versión de PHP debe usar un sitio en particular. El comando isolate configura Valet para usar la versión de PHP especificada para el sitio ubicado en su directorio de trabajo actual:
cd ~/Sites/example-site
valet isolate php@8.0
Si el nombre de su sitio no coincide con el nombre del directorio que lo contiene, puede especificar el nombre del sitio usando la opción --site:
valet isolate php@8.0 --site="site-name"
Para mayor comodidad, puede usar los comandos valet php, composer y which-php para redirigir llamadas a la CLI de PHP o herramientas apropiadas según la versión de PHP configurada para el sitio:
valet php
valet composer
valet which-php
Puede ejecutar el comando isolated para mostrar una lista de todos sus sitios aislados y sus versiones de PHP:
valet isolated
Para revertir un sitio a la versión global de PHP instalada en Valet, puede invocar el comando unisolate desde el directorio raíz del sitio:
valet unisolate
#Compartir Sitios
Valet incluye un comando para compartir sus sitios locales con el mundo, proporcionando una forma sencilla de probar su sitio en dispositivos móviles o compartirlo con miembros del equipo y clientes.
De fábrica, Valet soporta compartir sus sitios vía ngrok o Expose. Antes de compartir un sitio, debe actualizar su configuración de Valet usando el comando share-tool, especificando ngrok o expose:
valet share-tool ngrok
Si elige una herramienta y no la tiene instalada vía Homebrew (para ngrok) o Composer (para Expose), Valet le pedirá automáticamente que la instale. Por supuesto, ambas herramientas requieren que autentique su cuenta de ngrok o Expose antes de poder comenzar a compartir sitios.
Para compartir un sitio, navegue al directorio del sitio en su terminal y ejecute el comando share de Valet. Se copiará una URL pública accesible al portapapeles, lista para pegar en su navegador o compartir con su equipo:
cd ~/Sites/laravel
valet share
Para dejar de compartir su sitio, puede presionar Control + C.
Si usa un servidor DNS personalizado (como 1.1.1.1), la compartición con ngrok puede no funcionar correctamente. Si este es su caso, abra la configuración del sistema de su Mac, vaya a la configuración de Red, abra la configuración Avanzada, luego vaya a la pestaña DNS y agregue 127.0.0.1 como su primer servidor DNS.
#Compartir Sitios vía Ngrok
Compartir su sitio usando ngrok requiere que cree una cuenta ngrok y configure un token de autenticación. Una vez que tenga un token de autenticación, puede actualizar su configuración de Valet con ese token:
valet set-ngrok-token YOUR_TOKEN_HERE
Puede pasar parámetros adicionales de ngrok al comando share, como valet share --region=eu. Para más información, consulte la documentación de ngrok.
#Compartir Sitios vía Expose
Compartir su sitio usando Expose requiere que cree una cuenta Expose y se autentique con Expose mediante su token de autenticación.
Puede consultar la documentación de Expose para información sobre los parámetros adicionales de línea de comandos que soporta.
#Compartir Sitios en su Red Local
Por defecto, Valet restringe el tráfico entrante a la interfaz interna 127.0.0.1 para que su máquina de desarrollo no esté expuesta a riesgos de seguridad desde Internet.
Si desea permitir que otros dispositivos en su red local accedan a los sitios Valet en su máquina mediante la dirección IP de su máquina (por ejemplo: 192.168.1.10/application.test), deberá editar manualmente el archivo de configuración de Nginx correspondiente a ese sitio para eliminar la restricción en la directiva listen. Debe eliminar el prefijo 127.0.0.1: en la directiva listen para los puertos 80 y 443.
Si no ha ejecutado valet secure en el proyecto, puede abrir el acceso de red para todos los sitios no HTTPS editando el archivo /usr/local/etc/nginx/valet/valet.conf. Sin embargo, si está sirviendo el sitio del proyecto sobre HTTPS (ha ejecutado valet secure para el sitio), entonces debe editar el archivo ~/.config/valet/Nginx/app-name.test.
Una vez que haya actualizado su configuración de Nginx, ejecute el comando valet restart para aplicar los cambios de configuración.
#Variables de Entorno Específicas por Sitio
Algunas aplicaciones que usan otros frameworks pueden depender de variables de entorno del servidor pero no ofrecen una forma de configurar esas variables dentro de su proyecto. Valet le permite configurar variables de entorno específicas por sitio agregando un archivo .valet-env.php en la raíz de su proyecto. Este archivo debe devolver un array de pares sitio / variable de entorno que se agregarán al array global $_SERVER para cada sitio especificado en el array:
<?php
return [
// Establecer $_SERVER['key'] a "value" para el sitio laravel.test...
'laravel' => [
'key' => 'value',
],
// Establecer $_SERVER['key'] a "value" para todos los sitios...
'*' => [
'key' => 'value',
],
];
#Proxy para Servicios
A veces puede querer hacer proxy de un dominio Valet a otro servicio en su máquina local. Por ejemplo, puede necesitar ejecutar Valet mientras también ejecuta un sitio separado en Docker; sin embargo, Valet y Docker no pueden usar el puerto 80 al mismo tiempo.
Para resolver esto, puede usar el comando proxy para generar un proxy. Por ejemplo, puede hacer proxy de todo el tráfico de http://elasticsearch.test a http://127.0.0.1:9200:
# Proxy sobre HTTP...
valet proxy elasticsearch http://127.0.0.1:9200
# Proxy sobre TLS + HTTP/2...
valet proxy elasticsearch http://127.0.0.1:9200 --secure
Puede eliminar un proxy usando el comando unproxy:
valet unproxy elasticsearch
Puede usar el comando proxies para listar todas las configuraciones de sitios que están proxied:
valet proxies
#Drivers Personalizados de Valet
Puede escribir su propio "driver" de Valet para servir aplicaciones PHP que usen un framework o CMS no soportado nativamente por Valet. Cuando instala Valet, se crea un directorio ~/.config/valet/Drivers que contiene un archivo SampleValetDriver.php. Este archivo contiene una implementación de driver de ejemplo para mostrar cómo escribir un driver personalizado. Escribir un driver solo requiere implementar tres métodos: serves, isStaticFile y frontControllerPath.
Los tres métodos reciben los valores $sitePath, $siteName y $uri como argumentos. $sitePath es la ruta completa al sitio que se sirve en su máquina, como /Users/Lisa/Sites/my-project. $siteName es la parte "host" / "nombre del sitio" del dominio (my-project). $uri es la URI de la solicitud entrante (/foo/bar).
Una vez que haya completado su driver personalizado de Valet, colóquelo en el directorio ~/.config/valet/Drivers usando la convención de nombres FrameworkValetDriver.php. Por ejemplo, si escribe un driver personalizado para WordPress, el nombre del archivo debe ser WordPressValetDriver.php.
Veamos una implementación de ejemplo de cada método que su driver personalizado de Valet debe implementar.
#El método serves
El método serves debe devolver true si su driver debe manejar la solicitud entrante. De lo contrario, debe devolver false. Por lo tanto, dentro de este método debe intentar determinar si el $sitePath dado contiene un proyecto del tipo que intenta servir.
Por ejemplo, imaginemos que estamos escribiendo un WordPressValetDriver. Nuestro método serves podría verse así:
/**
* Determinar si el driver sirve la solicitud.
*/
public function serves(string $sitePath, string $siteName, string $uri): bool
{
return is_dir($sitePath.'/wp-admin');
}
#El método isStaticFile
El método isStaticFile debe determinar si la solicitud entrante es para un archivo "estático", como una imagen o una hoja de estilos. Si el archivo es estático, el método debe devolver la ruta completa al archivo estático en disco. Si la solicitud entrante no es para un archivo estático, el método debe devolver false:
/**
* Determinar si la solicitud entrante es para un archivo estático.
*
* @return string|false
*/
public function isStaticFile(string $sitePath, string $siteName, string $uri)
{
if (file_exists($staticFilePath = $sitePath.'/public/'.$uri)) {
return $staticFilePath;
}
return false;
}
El método isStaticFile solo será llamado si el método serves devuelve true para la solicitud entrante y la URI de la solicitud no es /.
#El método frontControllerPath
El método frontControllerPath debe devolver la ruta completa al "front controller" de su aplicación, que típicamente es un archivo "index.php" o equivalente:
/**
* Obtener la ruta completamente resuelta al front controller de la aplicación.
*/
public function frontControllerPath(string $sitePath, string $siteName, string $uri): string
{
return $sitePath.'/public/index.php';
}
#Drivers Locales
Si desea definir un driver personalizado de Valet para una sola aplicación, cree un archivo LocalValetDriver.php en el directorio raíz de la aplicación. Su driver personalizado puede extender la clase base ValetDriver o extender un driver específico de aplicación existente como LaravelValetDriver:
use Valet\Drivers\LaravelValetDriver;
class LocalValetDriver extends LaravelValetDriver
{
/**
* Determinar si el driver sirve la solicitud.
*/
public function serves(string $sitePath, string $siteName, string $uri): bool
{
return true;
}
/**
* Obtener la ruta completamente resuelta al front controller de la aplicación.
*/
public function frontControllerPath(string $sitePath, string $siteName, string $uri): string
{
return $sitePath.'/public_html/index.php';
}
}
#Otros Comandos de Valet
| Comando | Descripción |
|---|---|
valet list |
Muestra una lista de todos los comandos de Valet. |
valet diagnose |
Muestra diagnósticos para ayudar a depurar Valet. |
valet directory-listing |
Determina el comportamiento de listado de directorios. Por defecto está "off", lo que muestra una página 404 para directorios. |
valet forget |
Ejecute este comando desde un directorio "parqueado" para eliminarlo de la lista de directorios parqueados. |
valet log |
Ver una lista de logs escritos por los servicios de Valet. |
valet paths |
Ver todas sus rutas "parqueadas". |
valet restart |
Reiniciar los demonios de Valet. |
valet start |
Iniciar los demonios de Valet. |
valet stop |
Detener los demonios de Valet. |
valet trust |
Añadir archivos sudoers para Brew y Valet para permitir ejecutar comandos Valet sin pedir contraseña. |
valet uninstall |
Desinstalar Valet: muestra instrucciones para desinstalación manual. Pase la opción --force para eliminar agresivamente todos los recursos de Valet. |
#Directorios y Archivos de Valet
Puede encontrar útil la siguiente información sobre directorios y archivos al solucionar problemas con su entorno Valet:
#~/.config/valet
Contiene toda la configuración de Valet. Puede querer mantener una copia de seguridad de este directorio.
#~/.config/valet/dnsmasq.d/
Este directorio contiene la configuración de DNSMasq.
#~/.config/valet/Drivers/
Este directorio contiene los drivers de Valet. Los drivers determinan cómo se sirve un framework o CMS particular.
#~/.config/valet/Nginx/
Este directorio contiene todas las configuraciones de sitios Nginx de Valet. Estos archivos se reconstruyen al ejecutar los comandos install y secure.
#~/.config/valet/Sites/
Este directorio contiene todos los enlaces simbólicos para sus proyectos vinculados.
#~/.config/valet/config.json
Este archivo es el archivo maestro de configuración de Valet.
#~/.config/valet/valet.sock
Este archivo es el socket PHP-FPM usado por la instalación Nginx de Valet. Solo existirá si PHP está funcionando correctamente.
#~/.config/valet/Log/fpm-php.www.log
Este archivo es el log de usuario para errores de PHP.
#~/.config/valet/Log/nginx-error.log
Este archivo es el log de usuario para errores de Nginx.
#/usr/local/var/log/php-fpm.log
Este archivo es el log del sistema para errores de PHP-FPM.
#/usr/local/var/log/nginx
Este directorio contiene los logs de acceso y error de Nginx.
#/usr/local/etc/php/X.X/conf.d
Este directorio contiene los archivos *.ini para varias configuraciones de PHP.
#/usr/local/etc/php/X.X/php-fpm.d/valet-fpm.conf
Este archivo es el archivo de configuración del pool PHP-FPM.
#~/.composer/vendor/laravel/valet/cli/stubs/secure.valet.conf
Este archivo es la configuración Nginx por defecto usada para construir certificados SSL para sus sitios.
#Acceso al Disco
Desde macOS 10.14, el acceso a algunos archivos y directorios está restringido por defecto. Estas restricciones incluyen los directorios Desktop, Documents y Downloads. Además, el acceso a volúmenes de red y volúmenes removibles está restringido. Por lo tanto, Valet recomienda que sus carpetas de sitios estén ubicadas fuera de estas ubicaciones protegidas.
Sin embargo, si desea servir sitios desde alguna de esas ubicaciones, deberá conceder a Nginx "Acceso completo al disco". De lo contrario, puede encontrarse con errores de servidor u otros comportamientos impredecibles por parte de Nginx, especialmente al servir recursos estáticos. Normalmente, macOS le pedirá automáticamente que conceda a Nginx acceso completo a estas ubicaciones. O bien, puede hacerlo manualmente a través de System Preferences > Security & Privacy > Privacy y seleccionando Full Disk Access. A continuación, habilite las entradas nginx en el panel principal.