Laravel Homestead

Вступ

Laravel Homestead є застарілим пакетом, який більше не підтримується активно. Laravel Sail може бути використаний як сучасна альтернатива.

Laravel прагне зробити весь досвід розробки на PHP приємним, включаючи ваше локальне середовище розробки. Laravel Homestead — це офіційний, попередньо упакований Vagrant box, який надає вам чудове середовище розробки без необхідності встановлювати PHP, веб-сервер або будь-яке інше серверне програмне забезпечення на вашій локальній машині.

Vagrant надає простий та елегантний спосіб керування та налаштування віртуальних машин. Vagrant бокси є повністю одноразовими. Якщо щось піде не так, ви можете знищити та відновити бокс за лічені хвилини!

Homestead працює на будь-якій системі Windows, macOS або Linux і включає Nginx, PHP, MySQL, PostgreSQL, Redis, Memcached, Node та все інше програмне забезпечення, необхідне для розробки чудових Laravel застосунків.

Якщо ви використовуєте Windows, можливо, вам потрібно увімкнути апаратну віртуалізацію (VT-x). Зазвичай її можна увімкнути через BIOS. Якщо ви використовуєте Hyper-V на системі з UEFI, можливо, вам додатково потрібно буде вимкнути Hyper-V, щоб отримати доступ до VT-x.

Включене програмне забезпечення

  • Ubuntu 22.04
  • Git
  • PHP 8.3
  • PHP 8.2
  • PHP 8.1
  • PHP 8.0
  • PHP 7.4
  • PHP 7.3
  • PHP 7.2
  • PHP 7.1
  • PHP 7.0
  • PHP 5.6
  • Nginx
  • MySQL 8.0
  • lmm
  • Sqlite3
  • PostgreSQL 15
  • Composer
  • Docker
  • Node (With Yarn, Bower, Grunt, and Gulp)
  • Redis
  • Memcached
  • Beanstalkd
  • Mailpit
  • avahi
  • ngrok
  • Xdebug
  • XHProf / Tideways / XHGui
  • wp-cli

Додаткове програмне забезпечення

  • Apache
  • Blackfire
  • Cassandra
  • Chronograf
  • CouchDB
  • Crystal & Lucky Framework
  • Elasticsearch
  • EventStoreDB
  • Flyway
  • Gearman
  • Go
  • Grafana
  • InfluxDB
  • Logstash
  • MariaDB
  • Meilisearch
  • MinIO
  • MongoDB
  • Neo4j
  • Oh My Zsh
  • Open Resty
  • PM2
  • Python
  • R
  • RabbitMQ
  • Rust
  • RVM (Ruby Version Manager)
  • Solr
  • TimescaleDB
  • Trader (PHP extension)
  • Webdriver & Laravel Dusk Utilities

Встановлення та налаштування

Перші кроки

Перш ніж запустити ваше середовище Homestead, ви повинні встановити Vagrant, а також одного з наступних підтримуваних провайдерів:

Усі ці програмні пакети надають зручні візуальні інсталятори для всіх популярних операційних систем.

Щоб використовувати провайдер Parallels, вам потрібно встановити плагін Parallels Vagrant. Він є безкоштовним.

Встановлення Homestead

Ви можете встановити Homestead, клонуючи репозиторій Homestead на вашу хост-машину. Розгляньте можливість клонування репозиторію в папку Homestead у вашому каталозі "home", оскільки віртуальна машина Homestead буде слугувати хостом для всіх ваших Laravel застосунків. Протягом цієї документації ми будемо називати цей каталог вашим "каталогом Homestead":

git clone https://github.com/laravel/homestead.git ~/Homestead

Після клонування репозиторію Laravel Homestead, ви повинні переключитися на гілку release. Ця гілка завжди містить останній стабільний реліз Homestead:

cd ~/Homestead
 
git checkout release

Далі виконайте команду bash init.sh з директорії Homestead, щоб створити файл конфігурації Homestead.yaml. Файл Homestead.yaml - це місце, де ви будете налаштовувати всі параметри для вашої установки Homestead. Цей файл буде розміщено в директорії Homestead:

# macOS / Linux...
bash init.sh
 
# Windows...
init.bat

Налаштування Homestead

Налаштування Вашого Провайдера

Ключ provider у вашому файлі Homestead.yaml вказує, який провайдер Vagrant слід використовувати: virtualbox або parallels:

provider: virtualbox

Якщо ви використовуєте Apple Silicon, потрібен провайдер Parallels.

Налаштування Спільних Папок

Властивість folders файлу Homestead.yaml містить список усіх папок, які ви бажаєте спільно використовувати з вашим середовищем Homestead. Коли файли в цих папках змінюються, вони будуть синхронізовані між вашим локальним комп'ютером та віртуальним середовищем Homestead. Ви можете налаштувати стільки спільних папок, скільки необхідно:

folders:
    - map: ~/code/project1
      to: /home/vagrant/project1

Користувачам Windows не слід використовувати синтаксис шляху ~/, натомість слід використовувати повний шлях до свого проекту, наприклад, C:\Users\user\Code\project1.

Ви завжди повинні призначати окремі застосунки до їх власного відображення папок замість відображення одного великого каталогу, що містить всі ваші застосунки. Коли ви відображаєте папку, віртуальна машина повинна відстежувати всі операції вводу-виводу диска для кожного файлу в папці. Ви можете відчути зниження продуктивності, якщо у вас велика кількість файлів у папці:

folders:
    - map: ~/code/project1
      to: /home/vagrant/project1
    - map: ~/code/project2
      to: /home/vagrant/project2

Ви ніколи не повинні монтувати . (поточний каталог) при використанні Homestead. Це призводить до того, що Vagrant не відображає поточну папку на /vagrant, що порушить роботу необов'язкових функцій і викличе несподівані результати під час налаштування.

Щоб увімкнути NFS, ви можете додати опцію type до вашого відображення папок:

folders:
    - map: ~/code/project1
      to: /home/vagrant/project1
      type: "nfs"

Коли використовуєте NFS на Windows, вам слід розглянути можливість встановлення vagrant-winnfsd плагіна. Цей плагін буде підтримувати правильні дозволи користувача / групи для файлів і директорій у віртуальній машині Homestead.

Ви також можете передати будь-які параметри, які підтримуються Синхронізованими папками Vagrant, перерахувавши їх під ключем options:

folders:
    - map: ~/code/project1
      to: /home/vagrant/project1
      type: "rsync"
      options:
          rsync__args: ["--verbose", "--archive", "--delete", "-zz"]
          rsync__exclude: ["node_modules"]

Налаштування сайтів Nginx

Не знайомі з Nginx? Немає проблем. Властивість sites у вашому файлі Homestead.yaml дозволяє легко зіставити "домен" з папкою у вашому середовищі Homestead. Приклад конфігурації сайту включено у файл Homestead.yaml. Знову ж таки, ви можете додати стільки сайтів до вашого середовища Homestead, скільки потрібно. Homestead може слугувати зручним, віртуалізованим середовищем для кожного Laravel застосунку, над яким ви працюєте:

sites:
    - map: homestead.test
      to: /home/vagrant/project1/public

Якщо ви зміните властивість sites після налаштування віртуальної машини Homestead, вам слід виконати команду vagrant reload --provision у вашому терміналі, щоб оновити конфігурацію Nginx на віртуальній машині.

Скрипти Homestead створені для того, щоб бути максимально ідемпотентними. Однак, якщо у вас виникають проблеми під час налаштування, ви повинні знищити та відновити машину, виконавши команду vagrant destroy && vagrant up.

Визначення Імені Хоста

Homestead публікує імена хостів за допомогою mDNS для автоматичного вирішення хостів. Якщо ви встановите hostname: homestead у вашому файлі Homestead.yaml, хост буде доступний за адресою homestead.local. macOS, iOS та дистрибутиви Linux для настільних комп'ютерів включають підтримку mDNS за замовчуванням. Якщо ви використовуєте Windows, вам потрібно встановити Bonjour Print Services for Windows.

Використання автоматичних імен хостів найкраще підходить для встановлень на проект Homestead. Якщо ви розміщуєте кілька сайтів на одному екземплярі Homestead, ви можете додати "доменні імена" ваших веб-сайтів до файлу hosts на вашій машині. Файл hosts буде перенаправляти запити для ваших сайтів Homestead у вашу віртуальну машину Homestead. На macOS та Linux цей файл знаходиться за адресою /etc/hosts. На Windows він знаходиться за адресою C:\Windows\System32\drivers\etc\hosts. Рядки, які ви додаєте до цього файлу, виглядатимуть наступним чином:

192.168.56.56  homestead.test

Переконайтеся, що IP-адреса, вказана у вашому файлі Homestead.yaml, є правильною. Після того, як ви додали домен до вашого файлу hosts і запустили Vagrant box, ви зможете отримати доступ до сайту через ваш веб-браузер:

http://homestead.test

Налаштування Сервісів

Homestead за замовчуванням запускає кілька сервісів; однак, ви можете налаштувати, які сервіси будуть увімкнені або вимкнені під час налаштування. Наприклад, ви можете увімкнути PostgreSQL і вимкнути MySQL, змінивши опцію services у вашому файлі Homestead.yaml:

services:
    - enabled:
        - "postgresql"
    - disabled:
        - "mysql"

Вказані служби будуть запущені або зупинені на основі їх порядку в директивах enabled та disabled.

Запуск Vagrant Box

Після того як ви відредагували Homestead.yaml на свій смак, виконайте команду vagrant up з вашого каталогу Homestead. Vagrant завантажить віртуальну машину та автоматично налаштує ваші спільні папки та сайти Nginx.

Щоб знищити машину, ви можете використовувати команду vagrant destroy.

Встановлення для кожного проекту окремо

Замість встановлення Homestead глобально та спільного використання однієї віртуальної машини Homestead для всіх ваших проектів, ви можете налаштувати окремий екземпляр Homestead для кожного проекту, яким ви керуєте. Встановлення Homestead для кожного проекту може бути корисним, якщо ви бажаєте додати Vagrantfile до вашого проекту, що дозволить іншим, хто працює над проектом, виконати vagrant up відразу після клонування репозиторію проекту.

Ви можете встановити Homestead у ваш проект, використовуючи менеджер пакетів компонувальник:

composer require laravel/homestead --dev

Після встановлення Homestead виконайте команду make Homestead, щоб згенерувати файли Vagrantfile та Homestead.yaml для вашого проекту. Ці файли будуть розміщені в корені вашого проекту. Команда make автоматично налаштує директиви sites та folders у файлі Homestead.yaml:

# macOS / Linux...
php vendor/bin/homestead make
 
# Windows...
vendor\\bin\\homestead make

Далі, виконайте команду vagrant up у вашому терміналі та отримайте доступ до вашого проекту за адресою http://homestead.test у вашому браузері. Пам'ятайте, що вам все ще потрібно додати запис у файл /etc/hosts для homestead.test або домену на ваш вибір, якщо ви не використовуєте автоматичне визначення імені хоста.

Встановлення Додаткових Функцій

Додаткове програмне забезпечення встановлюється за допомогою опції features у вашому файлі Homestead.yaml. Більшість функцій можна увімкнути або вимкнути за допомогою булевого значення, тоді як деякі функції дозволяють кілька варіантів конфігурації:

features:
    - blackfire:
        server_id: "server_id"
        server_token: "server_value"
        client_id: "client_id"
        client_token: "client_value"
    - cassandra: true
    - chronograf: true
    - couchdb: true
    - crystal: true
    - dragonflydb: true
    - elasticsearch:
        version: 7.9.0
    - eventstore: true
        version: 21.2.0
    - flyway: true
    - gearman: true
    - golang: true
    - grafana: true
    - influxdb: true
    - logstash: true
    - mariadb: true
    - meilisearch: true
    - minio: true
    - mongodb: true
    - neo4j: true
    - ohmyzsh: true
    - openresty: true
    - pm2: true
    - python: true
    - r-base: true
    - rabbitmq: true
    - rustc: true
    - rvm: true
    - solr: true
    - timescaledb: true
    - trader: true
    - webdriver: true

Elasticsearch

Ви можете вказати підтримувану версію Elasticsearch, яка повинна бути точною версією (major.minor.patch). За замовчуванням установка створить кластер з назвою 'homestead'. Ви ніколи не повинні надавати Elasticsearch більше половини пам'яті операційної системи, тому переконайтеся, що ваша віртуальна машина Homestead має принаймні вдвічі більше виділення для Elasticsearch.

Перегляньте документацію Elasticsearch, щоб дізнатися, як налаштувати вашу конфігурацію.

MariaDB

Увімкнення MariaDB видалить MySQL та встановить MariaDB. MariaDB зазвичай слугує як заміна MySQL, тому ви все ще повинні використовувати драйвер бази даних mysql у конфігурації бази даних вашого застосунку.

MongoDB

Типова установка MongoDB встановить ім'я користувача бази даних на homestead і відповідний пароль на secret.

Neo4j

Типова установка Neo4j встановить ім'я користувача бази даних на homestead і відповідний пароль на secret. Щоб отримати доступ до браузера Neo4j, відвідайте http://homestead.test:7474 через ваш веб-браузер. Порти 7687 (Bolt), 7474 (HTTP) і 7473 (HTTPS) готові обробляти запити від клієнта Neo4j.

Аліаси

Ви можете додати Bash-аліаси до вашої віртуальної машини Homestead, змінивши файл aliases у вашій директорії Homestead:

alias c='clear'
alias ..='cd ..'

Після того як ви оновили файл aliases, вам слід перепровізувати віртуальну машину Homestead за допомогою команди vagrant reload --provision. Це забезпечить доступність ваших нових псевдонімів на машині.

Оновлення Homestead

Перш ніж почати оновлення Homestead, ви повинні переконатися, що видалили вашу поточну віртуальну машину, виконавши наступну команду в вашій директорії Homestead:

vagrant destroy

Далі, вам потрібно оновити вихідний код Homestead. Якщо ви клонували репозиторій, ви можете виконати наступні команди в місці, де ви спочатку клонували репозиторій:

git fetch
 
git pull origin release

Ці команди завантажують останній код Homestead з репозиторію GitHub, отримують останні теги, а потім переходять на останній позначений реліз. Ви можете знайти останню стабільну версію релізу на сторінці релізів Homestead на GitHub.

Якщо ви встановили Homestead через файл composer.json вашого проекту, ви повинні переконатися, що ваш файл composer.json містить "laravel/homestead": "^12" і оновити ваші залежності:

composer update

Далі, вам слід оновити Vagrant box за допомогою команди vagrant box update:

vagrant box update

Після оновлення Vagrant box, ви повинні виконати команду bash init.sh з директорії Homestead, щоб оновити додаткові конфігураційні файли Homestead. Вас запитають, чи бажаєте ви перезаписати ваші існуючі файли Homestead.yaml, after.sh та aliases:

# macOS / Linux...
bash init.sh
 
# Windows...
init.bat

Нарешті, вам потрібно буде перегенерувати вашу віртуальну машину Homestead, щоб використовувати останню версію Vagrant:

vagrant up

Щоденне використання

Підключення через SSH

Ви можете підключитися до вашої віртуальної машини через SSH, виконавши команду терміналу vagrant ssh з вашого каталогу Homestead.

Додавання додаткових сайтів

Після того як ваше середовище Homestead налаштоване та запущене, ви можете захотіти додати додаткові сайти Nginx для ваших інших проектів Laravel. Ви можете запускати стільки проектів Laravel, скільки забажаєте, на одному середовищі Homestead. Щоб додати додатковий сайт, додайте сайт до вашого файлу Homestead.yaml.

sites:
    - map: homestead.test
      to: /home/vagrant/project1/public
    - map: another.test
      to: /home/vagrant/project2/public

Ви повинні переконатися, що налаштували відображення папок для каталогу проекту перед додаванням сайту.

Якщо Vagrant не керує автоматично вашим файлом "hosts", можливо, вам потрібно додати новий сайт до цього файлу. На macOS та Linux цей файл знаходиться за адресою /etc/hosts. На Windows він знаходиться за адресою C:\Windows\System32\drivers\etc\hosts:

192.168.56.56  homestead.test
192.168.56.56  another.test

Після додавання сайту виконайте команду терміналу vagrant reload --provision з вашого каталогу Homestead.

Типи сайтів

Homestead підтримує декілька "типів" сайтів, які дозволяють легко запускати проекти, що не базуються на Laravel. Наприклад, ми можемо легко додати Statamic застосунок до Homestead, використовуючи тип сайту statamic:

sites:
    - map: statamic.test
      to: /home/vagrant/my-symfony-project/web
      type: "statamic"

Доступні типи сайтів: apache, apache-proxy, apigility, expressive, laravel (за замовчуванням), proxy (для nginx), silverstripe, statamic, symfony2, symfony4 та zf.

Параметри сайту

Ви можете додати додаткові значення Nginx fastcgi_param до вашого сайту через директиву сайту params:

sites:
    - map: homestead.test
      to: /home/vagrant/project1/public
      params:
          - key: FOO
            value: BAR

Змінні середовища

Ви можете визначити глобальні змінні середовища, додавши їх до вашого файлу Homestead.yaml:

variables:
    - key: APP_ENV
      value: local
    - key: FOO
      value: bar

Після оновлення файлу Homestead.yaml обов'язково перепровізуйте машину, виконавши команду vagrant reload --provision. Це оновить конфігурацію PHP-FPM для всіх встановлених версій PHP, а також оновить середовище для користувача vagrant.

Порти

За замовчуванням наступні порти пересилаються до вашого середовища Homestead:

  • HTTP: 8000 → Перенаправляє на 80
  • HTTPS: 44300 → Перенаправляє на 443

Пересилання додаткових портів

Якщо ви бажаєте, ви можете переспрямувати додаткові порти на Vagrant box, визначивши запис конфігурації ports у вашому файлі Homestead.yaml. Після оновлення файлу Homestead.yaml, обов'язково перепровізуйте машину, виконавши команду vagrant reload --provision:

ports:
    - send: 50000
      to: 5000
    - send: 7777
      to: 777
      protocol: udp

Нижче наведено список додаткових портів сервісів Homestead, які ви можете захотіти відобразити з вашої хост-машини на вашу Vagrant box:

  • SSH: 2222 → To 22
  • ngrok UI: 4040 → To 4040
  • MySQL: 33060 → To 3306
  • PostgreSQL: 54320 → To 5432
  • MongoDB: 27017 → To 27017
  • Mailpit: 8025 → To 8025
  • Minio: 9600 → To 9600

Версії PHP

Homestead підтримує запуск декількох версій PHP на одній віртуальній машині. Ви можете вказати, яку версію PHP використовувати для даного сайту у вашому файлі Homestead.yaml. Доступні версії PHP: "5.6", "7.0", "7.1", "7.2", "7.3", "7.4", "8.0", "8.1", "8.2" та "8.3" (за замовчуванням):

sites:
    - map: homestead.test
      to: /home/vagrant/project1/public
      php: "7.1"

У вашій віртуальній машині Homestead ви можете використовувати будь-яку з підтримуваних версій PHP через CLI:

php5.6 artisan list
php7.0 artisan list
php7.1 artisan list
php7.2 artisan list
php7.3 artisan list
php7.4 artisan list
php8.0 artisan list
php8.1 artisan list
php8.2 artisan list
php8.3 artisan list

Ви можете змінити версію PHP за замовчуванням, яку використовує CLI, виконавши наступні команди у вашій віртуальній машині Homestead:

php56
php70
php71
php72
php73
php74
php80
php81
php82
php83

Підключення до баз даних

База даних homestead налаштована для MySQL та PostgreSQL з коробки. Щоб підключитися до вашої бази даних MySQL або PostgreSQL з клієнта бази даних вашої хост-машини, ви повинні підключитися до 127.0.0.1 на порту 33060 (MySQL) або 54320 (PostgreSQL). Ім'я користувача та пароль для обох баз даних: homestead / secret.

Ви повинні використовувати ці нестандартні порти лише при підключенні до баз даних з вашої хост-машини. Ви будете використовувати стандартні порти 3306 і 5432 у файлі конфігурації database вашого Laravel-застосунку, оскільки Laravel працює всередині віртуальної машини.

Резервні копії бази даних

Homestead може автоматично створювати резервну копію вашої бази даних, коли ваша віртуальна машина Homestead знищується. Щоб скористатися цією функцією, ви повинні використовувати Vagrant версії 2.1.0 або новішої. Або, якщо ви використовуєте старішу версію Vagrant, ви повинні встановити плагін vagrant-triggers. Щоб увімкнути автоматичне резервне копіювання бази даних, додайте наступний рядок до вашого файлу Homestead.yaml:

backup: true

Після налаштування Homestead експортуватиме ваші бази даних до директорій .backup/mysql_backup та .backup/postgres_backup при виконанні команди vagrant destroy. Ці директорії можна знайти в папці, де ви встановили Homestead, або в корені вашого проекту, якщо ви використовуєте метод встановлення для кожного проекту.

Налаштування Розкладів Cron

Laravel надає зручний спосіб планування cron-завдань шляхом планування єдиної команди Artisan schedule:run для виконання щохвилини. Команда schedule:run перевірить розклад завдань, визначений у вашому файлі routes/console.php, щоб визначити, які заплановані завдання виконувати.

Якщо ви хочете, щоб команда schedule:run виконувалася для сайту Homestead, ви можете встановити опцію schedule в true при визначенні сайту:

sites:
    - map: homestead.test
      to: /home/vagrant/project1/public
      schedule: true

Завдання cron для сайту буде визначено в каталозі /etc/cron.d віртуальної машини Homestead.

Налаштування Mailpit

Mailpit дозволяє перехоплювати вихідну електронну пошту та перевіряти її без фактичного відправлення листа одержувачам. Щоб почати, оновіть файл .env вашого застосунку, щоб використовувати наступні налаштування пошти:

MAIL_MAILER=smtp
MAIL_HOST=localhost
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

Після налаштування Mailpit ви можете отримати доступ до панелі керування Mailpit за адресою http://localhost:8025.

Налаштування Minio

Minio - це сервер об'єктного зберігання з відкритим кодом з API, сумісним з Amazon S3. Щоб встановити Minio, оновіть ваш файл Homestead.yaml з наступною опцією конфігурації в розділі features:

minio: true

За замовчуванням Minio доступний на порту 9600. Ви можете отримати доступ до панелі керування Minio, відвідавши http://localhost:9600. Стандартний ключ доступу - homestead, а стандартний секретний ключ - secretkey. При доступі до Minio завжди слід використовувати регіон us-east-1.

Щоб використовувати Minio, переконайтеся, що ваш файл .env має наступні параметри:

AWS_USE_PATH_STYLE_ENDPOINT=true
AWS_ENDPOINT=http://localhost:9600
AWS_ACCESS_KEY_ID=homestead
AWS_SECRET_ACCESS_KEY=secretkey
AWS_DEFAULT_REGION=us-east-1

Щоб налаштувати "S3" бакети на базі Minio, додайте директиву buckets до вашого файлу Homestead.yaml. Після визначення ваших бакетів, вам слід виконати команду vagrant reload --provision у вашому терміналі:

buckets:
    - name: your-bucket
      policy: public
    - name: your-private-bucket
      policy: none

Підтримувані значення policy включають: none, download, upload та public.

Laravel Dusk

Щоб запускати тести Laravel Dusk у Homestead, вам слід увімкнути функцію webdriver у вашій конфігурації Homestead:

features:
    - webdriver: true

Після увімкнення функції webdriver вам слід виконати команду vagrant reload --provision у вашому терміналі.

Спільне Використання Вашого Середовища

Іноді ви можете захотіти поділитися тим, над чим ви зараз працюєте, з колегами або клієнтом. Vagrant має вбудовану підтримку для цього через команду vagrant share; однак це не працюватиме, якщо у вас налаштовано кілька сайтів у вашому файлі Homestead.yaml.

Щоб вирішити цю проблему, Homestead включає власну команду share. Щоб почати, підключіться до вашої віртуальної машини Homestead через SSH за допомогою vagrant ssh і виконайте команду share homestead.test. Ця команда поділиться сайтом homestead.test з вашого конфігураційного файлу Homestead.yaml. Ви можете замінити будь-який з ваших інших налаштованих сайтів на homestead.test:

share homestead.test

Після виконання команди ви побачите екран Ngrok, який містить журнал активності та загальнодоступні URL-адреси для спільного сайту. Якщо ви хочете вказати власний регіон, піддомен або інші параметри виконання Ngrok, ви можете додати їх до вашої команди share:

share homestead.test -region=eu -subdomain=laravel

Якщо вам потрібно ділитися контентом через HTTPS замість HTTP, використання команди sshare замість share дозволить вам це зробити.

Пам'ятайте, Vagrant є за своєю природою небезпечним, і ви піддаєте вашу віртуальну машину впливу Інтернету, коли виконуєте команду share.

Налагодження та Профілювання

Налагодження веб-запитів за допомогою Xdebug

Homestead включає підтримку покрокового налагодження за допомогою Xdebug. Наприклад, ви можете отримати доступ до сторінки у вашому браузері, і PHP підключиться до вашого IDE, щоб дозволити інспекцію та модифікацію виконуваного коду.

За замовчуванням Xdebug вже запущений і готовий приймати з'єднання. Якщо вам потрібно увімкнути Xdebug у CLI, виконайте команду sudo phpenmod xdebug у вашій віртуальній машині Homestead. Далі дотримуйтесь інструкцій вашого IDE для увімкнення налагодження. Нарешті, налаштуйте ваш браузер для запуску Xdebug за допомогою розширення або закладки.

Xdebug змушує PHP працювати значно повільніше. Щоб вимкнути Xdebug, виконайте sudo phpdismod xdebug у вашій віртуальній машині Homestead і перезапустіть службу FPM.

Автоматичний запуск Xdebug

Коли ви налагоджуєте функціональні тести, які роблять запити до веб-сервера, легше автоматично запускати налагодження, ніж змінювати тести, щоб передавати спеціальний заголовок або cookie для запуску налагодження. Щоб примусити Xdebug автоматично запускатися, змініть файл /etc/php/7.x/fpm/conf.d/20-xdebug.ini у вашій віртуальній машині Homestead і додайте наступну конфігурацію:

; If Homestead.yaml contains a different subnet for the IP address, this address may be different...
xdebug.client_host = 192.168.10.1
xdebug.mode = debug
xdebug.start_with_request = yes

Налагодження CLI застосунків

Щоб налагодити PHP CLI застосунок, використовуйте shell-аліас xphp всередині вашої віртуальної машини Homestead:

xphp /path/to/script

Профілювання застосунків за допомогою Blackfire

Blackfire — це сервіс для профілювання веб-запитів та CLI застосунків. Він пропонує інтерактивний інтерфейс користувача, який відображає дані профілю у вигляді графіків викликів та часових шкал. Він створений для використання в розробці, тестуванні та продуктивному середовищі без навантаження на кінцевих користувачів. Крім того, Blackfire надає перевірки продуктивності, якості та безпеки коду і налаштувань конфігурації php.ini.

Blackfire Player — це застосунок з відкритим кодом для веб-сканування, веб-тестування та веб-скрапінгу, який може працювати разом з Blackfire для сценаріїв профілювання скриптів.

Щоб увімкнути Blackfire, використовуйте налаштування "features" у вашому файлі конфігурації Homestead:

features:
    - blackfire:
        server_id: "server_id"
        server_token: "server_value"
        client_id: "client_id"
        client_token: "client_value"

Облікові дані сервера Blackfire та облікові дані клієнта вимагають обліковий запис Blackfire. Blackfire пропонує різні варіанти для профілювання застосунку, включаючи інструмент CLI та розширення для браузера. Будь ласка, перегляньте документацію Blackfire для отримання додаткової інформації.

Мережеві інтерфейси

Властивість networks файлу Homestead.yaml налаштовує мережеві інтерфейси для вашої віртуальної машини Homestead. Ви можете налаштувати стільки інтерфейсів, скільки необхідно:

networks:
    - type: "private_network"
      ip: "192.168.10.20"

Щоб увімкнути мостовий інтерфейс, налаштуйте параметр bridge для мережі та змініть тип мережі на public_network:

networks:
    - type: "public_network"
      ip: "192.168.10.20"
      bridge: "en1: Wi-Fi (AirPort)"

Щоб увімкнути DHCP, просто видаліть опцію ip з вашої конфігурації:

networks:
    - type: "public_network"
      bridge: "en1: Wi-Fi (AirPort)"

Щоб оновити, який пристрій використовує мережа, ви можете додати опцію dev до конфігурації мережі. Значення за замовчуванням для dev - це eth0:

networks:
    - type: "public_network"
      ip: "192.168.10.20"
      bridge: "en1: Wi-Fi (AirPort)"
      dev: "enp2s0"

Розширення Homestead

Ви можете розширити Homestead, використовуючи скрипт after.sh у кореневій директорії вашого Homestead. У цьому файлі ви можете додати будь-які shell-команди, які необхідні для належної конфігурації та налаштування вашої віртуальної машини.

Коли ви налаштовуєте Homestead, Ubuntu може запитати вас, чи хочете ви зберегти оригінальну конфігурацію пакета або перезаписати її новим конфігураційним файлом. Щоб уникнути цього, ви повинні використовувати наступну команду при встановленні пакетів, щоб уникнути перезапису будь-якої конфігурації, раніше написаної Homestead:

sudo apt-get -y \
    -o Dpkg::Options::="--force-confdef" \
    -o Dpkg::Options::="--force-confold" \
    install package-name

Налаштування користувача

Коли ви використовуєте Homestead з вашою командою, можливо, ви захочете налаштувати Homestead, щоб краще відповідати вашому особистому стилю розробки. Для цього ви можете створити файл user-customizations.sh у кореневій директорії вашого Homestead (у тій самій директорії, що містить ваш файл Homestead.yaml). У цьому файлі ви можете зробити будь-які налаштування, які забажаєте; однак, файл user-customizations.sh не повинен бути під контролем версій.

Налаштування конкретного провайдера

VirtualBox

natdnshostresolver

За замовчуванням, Homestead налаштовує параметр natdnshostresolver на on. Це дозволяє Homestead використовувати налаштування DNS вашої хост-операційної системи. Якщо ви хочете змінити цю поведінку, додайте наступні параметри конфігурації до вашого файлу Homestead.yaml:

provider: virtualbox
natdnshostresolver: 'off'