Установка и настройка рабочей среды Homestead для Laravel
Homestead — это специально подготовленный разработчиками Laravel образ Ubuntu Linux, включающий в себя все необходимые инструменты для создания приложений на этом замечательном фреймворке. В официальной документации Laravel процесс установки Homestead описан довольно неплохо, но всё же содержит некоторые пробелы. Их я и попытаюсь заполнить в этой статье.
Итак, приступим. Первым делом нужно установить VirtualBox и Vagrant.
Последнюю версию VirtualBox можно скачать на странице https://www.virtualbox.org/wiki/Downloads. При установке можно оставить все настройки по умолчанию.
Установщик Vagrant скачиваем на странице https://www.vagrantup.com/downloads.html. По умолчанию программа устанавливается в корень диска C:\, в папку HashiCorp\Vagrant\. Я предпочитаю изменить этот путь на C:\Program Files (x86)\HashiCorp\Vagrant\. После установки Vagrant потребуется перезагрузить компьютер.
Теперь нужно добавить бокс laravel/homestead
в Vagrant. Открываем командную строку Windows от имени администратора (сочетание клавиш Win+R, затем команда cmd
в окне Выполнить) и выполняем следующую команду:
vagrant box add laravel/homestead
В консоли Вы увидите примерно следующее:
Процесс загрузки займёт некоторое время, в зависимости от скорости вашего интернет-соединения.
Устанавливать Homestead будем при помощи Git. Скачать его последнюю версию можно на странице https://git-scm.com/downloads. При установке все настройки можно оставить по умолчанию. Чтобы команда git
стала доступна в консоли Windows, также потребуется перезагрузить компьютер.
Теперь нужно клонировать репозиторий Homestead CLI в произвольную директорию, например в вашу домашнюю папку. Для этого запустите консоль Windows от имени администратора и выполните следующую команду:
git clone https://github.com/laravel/homestead.git Homestead
На экране вы увидите следующее:
При этом в вашем домашнем каталоге будет создана папка Homestead. Перейдите в неё и запустите файл init.bat, он создаст конфигурационный файл Homestead.yaml в папке .homestead в вашей домашней директории.
Теперь создадим SSH-ключи для доступа к нашей виртуальной машине. Для этого нужно открыть терминал Git (например, щёлкнув на экране правой кнопкой мыши и выбрав из контекстного меню пункт Git Bash Here) и выполнить следующую команду:
ssh-keygen -t rsa –C '[Ваш email]'
При запросе пути к каталогу для сохранения файла ключей просто нажмите Enter, при этом будет выбрано значение по умолчанию указанное в скобках (в домашней директории будет создана папка .ssh, в которую будут помещены файлы ключей). Также необходимо будет ввести и подтвердить пароль для ключей.
Чтобы Vagrant использовал именно эти ключи, а не создавал новые файлы ключей при каждом запуске из-за настроек безопасности, нужно добавить следующую строчку в файл Vagrantfile в папке Homestead:
config.ssh.insert_key = false
После этого он должен выглядеть примерно так:
# -*- mode: ruby -*-
# vi: set ft=ruby :
require 'json'
require 'yaml'
VAGRANTFILE_API_VERSION = "2"
confDir = $confDir ||= File.expand_path("~/.homestead")
homesteadYamlPath = confDir + "/Homestead.yaml"
homesteadJsonPath = confDir + "/Homestead.json"
afterScriptPath = confDir + "/after.sh"
aliasesPath = confDir + "/aliases"
require File.expand_path(File.dirname(__FILE__) + '/scripts/homestead.rb')
Vagrant.require_version '>= 1.8.4'
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.ssh.insert_key = false
if File.exist? aliasesPath then
config.vm.provision "file", source: aliasesPath, destination: "~/.bash_aliases"
end
if File.exist? homesteadYamlPath then
settings = YAML::load(File.read(homesteadYamlPath))
elsif File.exist? homesteadJsonPath then
settings = JSON.parse(File.read(homesteadJsonPath))
end
Homestead.configure(config, settings)
if File.exist? afterScriptPath then
config.vm.provision "shell", path: afterScriptPath, privileged: false
end
if defined? VagrantPlugins::HostsUpdater
config.hostsupdater.aliases = settings['sites'].map { |site| site['map'] }
end
end
Всё почти готово к запуску, осталось совсем немного.
Для начала откроем файл Homestead.yaml (помните, он находится в папке .homestead в нашей домашней директории). Вот его содержимое:
---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
- map: ~/Code
to: /home/vagrant/Code
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
databases:
- homestead
# blackfire:
# - id: foo
# token: bar
# client-id: foo
# client-token: bar
# ports:
# - send: 50000
# to: 5000
# - send: 7777
# to: 777
# protocol: udp
Здесь содержатся настройки виртуальной машины. В принципе, все они вполне работоспособны, нужно лишь внести небольшие изменения в нашу операционную систему. В первую очередь создадим папку Code в нашей домашней директории. Через эту папку мы сможем работать с сайтом, который будет доступен по адресу http://homestead.app. Чтобы получить возможность обращаться к этому сайту из браузера, добавим следующую строку в файл hosts, находящийся в директории C:\Windows\System32\drivers\etc\:
192.168.10.10 homestead.app
SSH-ключи уже созданы и находятся в нужной директории.
Всё готово к запуску системы. Перейдите в директорию с установленным Homestead, откройте терминал и выполните комнаду vagrant up
.
Поздравляю! Мы запустили виртуальную машину Homestead. Проверить её статус можно с помощью команды vagrant status
, для остановки виртуальной машины используйте команду vagrant halt
.
Открыв страницу http://hometead.app вы увидите следующее:
Это всего лишь означает, что в рабочей директории сайта, определённой в файле Homestead.yaml, пока что нет файлов. Это легко исправить, добавив файлы сайта в папку Code\Laravel\public\ (такая конфигурация очень удобна для установки Laravel: скопировав дистрибутив в папку Laravel мы получаем доступ к папке public через браузер, сами файлы движка при этом остаются недоступными извне).
Осталось настроить доступ к виртуальной машине через SSH.
Скачиваем SSH-клиент PuTTY на странице http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html. Предлагаю скачать ZIP-архив и распаковать его в папку Putty в вашей домашней директории. Запустите файл PUTTY.exe. Подключиться можно со следующими параметрами:
- Логин:
vagrant
- Пароль:
vagrant
- Адрес сервера:
127.0.0.1
- Порт:
2222
Введите все эти параметры (кроме пароля) в окне PuTTY Configuration и нажмите кнопку Open.
Введите пароль в окне терминала (пароль не отображается при вводе, и может сложиться впечатление, что терминал завис, однако это не так) и нажмите Enter. После этого вы сможете работать с виртуальной машиной через SSH.
Можно автоматизировать процесс подключения, исключив необходимость каждый раз вводить все данные и пароль. Данные для подключения мы сохраним в PuTTY, для подключения будем использовать ранее сгенерированный SSH-ключ.
Проблема в том, что PuTTY использует собственный формат приватных ключей для подключения. К счастью, в его составе есть утилита для конвертации стандартных файлов ключей. Запустите PUTTYGEN.EXE, нажмите кнопку Load и выберите ранее сгенерированный с помощью Git файл приватного ключа id_rsa (для возможности выбора установите режим просмотра на показ всех файлов в выпадающем меню справа от поля Имя файла).
После выбора потребуется ввести пароль, использованный вами при генерации ключа. Файл ключа будет загружен и сконвертирован в формат PuTTY. Очистите поля Key passphrase и Confirm passphrase, чтобы впоследствии подключаться без пароля.
Теперь нажмите кнопку Save private key и сохраните ключ в той же папке под именем id_rsa.ppk, предварительно согласившись на создание ключа без пароля.
Снова откройте PUTTY.EXE. В разделе Session введите настройки подключения, как делали до этого. Затем перейдите в раздел Connection→SSH→Auth, нажмите кнопку Browse и выберите ранее сгенерированный файл приватного ключа.
Вернитесь в раздел Session и сохраните конфигурацию. Для этого в поле Saved Sessions введите произвольное имя конфигурации (например Homestead
) и нажмите кнопку Save.
Для подключения дважды кликните по имени сохранённой конфигурации в списке.
На этом настройку рабочей среды Homestead можно считать завершённой.