Laravel Valet
- Вступ
- Встановлення
- Обслуговування сайтів
- Спільний доступ до сайтів
- Змінні середовища для конкретного сайту
- Проксіювання сервісів
- Користувацькі драйвери Valet
- Інші команди Valet
- Каталоги та файли Valet
Вступ
Шукаєте ще простіший спосіб розробки Laravel застосунків на macOS або Windows? Ознайомтеся з Laravel Herd. Herd включає все, що вам потрібно для початку розробки з Laravel, включаючи Valet, PHP та компонувальник.
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 команди.
Valet дозволяє переключати версії PHP за допомогою команди valet use php@version. Valet встановить вказану версію PHP через Homebrew, якщо вона ще не встановлена:
valet use example@example.com
valet use php
Ви також можете створити файл .valetrc у кореневій директорії вашого проекту. Файл .valetrc повинен містити версію PHP, яку сайт повинен використовувати:
php=php@8.2
Після створення цього файлу, ви можете просто виконати команду 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, виконавши команду компонувальник 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 example@example.com
Якщо назва вашого сайту не збігається з назвою каталогу, що його містить, ви можете вказати назву сайту за допомогою опції --site:
valet isolate example@example.com --site="site-name"
Для зручності, ви можете використовувати команди valet php, компонувальник та 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 або cloudflared:
valet share-tool ngrok
Якщо ви обираєте інструмент і не маєте його встановленим через Homebrew (для ngrok і cloudflared) або компонувальник (для Expose), Valet автоматично запропонує вам встановити його. Звісно, обидва інструменти вимагають від вас аутентифікації вашого облікового запису ngrok або Expose, перш ніж ви зможете почати ділитися сайтами.
Щоб поділитися сайтом, перейдіть до каталогу сайту у вашому терміналі та виконайте команду Valet share. Публічно доступна URL-адреса буде скопійована у ваш буфер обміну і готова для вставки безпосередньо у ваш браузер або для спільного використання з вашою командою:
cd ~/Sites/laravel
valet share
Щоб припинити спільний доступ до вашого сайту, натисніть Control + C.
Якщо ви використовуєте власний DNS-сервер (наприклад, 1.1.1.1), спільний доступ через ngrok може працювати некоректно. Якщо це так на вашій машині, відкрийте системні налаштування вашого 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:
# Проксі через HTTP... valet proxy elasticsearch http://127.0.0.1:9200 # Проксі через 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, доступ до деяких файлів і каталогів за замовчуванням обмежений. Ці обмеження включають каталоги Desktop, Documents і Downloads. Крім того, доступ до мережевих і знімних томів обмежений. Тому Valet рекомендує розміщувати ваші папки сайту за межами цих захищених місць.
Однак, якщо ви бажаєте обслуговувати сайти з одного з цих місць, вам потрібно надати Nginx "Повний доступ до диска". В іншому випадку ви можете зіткнутися з помилками сервера або іншою непередбачуваною поведінкою Nginx, особливо при обслуговуванні статичних ресурсів. Зазвичай, macOS автоматично запропонує вам надати Nginx повний доступ до цих місць. Або ви можете зробити це вручну через Системні налаштування > Безпека та конфіденційність > Конфіденційність і вибравши Повний доступ до диска. Далі, увімкніть будь-які записи nginx у головному вікні.
