При установке laravel/homestead под Win10 столкнулся с проблемой запуска виртуальной машины. В консоли VirtualBox красовалась надпись, говорящая об ожидании сетевого подключения:
[ ***] A start job is running for Raise network interfaces (40s / 5 min)
В командной строке Windows, из которой запустили vagrant up, через несколько минут после старта возникала ошибка:
Timed out while waiting for the machine to boot. This means that
Vagrant was unable to communicate with the guest machine within
the configured ("config.vm.boot_timeout" value) time period.
Причем на этой же рабочей машине работают другие vagrant-коробки вполне успешно.
В интернете масса различных проблем со стартом homestead. Среди которых, чаще всего, проблема с отключенной виртуализацией (VT-x) или попыткой установки 64-разрядной Ubuntu (на базе которой собран homestead) на 32 разрядную Windows.
Первая проблема решается простым включением виртуализации в BIOS. Чтобы проверить, включена ли виртуализация прямо сейчас, скачайте простую утилиту Securable.
Вторая проблема решается установкой 32-разрядного форка homestead.
Но у меня была включена виртуализация, используется 64-разрядная Windows 10 и, что самое интересное, уже работало несколько коробок ubuntu/trusty64 вполне успешно, однако homestead не желал запускаться.
Решение своей проблемы я нашел в данном issue. Решение заключается в добавлении следующей строки в файл scripts\homestead.rb
vb.customize ["modifyvm", :id, "--cableconnected1", "on"]
По традиции, набросаю простую инструкцию по установке homestead и развертыванию тестового проекта quickstart, который описан в быстром старте руководства.
Инструкция по установке laravel/homestead
По традиции, опишу свою сокращенную и одновременно дополненную инструкцию по установке laravel/homestead под Windows 10.
Оригинальная инструкция доступна на официальном сайте и на сайте русскоязычного сообщества. Обязательно обратитесь к этим инструкциям для общего ознакомления, прежде чем продолжить.
На всякий случай обновите VitrualBox и Vagrant. На момент написания статьи последние версии следующие:
- VirtualBox 5.0.30
- Vagrant 1.9.0
Исходные данные
Предположим, что все наши проекты находятся в каталоге D:\Projects
. Вы можете установить homestead в этот же каталог, либо выбрать любой другой на Ваше усмотрение. Я буду описывать вариант установки в тот же каталог. Первый проект, который мы для проверки подключим к homestead, будет находится в каталоге D:\Projects\quickstart
, соответственно каталогом, содержащим index.php
будет D:\Projects\quickstart\publuc
. Эти каталоги пригодятся далее при настройке.
В качестве командной строки я использую Git-bash интерпретатор, идущий в комплекте с git-scm.
Итак, переходим в каталог, в котором собираемся развернуть homestead, выполняем загрузку репозитория, инициализацию homestead и генерируем приватный и публичные ключи, если их у Вас нет:
cd /D/Projects
git clone https://github.com/laravel/homestead.git Homestead
cd Homestead
./init.sh
ssh-keygen -t rsa -C 'myname@mydomain.net'
После этих операций в домашнем каталоге пользователя будет создан каталог .homestead
, содержащий конфигурационный файл Homestead.yaml
. Открываем этот файл любым удобным редактором (например, Sublime Text).
Homestead.yaml
Настройка данного файла сводится к простому описанию каталогов локальной машины, которые необходимо подмонтировать внутрь homestead, а также сайтов и путей для их каталогов внутри homestead. В нашем случае, мы должны подмонтировать наш каталог с проектами D:\Projects
внутрь виртуальной машины homestead. Все файлы и каталоги внутри этого каталога автоматически будут доступны внутри виртуальной машины homestead. В настройках сайтов мы должны будем указать путь к каталогу pubic
, но уже внутри homestead. Фрагмент файла Homestead.yaml
, отвечающий за это, выглядит следующим образом
folders:
- map: D:\Projects
to: /home/vagrant/projects
sites:
- map: quickstart.laravel.local
to: /home/vagrant/projects/quickstart/public
Так как мы подключили к виртуальной машине весь каталог Projects целиком, то нет необходимости в будущем подключать какие либо еще каталоги, если все Ваши проекты находятся внутри каталога D:\Projects.
Обязательно обратите внимание на количество пробелов в начале строк — они должны соответствовать оригинальному файлу, а не моей статье. В моем примере эти пробелы могут отсутствовать по причине глюка плагина, обрамляющего код. :(
scripts\homestead.rb
Без следующей простой настройки мне не удалось запустить виртуальную машину homestead под Windows (под Ubuntu все запустилось без проблем).
Проблема оказалась простой и была связана с тем, что по умолчанию в VirtualBox виртуальные интерфейсы не подключаются к сети. Давайте исправим это.
Откройте файл homestead.rb, расположенный в подкаталоге scripts того каталога, куда Вы развернули репозиторий homestead. Если следовать моему примеру, это будет каталог D:\Projects\Homestead
и добавьте в блок, именованный комментарием # Configure A Few VirtualBox Settings вреди прочих подобных следующую строку:
vb.customize ["modifyvm", :id, "--cableconnected1", "on"]
Эта настройка активирует сетевое подключение при старте виртуальной машины. Если такая же проблема возникнет на других ОС, обратитесь к обсуждению, в котором Вы наверняка найдете ответ на свой вопрос.
hosts
Теперь в локальный файл hosts необходимо добавить запись, присваивающую нашему адресу сайта quickstart.laravel.local
IP-адрес homestead (по умолчанию, если не меняли, это 192.168.10.10
).
Файл hosts в Windows находится в каталоге c:\Windows\System32\drivers\etc. Если Вы работаете не от имени Администратора, то прав на изменение данного файла у Вас не будет. Самый простой способ его изменить — это скопировать на рабочий стол (или в любое другое место), там его отредактировать и скопировать обратно (нужны будут права администратора для этого).
Откройте файл и добавьте в него строку:
192.168.10.10 quickstart.laravel.local
Вот теперь все готово для запуска vagrant.
Запуск vagrant up
Находясь в каталоге D:\Projects\Homestead, выполните команду в командной строке Git-bash: vagrant up
. Будет загружена и развернута коробка laravel/homestead. После выполнения всех действий по развертыванию, станет доступен хост 192.168.10.10 (можно проверить через ping), спустя еще несколько мгновений станет доступен сайт http://quickstart.laravel.local
Проект quickstart
На данный момент у Вас скорее всего еще не существует каталога quickstart. В официальном руководстве сказано, что quickstart — это демонстрационный проект, который рассматривается в руководстве по ходу объяснения принципов работы фреймворка. Чтобы установить его, перейдите в консоль виртуального сервера homestead — используя ssh подключитесь к адресу 192.168.10.10 (имя пользователя и пароль vagrant). Затем выполните следующие действия:
cd ~/projects
git clone https://github.com/laravel/quickstart-basic quickstart
cd quickstart
composer install
php artisan migrate
Будет загружен проект quickstart из репозитория, затем выполнена установка зависимостей и миграции БД.
На своей локальной машине Вы должны будете увидеть появившийся каталог quickstart в Вашем каталоге D:\Projects. Файлы, находящиеся на сервере, Вам полностью доступны на локальной машине. Вы можете открыть этот каталог в Вашей IDE и работать с файлами как обычно.
Автоматизация
Чтобы каждый раз не переходить в каталог D:\Projects\Homestead, чтобы выполнить vagrant up
или vagrant halt
, можно прописать псевдоним для этой команды и вызывать ее из любого места файловой системы (только из git-bash).
Для этого в папке вашего пользователя на локальной машине создайте файл .bashrc (если он еще не существует) следующего содержания:
alias homestead='function __homestead() { (cd /D/Projects/Homestead && vagrant $*); unset -f __homestead; }; __homestead'
Теперь можно просто открыть git-bash и написать homestead up
или любую другую vagrant-команду.
Удачи!
По вопросам более глубокой настройки лучше всего обратиться к официальной инструкции.