1. Пакеты
  2. Laravel Valet

Присоединяйся к нашему Telegram сообществу @webblend!

Здесь ты найдешь сниппеты по Laravel и полезные советы по веб-разработке.

Введение

Примечание Ищете еще более простой способ разработки приложений Laravel на macOS? Посмотрите Laravel Herd. Herd включает все необходимое для начала разработки Laravel, включая Valet, PHP и Composer.

Laravel Valet - это среда разработки для macOS, созданная для минималистов. Laravel Valet настраивает ваш Mac для постоянного запуска Nginx на фоне при запуске вашей машины. Затем, используя DnsMasq, Valet направляет все запросы по домену *.test на установленные на вашем локальном компьютере сайты.

Другими словами, Valet - это быстрая среда разработки Laravel, которая использует примерно 7 МБ оперативной памяти. Valet не является полной заменой Sail или Homestead, но предоставляет отличную альтернативу, если вам нужны гибкие базовые возможности, предпочитаете экстремальную скорость или работаете на машине с ограниченным объемом оперативной памяти.

Из коробки поддержка Valet включает в себя, но не ограничивается следующими возможностями:

Тем не менее, вы можете расширить функциональность Valet с помощью своих собственных драйверов.

Установка

Внимание Для установки Valet требуется macOS и Homebrew. Перед установкой убедитесь, что никакие другие программы, такие как Apache или Nginx, не привязаны к порту 80 вашей локальной машины.

Для начала убедитесь, что Homebrew обновлен с помощью команды update:

brew update

Затем используйте Homebrew для установки PHP:

brew install php

После установки PHP вы готовы установить менеджер пакетов Composer. Кроме того, убедитесь, что каталог $HOME/.composer/vendor/bin находится в "PATH" вашей системы. После установки Composer вы можете установить Laravel Valet как глобальный пакет Composer:

composer global require laravel/valet

Наконец, выполните команду install Valet. Это настроит и установит Valet и DnsMasq. Кроме того, демоны, от которых зависит Valet, будут настроены на запуск при старте вашей системы:

valet install

После установки Valet попробуйте выполнить пинг любого домена *.test в вашем терминале, используя команду вроде ping foobar.test. Если Valet установлен правильно, вы должны видеть, что этот домен отвечает на 127.0.0.1.

Valet автоматически запустит необходимые службы при каждой загрузке вашей машины.

Версии PHP

Примечание Вместо изменения глобальной версии PHP вы можете указать Valet использовать версии PHP для каждого сайта с помощью команды isolate command.

Valet позволяет вам переключаться между версиями PHP с помощью команды valet use php@version. Valet установит указанную версию PHP с помощью Homebrew, если она еще не установлена:

 
valet use php

Вы также можете создать файл .valetrc в корне вашего проекта. Файл .valetrc должен содержать версию PHP, которую должен использовать сайт:

php=php@8.1

После создания этого файла вы можете просто выполнить команду valet use, и команда определит предпочтительную версию PHP сайта, считывая файл.

Внимание Valet обслуживает только одну версию PHP за раз, даже если у вас установлено несколько версий PHP.

База данных

Если вашему приложению требуется база данных, посмотрите DBngin, предоставляющий бесплатный инструмент управления базой данных, включающий MySQL, PostgreSQL и Redis. После установки DBngin вы можете подключиться к своей базе данных по адресу 127.0.0.1 с использованием имени пользователя root и пустой строки в качестве пароля.

Сброс установки

Если у вас возникли проблемы с запуском вашей установки Valet, выполнение команды composer global require laravel/valet, а затем valet install, сбросит вашу установку и может решить различные проблемы. В редких случаях может потребоваться "жесткий сброс" Valet с помощью выполнения valet uninstall --force, а затем valet install.

Обновление Valet

Вы можете обновить вашу установку Valet, выполнив команду composer global require laravel/valet в вашем терминале. После обновления рекомендуется выполнить команду valet install, чтобы Valet мог внести дополнительные изменения в ваши конфигурационные файлы, если это необходимо.

Обновление до Valet 4

Если вы обновляетесь с Valet 3 на Valet 4, выполните следующие шаги для правильного обновления вашей установки Valet:

  • Если вы добавили файлы .valetphprc для настройки версии PHP для вашего сайта, переименуйте каждый файл .valetphprc в .valetrc. Затем добавьте php= в существующее содержимое файла .valetrc.
  • Обновите все настраиваемые драйверы, чтобы они соответствовали пространству имен, расширению, типам-подсказкам и возвращаемым типам новой системы драйверов. Вы можете посмотреть SampleValetDriver Valet в качестве примера.
  • Если вы используете PHP 7.1 - 7.4 для обслуживания своих сайтов, убедитесь, что вы по-прежнему используете Homebrew для установки версии PHP 8.0 или выше, поскольку Valet будет использовать эту версию, даже если это не ваша основная связанная версия, для выполнения некоторых своих сценариев.

Обслуживание сайтов

После установки Valet вы готовы начать обслуживать ваши приложения Laravel. Valet предоставляет две команды для помощи вам в обслуживании ваших приложений: park и link.

Команда park

Команда park регистрирует каталог на вашем компьютере, который содержит ваши приложения. После того как каталог был "припаркован" Valet, все каталоги внутри этого каталога будут доступны в вашем веб-браузере по адресу http://<directory-name>.test:

cd ~/Sites
 
valet park

Вот и все. Теперь любое приложение, созданное в вашем "припаркованном" каталоге, будет автоматически обслуживаться с использованием соглашения http://<directory-name>.test. Таким образом, если ваш припаркованный каталог содержит каталог с именем "laravel", то приложение внутри этого каталога будет доступно по адресу http://laravel.test. Кроме того, Valet автоматически позволяет вам получить доступ к сайту с использованием поддоменов-маски (http://foo.laravel.test).

Команда link

Команда link также может использоваться для обслуживания ваших приложений Laravel. Эта команда полезна, если вы хотите обслуживать один отдельный сайт в каталоге, а не весь каталог:

cd ~/Sites/laravel
 
valet link

После того как приложение было привязано к Valet с помощью команды link, вы можете получить доступ к приложению, используя его имя каталога. Таким образом, сайт, который был привязан в приведенном выше примере, можно получить по адресу http://laravel.test. Кроме того, Valet автоматически позволяет вам получить доступ к сайту с использованием поддоменов-маски (http://foo.laravel.test).

Если вы хотите обслуживать приложение по другому имени хоста, вы можете передать имя хоста в команду link. Например, вы можете выполнить следующую команду, чтобы сделать приложение доступным по адресу http://application.test:

cd ~/Sites/laravel
 
valet link application

Конечно же, вы также можете обслуживать приложения на поддоменах с использованием команды link:

valet link api.application

Вы можете выполнить команду links, чтобы отобразить список всех ваших привязанных каталогов:

valet links

Команда unlink может быть использована для удаления символической ссылки для сайта:

cd ~/Sites/laravel
 
valet unlink

Защита сайтов с использованием TLS

По умолчанию Valet обслуживает сайты по протоколу HTTP. Однако, если вы хотите обслуживать сайт через зашифрованный TLS с использованием HTTP/2, вы можете использовать команду secure. Например, если ваш сайт обслуживается Valet по домену laravel.test, вы должны выполнить следующую команду для его защиты:

valet secure laravel

Чтобы "разблокировать" сайт и вернуться к обслуживанию его трафика через обычный HTTP, используйте команду unsecure. Как и команда secure, эта команда принимает имя хоста, который вы хотите сделать незащищенным:

valet unsecure laravel

Обслуживание сайта по умолчанию

Иногда вам может потребоваться настроить Valet для обслуживания "стандартного" сайта вместо 404 при посещении неизвестного домена test. Для этого вы можете добавить опцию default в ваш файл конфигурации ~/.config/valet/config.json с указанием пути к сайту, который должен служить вашим стандартным сайтом:

"default": "/Users/Sally/Sites/example-site",

Версии PHP для каждого сайта

По умолчанию Valet использует вашу глобальную установку PHP для обслуживания ваших сайтов. Однако, если вам нужно поддерживать несколько версий PHP для различных сайтов, вы можете использовать команду isolate для указания, какую версию PHP должен использовать конкретный сайт. Команда isolate настраивает Valet на использование указанной версии PHP для сайта, расположенного в текущем рабочем каталоге:

cd ~/Sites/example-site
 
valet isolate [email protected]

Если имя вашего сайта не совпадает с именем каталога, содержащего его, вы можете указать имя сайта, используя опцию --site:

valet isolate [email protected] --site="site-name"

Для удобства вы можете использовать команды valet php, composer и which-php для переадресации вызовов соответствующих PHP CLI или инструмента на основе конфигурированной версии PHP сайта:

valet php
valet composer
valet which-php

Вы можете выполнить команду isolated, чтобы отобразить список всех ваших изолированных сайтов и их версий PHP:

valet isolated

Чтобы вернуть сайт обратно к глобальной установке PHP Valet, вы можете вызвать команду unisolate из корневого каталога сайта:

valet unisolate

Общие сайты

Valet включает команду для обмена вашими локальными сайтами с миром, предоставляя простой способ тестирования вашего сайта на мобильных устройствах или обмена им с членами команды и клиентами.

Из коробки Valet поддерживает обмен вашими сайтами через ngrok или Expose. Перед обменом сайтом вы должны обновить вашу конфигурацию Valet с использованием команды share-tool, указав либо ngrok, либо expose:

valet share-tool ngrok

Если вы выберете инструмент и у вас его нет установлено через Homebrew (для ngrok) или Composer (для Expose), Valet автоматически предложит вам установить его. Конечно же, для обоих инструментов требуется аутентификация в вашей учетной записи ngrok или Expose, прежде чем вы сможете начать обмен сайтами.

Чтобы обменяться сайтом, перейдите в каталог сайта в вашем терминале и выполните команду share от Valet. Общедоступный URL будет помещен в ваш буфер обмена и готов к вставке прямо в вашем браузере или для обмена с вашей командой:

cd ~/Sites/laravel
 
valet share

Для прекращения обмена вашим сайтом вы можете нажать Control + C.

Внимание Если вы используете пользовательский DNS-сервер (например, 1.1.1.1), ngrok sharing может не работать правильно. Если это так на вашей машине, откройте системные настройки Mac, перейдите в настройки сети, откройте дополнительные настройки, затем перейдите на вкладку DNS и добавьте 127.0.0.1 в качестве вашего первого DNS-сервера.

Общие сайты через Ngrok

Обмен вашим сайтом с использованием ngrok требует создания учетной записи ngrok и установки токена аутентификации. После получения токена аутентификации вы можете обновить вашу конфигурацию Valet с использованием этого токена:

valet set-ngrok-token YOUR_TOKEN_HERE

Примечание Вы можете передавать дополнительные параметры ngrok в команду share, такие как valet share --region=eu. Дополнительную информацию можно найти в документации ngrok.

Общие сайты через Expose

Обмен вашим сайтом с использованием Expose требует создания учетной записи Expose и аутентификации в Expose с использованием вашего токена аутентификации.

Вы можете проконсультироваться с документацией Expose для получения информации о дополнительных параметрах командной строки, которые он поддерживает.

Общие сайты в вашей локальной сети

По умолчанию Valet ограничивает входящий трафик до внутреннего интерфейса 127.0.0.1, чтобы ваша рабочая машина не была подвергнута рискам безопасности из Интернета.

Если вы хотите разрешить другим устройствам в вашей локальной сети доступ к сайтам Valet на вашей машине по IP-адресу вашей машины (например, 192.168.1.10/application.test), вам нужно вручную отредактировать соответствующий файл конфигурации Nginx для этого сайта, чтобы удалить ограничение на директиву listen. Вы должны удалить префикс 127.0.0.1: перед директивой listen для портов 80 и 443.

Если вы не выполнили команду valet secure для проекта, вы можете открыть сетевой доступ для всех не-HTTPS сайтов, отредактировав файл /usr/local/etc/nginx/valet/valet.conf. Однако, если вы предоставляете сайт по HTTPS (вы выполнили valet secure для сайта), то вы должны отредактировать файл ~/.config/valet/Nginx/app-name.test.

После обновления конфигурации Nginx выполните команду valet restart, чтобы применить изменения конфигурации.

Переменные окружения для конкретного сайта

Некоторые приложения, использующие другие фреймворки, могут зависеть от переменных среды сервера, но не предоставляют способа для их конфигурации внутри вашего проекта. Valet позволяет настраивать переменные среды для конкретного сайта, добавив файл .valet-env.php в корень вашего проекта. Этот файл должен возвращать массив пар сайт / переменная среды, которые будут добавлены к глобальному массиву $_SERVER для каждого сайта, указанного в массиве:

<?php
 
return [
// Установить $_SERVER['key'] в "value" для сайта laravel.test...
'laravel' => [
'key' => 'value',
],
 
// Установить $_SERVER['key'] в "value" для всех сайтов...
'*' => [
'key' => 'value',
],
];

Проксирование сервисов

Иногда вам может потребоваться проксировать домен Valet на другой сервис на вашей локальной машине. Например, иногда вам может потребоваться запустить Valet, работая также с отдельным сайтом в Docker; однако Valet и Docker не могут оба привязываться к порту 80 одновременно.

Для решения этой проблемы вы можете использовать команду proxy для создания прокси. Например, вы можете проксировать весь трафик с http://elasticsearch.test на http://127.0.0.1:9200:

# Proxy over HTTP...
valet proxy elasticsearch http://127.0.0.1:9200
 
# Proxy over TLS + HTTP/2...
valet proxy elasticsearch http://127.0.0.1:9200 --secure

Вы можете удалить прокси с помощью команды unproxy:

valet unproxy elasticsearch

Вы можете использовать команду proxies для вывода списка всех конфигураций сайтов, которые проксируются:

valet proxies

Собственные драйверы Valet

Вы можете написать свой собственный Valet "драйвер", чтобы обслуживать PHP-приложения, работающие на фреймворке или CMS, который не поддерживается непосредственно Valet. При установке Valet создается каталог ~/.config/valet/Drivers, содержащий файл SampleValetDriver.php. Этот файл содержит образец реализации драйвера, чтобы продемонстрировать, как написать собственный драйвер. Написание драйвера требует реализации трех методов: serves, isStaticFile и frontControllerPath.

Все три метода получают значения $sitePath, $siteName и $uri в качестве аргументов. $sitePath - это полный путь к сайту, обслуживаемому на вашей машине, например /Users/Lisa/Sites/my-project. $siteName - это часть домена "хост" / "название сайта" (my-project). $uri - это URI входящего запроса (/foo/bar).

После завершения написания вашего собственного драйвера Valet поместите его в каталог ~/.config/valet/Drivers, используя соглашение об именовании FrameworkValetDriver.php. Например, если вы пишете собственный драйвер Valet для WordPress, ваше имя файла должно быть WordPressValetDriver.php.

Давайте рассмотрим образец реализации каждого метода, который должен реализовать ваш собственный драйвер Valet.

Метод serves

Метод serves должен возвращать true, если ваш драйвер должен обрабатывать входящий запрос. В противном случае метод должен вернуть false. Таким образом, внутри этого метода вы должны попытаться определить, содержит ли данный $sitePath проект того типа, который вы пытаетесь обслуживать.

Например, представим, что мы пишем WordPressValetDriver. Наш метод serves может выглядеть примерно так:

/**
* Определить, обслуживает ли драйвер запрос.
*/
public function serves(string $sitePath, string $siteName, string $uri): bool
{
return is_dir($sitePath.'/wp-admin');
}

Метод isStaticFile

Метод isStaticFile должен определить, предназначен ли входящий запрос для файла "статического" типа, такого как изображение или таблица стилей. Если файл статический, метод должен вернуть полный путь к статическому файлу на диске. Если входящий запрос не предназначен для статического файла, метод должен вернуть false:

/**
* Определить, предназначен ли входящий запрос для статического файла.
*
* @return string|false
*/
public function isStaticFile(string $sitePath, string $siteName, string $uri)
{
if (file_exists($staticFilePath = $sitePath.'/public/'.$uri)) {
return $staticFilePath;
}
 
return false;
}

Внимание Метод isStaticFile будет вызван только если метод serves вернет true для входящего запроса, и URI запроса не /.

Метод frontControllerPath

Метод frontControllerPath должен возвращать полный путь к "фронт-контроллеру" вашего приложения, который обычно является файлом "index.php" или эквивалентом:

/**
* Получить полностью разрешенный путь к контроллеру сайта.
*/
public function frontControllerPath(string $sitePath, string $siteName, string $uri): string
{
return $sitePath.'/public/index.php';
}

Локальные драйверы

Если вы хотите определить собственный драйвер Valet для одного приложения, создайте файл LocalValetDriver.php в корневом каталоге приложения. Ваш собственный драйвер может расширять базовый класс ValetDriver или расширять существующий драйвер, специфичный для приложения, такой как LaravelValetDriver:

use Valet\Drivers\LaravelValetDriver;
 
class LocalValetDriver extends LaravelValetDriver
{
/**
* Определить, обслуживает ли драйвер запрос.
*/
public function serves(string $sitePath, string $siteName, string $uri): bool
{
return true;
}
 
/**
* Получить полностью разрешенный путь к контроллеру сайта.
*/
public function frontControllerPath(string $sitePath, string $siteName, string $uri): string
{
return $sitePath.'/public_html/index.php';
}
}

Другие команды Valet

Команда Описание
valet list Вывести список всех команд Valet.
valet diagnose Вывести диагностику для помощи в отладке Valet.
valet directory-listing Определить поведение списка каталогов. По умолчанию "off", что вызывает страницу 404 для каталогов.
valet forget Запустите эту команду из "припаркованного" каталога, чтобы удалить его из списка припаркованных каталогов.
valet log Просмотр списка журналов, записанных службами Valet.
valet paths Просмотр всех ваших "припаркованных" путей.
valet restart Перезапустить службы Valet.
valet start Запустить службы Valet.
valet stop Остановить службы Valet.
valet trust Добавить файлы sudoers для Brew и Valet, чтобы разрешить выполнение команд Valet без запроса пароля.
valet uninstall Удалить Valet: показывает инструкции для ручной деинсталляции. Передайте опцию --force, чтобы агрессивно удалить все ресурсы Valet.

Каталоги и файлы Valet

При отладке проблем с вашим окружением Valet вам может быть полезна следующая информация о каталогах и файлах:

~/.config/valet

Содержит всю конфигурацию Valet. Рекомендуется делать резервную копию этого каталога.

~/.config/valet/dnsmasq.d/

В этом каталоге находится конфигурация DNSMasq.

~/.config/valet/Drivers/

В этом каталоге находятся драйверы Valet. Драйверы определяют, как конкретный фреймворк / CMS обслуживается.

~/.config/valet/Nginx/

В этом каталоге находятся все конфигурации сайтов Nginx Valet. Эти файлы пересоздаются при выполнении команд install и secure.

~/.config/valet/Sites/

В этом каталоге находятся все символические ссылки для ваших связанных проектов.

~/.config/valet/config.json

Этот файл - мастер-файл конфигурации Valet.

~/.config/valet/valet.sock

Этот файл - сокет PHP-FPM, используемый установкой Nginx Valet. Он существует только в том случае, если PHP работает правильно.

~/.config/valet/Log/fpm-php.www.log

Этот файл - пользовательский журнал ошибок PHP.

~/.config/valet/Log/nginx-error.log

Этот файл - пользовательский журнал ошибок Nginx.

/usr/local/var/log/php-fpm.log

Этот файл - системный журнал ошибок PHP-FPM.

/usr/local/var/log/nginx

В этом каталоге находятся журналы доступа и ошибок Nginx.

/usr/local/etc/php/X.X/conf.d

В этом каталоге находятся файлы *.ini для различных настроек конфигурации PHP.

/usr/local/etc/php/X.X/php-fpm.d/valet-fpm.conf

Этот файл - файл конфигурации пула PHP-FPM.

~/.composer/vendor/laravel/valet/cli/stubs/secure.valet.conf

Этот файл - конфигурация Nginx по умолчанию, используемая для создания SSL-сертификатов для ваших сайтов.

Доступ к диску

С macOS 10.14 доступ к некоторым файлам и каталогам по умолчанию ограничен. Сюда входят каталоги Рабочего стола, Документов и Загрузок. Кроме того, ограничен доступ к сетевым томам и сменным томам. Поэтому рекомендуется размещать папки сайтов вне этих защищенных мест.

Однако, если вы хотите обслуживать сайты из одного из этих мест, вам нужно предоставить Nginx "Полный доступ к диску". В противном случае вы можете столкнуться с ошибками сервера или другим непредсказуемым поведением от Nginx, особенно при обслуживании статических ресурсов. Обычно macOS автоматически предложит вам предоставить Nginx полный доступ к этим местам. Или вы можете сделать это вручную через Настройки системы > Безопасность и конфиденциальность > Конфиденциальность и выбор Полный доступ к диску. Затем разрешите любые записи nginx в главном окне.