Введение
Laravel стремится преобразить процесс разработки на PHP, это относится и к локальной среде разработки. Vagrant обеспечивает простой, элегантный способ настройки и управления виртуальными машинами.
Laravel Homestead — официальная предустановленная Vagrant-"коробка", которая предоставляет вам замечательную среду разработки без необходимости установки PHP, веб-сервера и любого другого серверного программного обеспечения на ваш компьютер. Можно больше не беспокоиться о том, что ваша операционная система засоряется! Vagrant-коробки очень удобны. Если что-то пошло не так, вы можете уничтожить и пересоздать коробку в считанные минуты!
Homestead запускается на ОС Windows, Mac и Linux, и включает в себя веб-сервер Nginx, PHP 7.1, MySQL, Postgres, Redis, Memcached, Node и все другие полезные штуки, которые вам понадобятся для разработки удивительных Laravel-приложений.
Если вы используете Windows, возможно, вам необходимо включить аппаратную виртуализацию (VT-x). Она обычно включается через BIOS. Если вы используете Hyper-V на UEFI-системе, вам может понадобиться отключить Hyper-V, для доступа к VT-x.
Включённое ПО
- Ubuntu 16.04
- Git (в 5.1+)
- PHP 7.1
- HHVM (только в 5.2 и ранее)
- Nginx
- MySQL
- MariaDB (в 5.1+)
- Sqlite3 (в 5.1+)
- Postgres
- Composer (в 5.1+)
- Node (с Yarn (в 5.3+), PM2, Bower, Grunt и Gulp)
- Redis
- Memcached
- Beanstalkd
- Laravel Envoy (в 5.0)
- Профайлер Blackfire (в 5.0)
Установка и настройка
Первые шаги
Прежде чем запустить Homestead-среду, вы должны установить VirtualBox 5.1,
VMWare или Parallels (с версии Laravel 5.3), а также Vagrant. Эти программные пакеты предоставляют простые в использовании визуальные инсталляторы для всех популярных операционных систем.
Для использования VMWare вам необходимо приобрести и VMware Fusion/Workstation, и плагин VMware Vagrant. Хотя он и платный, зато VMware изначально обеспечивает большую скорость работы общих папок.
Для использования провайдера Parallels вам необходимо установить плагин Parallels Vagrant. Он бесплатный.
Установка Vagrant-коробки Homestead
После установки VirtualBox/VMware и Vagrant вы должны добавить коробку laravel/homestead в установленный пакет Vagrant, используя следующую команду в вашем терминале. Скачивание коробки может занять несколько минут:
shvagrant box add laravel/homestead
Если выполнение команды завершится неудачно, проверьте, что у вас установлена свежая версия Vagrant.
Вы можете установить Homestead, просто клонировав репозиторий. Клонируйте репозиторий в папку Homestead в тот каталог, где вы храните все свои проекты Laravel, потому что коробка Homestead станет хостом всех ваших Laravel-проектов:
shcd ~ git clone https://github.com/laravel/homestead.git Homestead
После клонирования репозитория Homestead выполните в этой папке команду shbash init.sh
, чтобы создать конфигурационный файл Homestead.yaml. Этот файл будет помещён в скрытый каталог ~/.homestead:
sh// Mac / Linux... bash init.sh // Windows... init.bat
Настройка Homestead
Параметр provider в файле ~/.homestead/Homestead.yaml указывает на то, какой провайдер должен использоваться: virtualbox, vmware_fusion (Mac OS X) или vmware_workstation (Windows) или parallels. Вы можете задать тот, который предпочитаете:
confprovider: virtualbox
В параметре folders в файле Homestead.yaml перечислены все папки, которые вы хотите расшарить для вашей среды Homestead. Поскольку файлы в этих папках будут меняться, они будут синхронизироваться с вашей локальной машиной и средой Homestead. Вы можете настроить столько папок, сколько вам необходимо:
conffolders:
- map: ~/Code
to: /home/vagrant/Code
Для включения NFS просто добавьте простой ключ к вашей синхронизируемой папке:
conffolders:
- map: ~/Code
to: /home/vagrant/Code
type: "nfs"
Также вы можете передавать параметры, поддерживаемые синхронизируемыми папками Vagrant, указывая их под ключом options:
conffolders:
- map: ~/Code
to: /home/vagrant/Code
type: "rsync"
options:
rsync__args: ["--verbose", "--archive", "--delete", "-zz"]
rsync__exclude: ["node_modules"]
Не знакомы с Nginx? Не проблема. Параметр sites позволяет легко связать «домен» с папкой в среде Homestead. Типовая конфигурация сайта включена в файл Homestead.yaml. И снова вы можете добавить столько сайтов к своей среде Homestead, сколько необходимо. Homestead может служить удобной виртуальной средой для каждого проекта Laravel, над которым вы работаете:
confsites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
добавлено в 5.2 () 5.1 () 5.0 ()
Вы можете настроить использование HHVM для любого сайта Homestead, установив параметр hhvm в значение true:
confsites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
hhvm: true
Если вы измените параметр sites после подключения Homestead-коробки, вам будет необходимо перезапустить shvagrant reload --provision
, чтобы обновить конфигурацию Nginx на виртуальной машине.
Вы должны добавить «домены» для своих Nginx-сайтов в файл hosts на вашей машине. Файл hosts перенаправит запросы к вашим сайтам в вашу машину Homestead. На Mac и Linux этот файл расположен в /etc/hosts. На Windows он расположен в C:\Windows\System32\drivers\etc\hosts. Строки, которые вы добавляете в этот файл, будут выглядеть примерно так:
conf192.168.10.10 homestead.app
Удостоверьтесь, что IP-адрес тот же, что вы установили в своём файле ~/.homestead/Homestead.yaml. Когда вы добавите домен в свой файл hosts и запустите Vagrant-коробку, вы можете получить доступ к сайту через свой веб-браузер:
http://homestead.app
Запуск Vagrant Box
Когда вы отредактировали Homestead.yaml, выполните команду shvagrant up
в папке Homestead. Vagrant загрузит виртуальную машину и настроит ваши общие папки и сайты Nginx автоматически.
Чтобы уничтожить машину, вы можете использовать команду shvagrant destroy --force
.
Чтобы узнать, как подключиться к своей базе данных, читайте дальше!
Установка для проекта
Вместо глобальной установки Homestead и использования одной Homestead-коробки для всех ваших проектов, вы можете настроить отдельный экземпляр Homestead для каждого проекта. Установка Homestead для проекта может быть выгоднее, когда вы хотите поставлять файл Vagrantfile вместе с вашим проектом, позволяя тем, кто работает над проектом, просто выполнять shvagrant up
.
Чтобы установить Homestead непосредственно в ваш проект, затребуйте его с помощью Composer:
shcomposer require laravel/homestead --dev
Когда Homestead установлен, используйте команду shmake
для создания Vagrantfile и файла Homestead.yaml в корне вашего проекта. Команда shmake
автоматически настроит директивы sites и folders в файле Homestead.yaml.
shphp vendor/bin/homestead make
shvendor\\bin\\homestead make
Затем выполните команду shvagrant up
в терминале и зайдите в свой проект http://homestead.app через браузер. Не забывайте, что вам по-прежнему необходимо добавить строку для homestead.app (или выбранного вами домена) в файл /etc/hosts.
Установка MariaDB
Если вы решили использовать MariaDB вместо MySQL, вы можете добавить параметр mariadb в ваш файл Homestead.yaml. Этот параметр удалит MySQL и установит MariaDB. MariaDB является полноценной заменой для MySQL, поэтому вы должны использовать тот же драйвер БД mysql в настройках базы данных приложения:
confbox: laravel/homestead
ip: "192.168.20.20"
memory: 2048
cpus: 4
provider: virtualbox
mariadb: true
Повседневное использование
Глобальный доступ к Homestead
Иногда вам может понадобиться выполнить shvagrant up
вашей Homestead-машины из любого места вашей файловой системы.
добавлено в 5.2 ()
Это можно сделать, добавив простую Bash-функцию в профиль вашего Bash. Эта функция позволит вам выполнять любые команды Vagrant из любого места вашей системы, и автоматически укажет команде на ваш установленный Homestead:
conffunction homestead() {
( cd ~/Homestead && vagrant $* )
}
Не забудьте исправить путь ~/Homestead в функции на реальное расположение вашего установленного Homestead. Когда функция установлена, вы можете выполнять такие команды, как shhomestead up
и shhomestead ssh
из любого места вашей системы.
Это можно сделать, добавив простой Bash-псевдоним в профиль вашего Bash. Этот псевдоним позволит вам выполнять любые команды Vagrant из любого места вашей системы, и автоматически укажет команде на ваш установленный Homestead:
confalias homestead='function __homestead() { (cd ~/Homestead && vagrant $*); unset -f __homestead; }; __homestead'
Не забудьте исправить путь ~/Homestead в псевдониме на реальное расположение вашего установленного Homestead. Когда псевдоним установлен, вы можете выполнять такие команды, как shhomestead up
и shhomestead ssh
из любого места вашей системы.
добавлено в 5.0 ()
Чтобы добавить псевдонимы для Bash в вашу коробку Homestead, просто добавьте их в файл aliases в корень каталога ~/.homestead.
shalias vm="ssh vagrant@127.0.0.1 -p 2222"
После создания псевдонима, вы можете просто использовать команду shvm
для подключения к вашей Homestead-машине по SSH из любого места вашей системы.
Теперь отредактируйте файл Homestead.yaml. В этом файле вы можете настроить путь к своему паблик-ключу SSH, а также настроить папки, которые вы хотите расшарить между вашей основной машиной и виртуальной машиной Homestead.
У вас нет SSH-ключа? На Mac и Linux вы можете создать пару SSH-ключей, используя следующую команду:
shssh-keygen -t rsa -C "you@homestead"
На Windows вы можете установить Git и использовать Git Bash, встроенную в оболочку Git, чтобы выполнить указанную выше команду. Также вы можете использовать PuTTY и PuTTYgen.
Как только вы создали SSH-ключ, задайте путь к ключу в параметре authorize в вашем файле Homestead.yaml.
Подключение через SSH
Для подключения к своей виртуальной машине по SSH вы можете использовать команду shvagrant ssh
из вашего каталога Homestead.
Но поскольку вам, скорее всего, потребуется часто подключаться к вашей Homestead-машине по SSH, будет удобно создать «функцию» (для версии 5.1 и ранее «псевдоним») на вашей хост-машине для быстрого подключения, как описано выше.
Подключение к базам данных
База homestead изначально настроена на использование и MySQL, и Postgres. Для ещё большего удобства файл Laravel .env настроен на использование этой БД по умолчанию.
Чтобы подключиться к вашей базе данных MySQL или Postgres через клиент БД с вашей хост-машины, вы должны подключиться к 127.0.0.1 через порт 33060 (MySQL) или 54320 (Postgres). Имя пользователя и пароль для обеих баз данных — homestead / secret.
Вы должны использовать эти нестандартные порты, только подключаясь к базам данных с вашей главной машины. Вы будете использовать порты 3306 и 5432 в вашем конфигурационном файле базы данных Laravel, так как Laravel запущен на виртуальной машине.
Добавление дополнительных сайтов
После настройки и запуска вашей среды Homestead вы можете захотеть добавить дополнительные Nginx-сайты для своих Laravel-приложений. Вы можете запустить в одной среде Homestead столько установок Laravel, сколько захотите. Вы можете просто добавить сайты в свой файл ~/.homestead/Homestead.yaml и затем выполнить shvagrant reload --provision
(для версии 5.2 и ранее shvagrant provision
)) из папки Homestead.
добавлено в 5.0 ()
Этот процесс деструктивен. При запуске команды shprovision
, ваша существующая БД будет уничтожена и создана заново.
А ещё вы можете использовать скрипт shserve
, который доступен в среде Homestead. Чтобы использовать скрипт shserve
, подключитесь по SSH к вашей среде Homestead и запустите следующую команду:
shserve domain.app /home/vagrant/Code/path/to/public/directory 80
После выполнения команды shserve
, не забудьте добавить новый сайт в файл hosts на вашей главной машине!
Настройка расписания Cron
Laravel предоставляет удобный способ для планирования Cron-задач путём планирования единственной Artisan-команды shschedule:run
на ежеминутное выполнение. Команда shschedule:run
проверит запланированные задачи, определённые в классе App\Console\Kernel, и определит, какие задачи необходимо выполнить.
Если вы хотите выполнить команду shschedule:run
для сайта Homestead, вы можете задать значение true для параметра schedule при определении сайта:
confsites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
schedule: true
Cron-задача для сайта будет определена в папке /etc/cron.d на виртуальной машине.
Порты
По умолчанию следующие порты переадресованы в вашу среду Homestead:
- SSH: 2222 → переадресован в 22
- HTTP: 8000 → переадресован в 80
- HTTPS: 44300 → переадресован в 443
- MySQL: 33060 → переадресован в 3306
- Postgres: 54320 → переадресован в 5432
Добавление дополнительных портов
Если хотите, вы можете переадресовать дополнительные порты в Vagrant-коробку, а также указать их протокол:
confports:
- send: 93000
to: 9300
- send: 7777
to: 777
protocol: udp
Сетевые интерфейсы
Свойство networks в файле Homestead.yaml настраивает сетевые интерфейсы для вашей среды Homestead. Вы можете настроить сколько угодно интерфейсов:
confnetworks:
- type: "private_network"
ip: "192.168.10.20"
Для включения сетевого моста задайте параметр bridge и измените тип сети на public_network:
confnetworks:
- type: "public_network"
ip: "192.168.10.20"
bridge: "en1: Wi-Fi (AirPort)"
Для включения DHCP просто удалите параметр ip из конфигурации:
confnetworks:
- type: "public_network"
bridge: "en1: Wi-Fi (AirPort)"
добавлено в 5.3 ()
Обновление Homestead
Для обновления Homestead надо выполнить два простых шага. Во-первых, вам надо обновить Vagrant-коробку с помощью команды shvagrant box update
:
shvagrant box update
Затем вам надо обновить исходный код Homestead. Если вы клонировали репозиторий, то можете просто выполнить shgit pull origin master
в то место, куда вы клонировали репозиторий изначально.
Если вы установили Homestead через файл composer.json вашего проекта, вам надо убедиться, что этот файл содержит строку "laravel/homestead": "^4" и обновить ваши зависимости:
shcomposer update
Старые версии
Вы можете легко изменить используемую в Homestead версию коробки, добавив следующую строку в ваш файл Homestead.yaml:
confversion: 0.6.0
confbox: laravel/homestead
version: 0.6.0
ip: "192.168.20.20"
memory: 2048
cpus: 4
provider: virtualbox
При использовании старых версий коробки Homestead вам надо проверить версию на совместимость с исходным кодом Homestead. Ниже приведена таблица поддерживаемых версий коробки с указанием того, какую версию исходного кода необходимо использовать, и какая в коробке версия PHP:
Версия Homestead | Версия коробки | |
---|---|---|
PHP 7.0 | 3.1.0 | 0.6.0 |
PHP 7.1 | 4.0.0 | 1.0.0 |
добавлено в 5.0 ()
Профайлер Blackfire
Профайлер Blackfire от SensioLabs автоматически собирает данные о выполнении вашего кода, такие как использование ОЗУ, время ЦПУ и ввод/вывод диска. В Homestead легко использовать этот профайлер для ваших приложений.
Все необходимые пакеты уже установлены в коробку Homestead, вам надо просто задать ID сервера и его ключ в файле Homestead.yaml:
confblackfire:
- id: your-server-id
token: your-server-token
client-id: your-client-id
client-token: your-client-token
После настройки прав доступа для Blackfire переподключите коробку с помощью команды shvagrant provision
из вашей папки Homestead. Обязательно загляните в документацию Blackfire, чтобы узнать, как установить расширение Blackfire для вашего браузера.
Комментарии (16)
У меня уже есть одна виртуалка homestead c larave 4
Я хочу новую с larave 5 для другого проекта.
Мне опять надо делать vagrant box add laravel/homestead и качать огромный файл?
Конечно же нет. Homestead — это всего лишь базовый образ виртуальной машины, внутри которой может крутиться сколько угодно проектов.
Всё здорово работает, но я озадачен одной проблемой.
Допустим на одном из сайтов на виртуальной машине мне понадобилось изменить конфиг nginx добавив туда rewrite инструкции. С этим проблем нет. Проблемы начинаются, когда нужно создать на виртуальной машине новый проект. В homestead.yaml прописываем проект, делаем vagrant reload -provision и... и у все nginx конфиги, как и базы данных переписываются на данные по умолчанию. Если с базами данных вопрос решается просто — убрать из homestead.yaml те базы которые нужно оставить в «живых», то вот с конфигами решение пока только одно, добавлять новые проекты при помощи конструкции «serve domain.app /home/vagrant/Code/path/to/public/directory 80», что, всё таки, не так удобно и «красиво»...
В идеале было бы иметь возможность в homestead.yaml дописывать нужные дополнения к конфигу для разных проектов.
сделал все как описано в статье.
перехожу по адресу http://homestead.app/
страница типа грузиться и пишет 'Время ожидания соединения истекло'
в чем проблема?
При попытки запуска выдает ошибку:
E:\Laravel\Homestead>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
There are errors in the configuration of this machine. Please fix
the following errors and try again:
vm:
* A box must be specified.
После установки софта и попытки загрузит виртуальную машину, получаю следующие ошибки (хотя в интерфейсе VirtualBox машина отображается с состоянием "работает ")
МОЯ КОМАНДА
ОШИБКА:
МОЯ КОМАНДА:
Моя конфигурация:
Расположение Homestead: C:\Users\pasha.homestead
Мой Homestaed.yaml:
Подскажите пожалуйста, в чем может быть проблема? Заранее благодарен!
Павел, может быть Вам поможет это решение
Добрый день!
На своей рабочей станции я использую ОС Windows 7.
Для запуска ВМ использую VMware Workstation Player 12.
По данной инструкции я установил себе vagrant.
Качнул из ком-строки vagrant/laravel box и смог подцептиь его в Player (не знаю правда зачем).
Где мне искать Homestead.yaml, как из венды клонировать проект с github'а и так далее и тому подобное?
Или это надо делать только из хостовой ОС Linux?
установил homestead. создал ключи для ssh, поместил их в папку ~/.ssh/
В Homestead.yaml пути до ключей корректные.
В браузере homestead.app сайт открывает.
Но если зайти через Putty, пишу хост vagrant@127.0.0.1 , порт 2222, тогда пишет:
Почему он просит пароль если авторизация должна быть по ключу?
напишите что подключение к homestead с помощью ssh, проходит по хосту vagrant@127.0.0.1 и паролю vagrant.
А то я запарился мозговать, почему консоли не пускает без пароля, хотя авторизация должна быть по ключу.
Для новичка в освоении будет сложно разобраться в этих всех командах.
1. Почему огромный образ скачивается в каталог C:\Users\User1\.vagrant.d?
Нет инструкции о том, как этот огромный образ скачать на другой диск, например на D, где огромное количество свободного места и не забивать системный диск. Да, я мог бы додуматься и вручную сменить каталог и скачать в него образ, но так как я первый раз ставлю laravel на компьютер, то я просто тупо копирую команды и вставляю в консоль. Может быть подкорректируете статью по установке? :)
2. Почему бы не сделать просто образ настроенной виртуалки и его потом скачать на компьютер и открыть в VirtualBox либо VMWare, где будет уже все настроено как нужно, без установки лишего «мусора» в хост-систему?
3. Ставил другой фреймворк на компьютер, то там есть возможность просто скачать архив с фреймворком и раскаповать архив в нужный веб-каталог и потом работать через консоль находясь в каталоге с фреймворком, без лишнего мусора в системе, без лишних системных зависимостей. Если нужно, взял, запаковал всю папку с фреймворком, перенес на другой компьютер либо на другой сервер, распаковал архив в нужную папку, импортировал таблицы в базу и открыл сайт в браузере и все работает без проблем. Но так как другой фреймворк первый раз показался мне сложный, то я решил выбрать Lavarel, так как по описанию он мне намного ближе. Я все свои проекты пишу с нуля на чистом PHP, а теперь хочу попробовать свои силы в работе с фреймворками, для ускорения разработки однотипных приложений, типа анкеты, формы регистрации, блога, системы уровней доступа и подобное.
Подскажите кто-нибудь - где в Windows 10 искать профиль Bash и куда добавлять эту функцию? С Линуксом и с башем знаком очень поверхностно и вообще понять не могу как его настроить. Да и гугл не сильно то помагает :/
Для Git Bash Here для использования из любого места прописываем
function homestead() {
( cd C:/Users/Roman/Homestead && vagrant $* )
}
в файл .bashrc в папке пользователя (т. е. C:\Users\Roman\ например)
После этого
vagrant reload –provision
И не забываем, что «Этот процесс деструктивен. При запуске команды provision, ваша существующая БД будет уничтожена и создана заново.»
Зачем себя под windows так мучать? Напишите bat файл для запуска и не мучайтесь. Если вы не хотите разбираться со всем этим то просто упростите процесс.
ОС LMDE 3, при установке следовал инструкции с сайта https://laravel.ru/docs/v5/homestead, перед этим установил VirtualBox и Vagrant, суть проблемы в следующем когда дело доходит до установки
vagrant box add laravel/homestead, устанавливается версия с которой идет только один провайдер это VMWare, как мне установить версию коробки ниже, в которой был провайдер виртуалбокса?
не могли бы не много дополнить статью, так как теперь там ставится только коробка с VMWare провайдер