Laravel Valet
Laravel Valet

Laravel Valet



Введение

Valet - это среда разработки Laravel для минималистов Mac. Нет Vagrant, нет файла /etc/hosts. Вы даже можете публиковать свои сайты в общий доступ, используя локальные туннели. Да, нам это тоже нравится.

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

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

Стандартная поддержка Valet включает в себя, но не ограничивается:

Вы всегда можете расширить Valet своими собственными драйверами.

Valet или Homestead

Как вы, возможно, знаете, Laravel предлагает Homestead, еще одну локальную среду разработки Laravel. Homestead и Valet различаются своей целевой аудиторией и подходом к разработке проектов. Homestead предлагает всю виртуальную машину Ubuntu с автоматической настройкой Nginx. Homestead - прекрасный выбор, если вам нужна полностью виртуализированная среда разработки Linux или Windows / Linux.

Valet поддерживает только Mac и требует, чтобы вы установили PHP и сервер базы данных прямо на локальный компьютер. Это легко достигается с помощью Homebrew такими командами, как brew install php и brew install mysql. Valet предоставляет невероятно быструю локальную среду разработки с минимальным потреблением ресурсов, поэтому она отлично подходит для разработчиков, которым требуется только PHP / MySQL и которым не нужна полностью виртуализированная среда разработки.

И Valet, и Homestead - отличный выбор для настройки среды разработки Laravel. Какой из них вы выберете, будет зависеть от вашего личного вкуса и потребностей вашей команды.

Установка

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

  • Установите или обновите Homebrew до последней версии с помощью команды brew update.
  • Установите PHP 7.4 с помощью Homebrew командой brew install php.
  • Установите Composer.
  • Установите Valet с помощью Composer командой composer global require laravel/valet. Убедитесь, что каталог ~/.composer/vendor/bin находится в «PATH» вашей операционной системы.
  • Запустите команду установки valet install. Это настроит и установит Valet и DnsMasq, а также зарегистрирует демон Valet для запуска при запуске вашей операционной системы.

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

Valet автоматически запускает своего демона при каждой загрузке вашей машины. После завершения первоначальной установки Valet больше не нужно запускать командами valet start или valet install.

База данных

Если вам нужна база данных, попробуйте MySQL, запустив brew install mysql@5.7 в командной строке. После установки MySQL вы можете запустить его с помощью команды brew services start mysql@5.7. Затем вы можете подключиться к базе данных по адресу 127.0.0.1, используя имя пользователя root и пустую строку для пароля.

Версии PHP

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

valet use php@7.2
valet use php

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

Перезапуск вашей установки

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

Обновление

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

Сервисные команды

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

Команда park

  • Создайте новый каталог на вашем Mac, запустив что-то вроде mkdir ~/Sites. Затем cd ~/Sites и запускаем valet park. Эта команда зарегистрирует ваш текущий рабочий каталог как путь, по которому Valet будет искать сайты.
  • Затем создайте новый сайт Laravel в этом каталоге: laravel new blog.
  • Откройте в браузере http://blog.test.

Это все, что нужно сделать. Теперь любой проект Laravel, который вы создаете в своем «припаркованном» каталоге, будет автоматически отдаваться с вашего компьютера из указанного каталога http://folder-name.test.

Команда link

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

  • Чтобы использовать команду, перейдите в каталог вашего проекта и запустите приложение valet link app-name в вашем терминале. Valet создаст символическую ссылку в ~/.config/valet/Sites, которая указывает на ваш текущий рабочий каталог.
  • После выполнения команды link вы можете получить доступ к сайту в своем браузере по адресу http://app-name.test.

Чтобы увидеть список всех ваших связанных каталогов, выполните команду valet links. Вы можете использовать valet unlink app-name, чтобы удалить символическую ссылку.

Вы можете использовать служебную ссылку для обслуживания одного и того же проекта с нескольких поддоменов. Чтобы добавить поддомен или другой домен к вашему проекту, запустите valet link subdomain.app-name из папки проекта.

Защита сайтов с помощью TLS

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

valet secure laravel

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

valet unsecure laravel

Публикация сайтов

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

Публикация сайтов через Ngrok

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

Чтобы прекратить совместное использование вашего сайта, нажмите Control + C, чтобы отменить процесс.

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

Публикация сайтов через Expose

Если у вас установлен Expose, вы можете поделиться своим сайтом, перейдя в каталог сайта в вашем терминале и запустив команду expose. Обратитесь к документации expose, чтобы узнать о дополнительных параметрах командной строки, которые она поддерживает. После публикации сайта Expose отобразит URL-адрес, который вы можете использовать на других своих устройствах или среди членов команды.

Чтобы прекратить совместное использование вашего сайта, нажмите Control + C, чтобы отменить процесс.

Публикация сайтов в вашей локальной сети

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

Если вы хотите разрешить другим устройствам в вашей локальной сети доступ к сайтам Valet на вашем компьютере через IP-адрес вашего компьютера (например: 192.168.1.10/app-name.test), вам необходимо вручную отредактировать соответствующий файл конфигурации Nginx для этого сайта, чтобы снять ограничение на директиву прослушивания, удалив префикс 127.0.0.1: в директиве для портов 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

// Определить $_SERVER['key'] как "value" для сайта foo.test ...
return [
    'foo' => [
        'key' => 'value',
    ],
];

// Определить $_SERVER['key'] как "value" для всех сайтов...
return [
    '*' => [
        'key' => 'value',
    ],
];

Прокси-сервисы

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

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

valet proxy elasticsearch http://127.0.0.1:9200

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

valet unproxy elasticsearch

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

valet proxies

Пользовательские драйверы Valet

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

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

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

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

Метод serves

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

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

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

Метод isStaticFile

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

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

    return false;
}

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

Метод frontControllerPath

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

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

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

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

class LocalValetDriver extends LaravelValetDriver
{
    /**
     * Определите, обслуживает ли драйвер запрос.
     *
     * @param  string  $sitePath
     * @param  string  $siteName
     * @param  string  $uri
     * @return bool
     */
    public function serves($sitePath, $siteName, $uri)
    {
        return true;
    }

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

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

Команда Описание
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.
~/.config/valet/Extensions/ Содержит настраиваемые расширения и команды Valet.
~/.config/valet/Nginx/ Содержит все конфигурации сайта Nginx, созданные Valet. Эти файлы перестраиваются при выполнении команд install, secure и tld.
~/.config/valet/Sites/ Содержит все символические ссылки для связанных проектов.
~/.config/valet/config.json Главный конфигурационный файл Valet
~/.config/valet/valet.sock Сокет PHP-FPM, используемый конфигурацией Valet Nginx. Будет существовать только в том случае, если 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 по умолчанию, используемая для создания сертификатов сайта.

Перевод:
https://laravel.com/docs/8.x/valet

Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню