Laravel homestead Windows не запускается? Есть решение!

При установке 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-команду.

Удачи!

По вопросам более глубокой настройки лучше всего обратиться к официальной инструкции.

Добавить комментарий