Valet

Содержание:


Введение

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

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

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

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

Вы можете расширять Valet с помощью ваших пользовательских драйверов.

Valet или Vagrant

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

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

Valet и Homestead это прекрасный выбор для настройки вашего Ларавел окружения. Какую выбрать зависит от вашего вкуса и нужд команды.


Установка

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

  • Установите или обновитеHomebrew до последней версии используя brew update.
  • Установите PHP 7.3 используя через brew install php.
  • Установите Composer.
  • Установите Valet с помощью Composer через composer global require laravel/valet. Убедитесь, что папка ~/.composer/vendor/bin прописана в системной "PATH".
  • Выполните команду valet install. Это настроит и установит Valet и DnsMasq, и зарегистрирует демон Valet запускаться при старте системы to launch when your system starts.

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

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

Использовать другой домен

По умолчанию, Valet обслуживает проекты зоны .test. Если вы хотите изменить доменную зону, вы можете это сделать используя команду valet tld tld-name.

Например, вы хотите использовать .app вместо .test, запустите valet tld app и Valet начнёт автоматически обслуживать проекты с окончанием на *.app.

База данных

Если вам нужна база данные, попробуйте 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 используя команду composer global update в вашем терминале. После обновления, лучше всего запустить команду valet install, чтобы Valet мог сделать дополнительные обновления в ваших файлах конфигурации, если это необходимо.

Обновить Valet до версии 2.0

Valet 2.0 перводить основной веб-сервер из Caddy в Nginx. Перед обновлением до этой версии вы должны запустить следующие команды, чтобы остановить и удалить текущий демон Caddy: Valet 2.0 transitions Valet's underlying web server from Caddy to Nginx. Before upgrading to this version you should run the following commands to stop and uninstall the existing Caddy daemon:

valet stop
valet uninstall

После чего, вы должны обновить до последней версии Valet. В зависимости от того, как вы устанавливали Valet, это можно сделать используя Git или Composer. Если вы устанавливали Valet через Composer, вам необходимо использовать следующие команды, чтобы обновить до последней версии:

composer global require laravel/valet

После загрузки новой версии кода Valet, выполните команду install:

valet install
valet restart

После обновления, может возникнуть необходимость переопределить имена доменов и ссылки.


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

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

Команда "Park"

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

Это всё, что необходимо сделать Теперь, любой проект Ларавел, который вы создали используя "parked" директорию будут автоматически обслуживаться веб-сервером по адресу http://folder-name.test.

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

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

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

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

Защита сайта с помощью протокола TLS

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

valet secure laravel

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

valet unsecure laravel

Совместное использование сайтов

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

Чтобы сделать сайт общедоступным, перейдите в папку сайта в консоли и запустите команду valet share. Публично доступный URL будет скопирован в буфер обмена и будет готов, чтобы вставить в адресную строку в браузере.

Чтобы снова сделать сайт локальными, нажмите Control + C и процесс будет отменён.


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

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

<?php

return [
    'WEBSITE_NAME' => 'My Blog',
];

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

Вы можете написать свой Valet "драйвер", чтобы обслуживать сайты написанные на других фреймворках или CMS, которые не поддерживаются по умолчанию. При установке 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 driver, расположите его в директории ~/.config/valet/Drivers используя переименованный файл FrameworkValetDriver.php. Например, если вы написали драйвер для WordPress, имя файла может быть WordPressValetDriver.php.

Давайте взглянем на реализацию каждого метода вашего Valet драйвера.

Метод serves

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

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

/**
 * Determine if the driver serves the request.
 *
 * @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:

/**
 * Determine if the incoming request is for a static file.
 *
 * @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 может быть запущен, если метод serves вернёт true для входящего запроса и запрос не /.

Метод frontControllerPath

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

/**
 * Get the fully resolved path to the application's front controller.
 *
 * @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
{
    /**
     * Determine if the driver serves the request.
     *
     * @param  string  $sitePath
     * @param  string  $siteName
     * @param  string  $uri
     * @return bool
     */
    public function serves($sitePath, $siteName, $uri)
    {
        return true;
    }

    /**
     * Get the fully resolved path to the application's front controller.
     *
     * @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 Выполните эту команду из "parked" папки, чтобы убрать папку из списка паркованных.
valet log Просмотреть список логов, которые написаны сервисами Valet
valet paths Просмотреть все ваши паркованные пути.
valet restart Перезапусить демона Valet.
valet start Запустить демона Valet.
valet stop Остановить демона Valet.
valet trust Добавить файлы для Brew, чтобы разрешить командам Valet запускаться без потверждения пароля.
valet uninstall Удалить демона Valet.