Установка vagrant на windows 10. Установка и настройка рабочей среды Homestead для Laravel

Что такое Vagrant?

Я бы описал Vagrant - как надстройка над виртуальными машинами (VirtualBox, VMWare) со своей инфраструктурой. Vagrant позволяет с помощью заранее подготовленных инструкций развернуть подобие серверного окружения на своей локальной машинке (сколько часов отладки было потрачено из-за отличий окружений (dev, test, prod), в которых запускается разрабатываемое ПО). Поговаривают, что Vagrant в силах решить эти проблемы. Проверим так ли это, и не принесет ли он больше сложностей нежели профита.

Определения

# название бокса на основе которого будет разворачиваться виртуалка

config.vm.box = "lucid10x64"

# Проброс портов (8080 нашей машинки на 80 виртуалки)

config.vm.network:forwarded_port, host: 8080, guest: 80

# 2х сторонняя синхронизация каталога (локальный, виртуальный)

config.vm.synced_folder "/home/stas/www/vagrant/src", "/var/www"

Примечание

По умолчанию текущий каталог проекта (в котором находится Vagrantfile ) уже синхронизируется с директорией /vagrant (в корневой на виртуальной системы). DocumentRoot веб сервера Apache завернут на этот же каталог. Поэтому, дополнительно синхронизацию на /var/www указывать не нужно, но я привел этот конфиг как пример для бокса, у которого не будет предустановленного Apache .

Примечание

Для проверки окружения виртуальной машины, нужно создать файл index.php внутри вашего проекта и перезагрузить конфиг Vagrant :

vagrant reload

После этого откройте в браузере страницу http://localhost:8080 - это и будет ваш index.php .

Подготовить окружение виртуальной машины (provision , обеспечение) под наш проект мы можем несколькими способами. Один из них, это запуск shell скрипта, в котором прописываются все действия необходимые для настройки окружения. Давайте установим mc ( пример установки Apache). Создайте в корне проекта файл bootstrap.sh :

#!/usr/bin/env bash

apt-get update

apt-get install mc

И пропишите в Vagrantfile что необходимо запустить этот скрипт после старта виртуальной машины:

config.vm.provision:shell, :path => "bootstrap.sh"

Перезагрузите конфиг с обновлением обеспечения :

vagrant reload --provision

Управление

Команды для управления виртуальной машиной:

vagrant ssh # подключиться по SSH под юзером vagrant

vagrant suspend # поставить на паузу

vagrant halt # выключить

vagrant reload # перезагрузить конфиг (без выполнения provision)

vagrant reload --provision

vagrant destroy # удалить виртуалку

vagrant box list # cписок доступных "боксов"

Будьте бдительны!

Пользователь vagrant имеет право выполнять команды под рутом (sudo ) без пароля.

Кастомизация

VAGRANT_HOME - переменная окружения, содержит путь к каталогу с VagrantBox"ами (как установить переменную окружения ).

Вопросы

В: Где будет расположен/скрипты код, с которым мы работаем? Постоянно синхронизироваться? А это быстро?

О: Код, с которым вы работаете будет располагаться в локальном каталоге. Каталог проекта уже по дефолту синхронизируется с виртуальной машиной.

В: Сколько времени займет развертывание типичного LAMP сервера?

О: Скачивание Vagrant Box ~ 20 мин. Если файл конфигурации уже описан, тогда все зависит от окружения и зависимых пакетов - все зависимости будут скачиваться и устанавливаться (если только они не включены в сам бокс). Если вы только начинаете настройку окружения и виртуалки - готовьтесь потратить от часа на описание нужного окружения.

В: Средний расход ресурсов на обслуживание одного LAMP окружения?

О: Прикидываю как бы замерять расход памяти по нескольким процессам...

Как насчет того, чтобы поднять работу с VirtualBox на новый уровень - создавать виртуальные машины быстро и целыми пачками, организуя их в сеть? Что, если одним конфигурационным файлом и парой команд создавать простую и воспроизводимую структуру серверов, управляя шарингом папок и перенаправлением портов? Уже интересно?

Введение

Главная страница проекта сообщает, что ему уже выразили доверие такие гиганты мира IT, как Mozilla, Nokia или DISQUS. «Бродяга» (а именно так переводится название проекта) создан в лучших традициях эпохи гитхаба:

  1. Простой и приятный информативный сайт: www.vagrantup.com .
  2. Исходный код написан на Ruby и выложен на широкое обозрение: github.com .
  3. За два года существования он успел обрасти большим количеством дополнений и плагинов на любой вкус.

Установка

Несмотря на то что Vagrant - это всего лишь рубишный гем, создатели предлагают сразу несколько способов установки.

Первый - установка соответствующего операционной системе пакета с downloads.vagrantup.com . Там есть нативные инсталлеры под Windows, OS X и распространенные дистрибутивы Linux (Deb/RPM-пакеты, а также общий инсталлер). Второй - установка соответствующего гема:

$ gem install vagrant

После этого в системе появится новая команда - vagrant. И мы уже готовы создать нашу первую виртуалку:

$ vagrant box add precise64 http://files.vagrantup.com/precise64.box $ mkdir my_project $ cd my_project $ vagrant init precise64 $ vagrant up

Ну вот и все, теперь убедимся в ее работе - проверим ее состояние:

$ vagrant status Current VM states: default running

И зайдем по SSH, увидев стандартное приветствие убунты:

$ vagrant ssh Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64) * Documentation: https://help.ubuntu.com/ Welcome to your Vagrant-built virtual machine. Last login: Mon Jan 28 13:51:24 2013 from 10.0.2.2 vagrant@precise64:~$

Базовые сборки

Базовые сборки (base box) - это специальным способом подготовленные шаблоны виртуальных машин, из которых потом создаются непосредственно виртуальные среды вагранта. Дело в том, что для ускорения процесса создания виртуалки он копирует существующую базовую сборку и уже ее настраивает в соответствии с конфигурационным Vagrant-файлом. В результате пользователь, с одной стороны, может не беспокоиться о некоторых нюансах конфигурации виртуалки (например, объеме памяти или сетевых контроллерах), с другой стороны - все эти нюансы при необходимости могут быть легко изменены. Также в большой степени экономится время на создании новой машины, что позволяет в любой момент «убить» все ненужное, а потом создать по новой. Базовые сборки в систему добавляются командой:

$ vagrant box add <имя сборки>

Сами разработчики вагранта предлагают четыре вида базовых сборок - два последних релиза Ubuntu в 32- и 64-битном исполнении (одну из них мы только что уже установили в системе):

Но на этом список далеко не заканчивается. Существует специальный сайт, где каждый желающий может выложить свою базовую сборку. Он располагается по адресу:www.vagrantbox.es . Там любой может выбрать себе что-нибудь по вкусу. В ассортименте: Debian, Windows Server, FreeBSD, CentOS, Gentoo и другие.

Кроме того, ты легко можешь создать собственную стартовую конфигурацию, но об этом чуть позже.

НОВШЕСТВА VIRTUALBOX 4.2

Кстати, не так давно Oracle выпустили новую версию VirtualBox под номером 4.2. Если ты еще не перешел на актуальную версию, то, вероятно, тебе будет интересно узнать о новшествах.

Группы виртуальных машин

В новом менеджере появилась возможность группировать виртуалки по какому-либо принципу (например, по типу операционной системы, по проекту, в котором они используются, или как-либо еще). Группы позволяют организовать весь зоопарк, который появляется у опытных пользователей виртуалбокса, а также выполнять групповые операции - например, можно разом стартануть несколько машин, выбрав соответствующую команду в группе.

Автостарт? Запуск «безмордовый»

Так называемый Headless launch - то есть запуск виртуалки без открытия соответствующего окна с интерфейсом машины - теперь возможен прямо из менеджера. Если раньше, чтобы запустить виртуальную машину, приходилось отправляться в консоль, набирать там что-то типа:

$ VBoxManage startvm ... --type headless

то теперь достаточно при запуске виртуальной машины из интерфейса VirtualBox зажать. Остановить запущенную в headless режиме виртуалку можно также из менеджера, выполнив соответствующую команду.

Создание виртуалок в два клика

Это, правда, чисто интерфейсное улучшение (то есть ни о каком программном ускорении создания виртуальной машины речи не идет), но все же. Если на первом диалоге при создании новой виртуалки нажать кнопку «Скрыть описание», то появится другой диалог типа «все в одном», в котором можно будет быстро настроить параметры создаваемой машины.

Улучшения сетевых интерфейсов

Теперь VirtualBox позволяет создавать виртуальные машины с 36 сетевыми картами на борту. Также представлен новый функционал регулирования пропускной способности, чтобы ограничить «прожорливость» виртуалки.

Повышение производительности процессоров

Многие современные процессоры поддерживают технологию виртуализации вложенных страниц для блока управления памятью процессора (у Intel она называется Extended Page Tables, а у AMD - Rapid Virtualization Indexing). С версии 4.2 виртуалбокс теперь ее тоже поддерживает. Поэтому владельцы Core i5 или AMD Bulldozer после обновления должны заметить определенный прирост скорости работы виртуальной машины.

Новые гостевые ОС

Список официально поддерживаемых гостевых операционок теперь дополнился следующими наименованиями:

  • Mac OS X Mountain Lion
  • Windows 8
  • Windows Server 2012
  • Ubuntu 12.04 (Precise Pangolin)
  • Fedora 17
  • Oracle Linux 6.3

Так что теперь все современные операционки без проблем должны работать внутри VB.

Vagrant-файл

Важной частью системы является специальный конфигурационный файл, написанный на Ruby. Он называется Vagrantfile и описывает виртуальные машины, необходимые в проекте. Предполагается, что в команде для разработки используется один и тот же Vagrantfile, который распространяется через систему контроля версий между ее членами. Важно заметить, что Vagrant читает конфигурацию последовательно из четырех мест и каждый последующий этап может изменять параметры предыдущего. Итак, точный порядок загрузки такой:

  1. Сначала загружается Vagrantfile, содержащийся в руби-геме.
  2. Следом загружается Vagrantfile из директории базовой сборки (если она было собрана с параметром --vagrantfile).
  3. Потом загружается Vagrantfile из домашнего каталога пользователя (~/.vagrant.d/), позволяя пользователю добавить для него какие-либо параметры.
  4. И последним загружается Vagrantfile из директории проекта. В большинстве случаев именно в нем находятся все основные настройки проекта, и именно этот файл стоит добавить в систему контроля версий.

Полный список доступных настроек для вагрантфайла содержится в документации . Только что созданная виртуальная среда имеет минимальный конфиг вида:

Vagrant::Config.run do |config| config.vm.box = "precise64" end

Provisioning

Запуск пустой виртуальной машины (пусть даже и особым образом сконфигурированной) вряд ли может быть сильно полезен, поэтому в вагранте есть так называемые наполнители (provisioners) - различные способы настроить виртуальную машину не снаружи, а изнутри. По сути, это возможность писать различные дополнительные сценарии, которые выполняются после создания виртуальной машины. Поскольку вагрант написан рубистами, то в качестве конфигураторов машины выбраны привычные им средства: Chef Solo, Chef Server, Puppet Standalone, Puppet Server и обыкновенный Shell. Средства Chef и Puppet довольно известны и распространены и часто применяются для деплоя самых разных проектов, так что мы не будем заострять на нах внимание и рассмотрим самый простой вариант - shell-скрипт. Создадим в текущей директории файл с именем install_redis.sh и содержанием:

Sudo apt-get -q -y install redis-server

А в Vagrant-файл добавим команды для наполнения:

Vagrant::Config.run do |config| config.vm.box = "precise64" config.vm.provision:shell, :path => "install_redis.sh" end

Теперь переконфигурируем нашу машину командой:

$ vagrant reload

В результате на нашей виртуалке появится свежеустановленный редис.

Сетевые настройки

Конечно, одна из важнейших настроек виртуальной машины - конфигурация сетевых интерфейсов. За сетевые настройки отвечает параметр config.vm.network. Вагрант предлагает два варианта на выбор: работа в сети, ограниченной хост-машиной, и подключение через сетевой мост.

В первом случае мы явно задаем IP машины, а также можем опционально указать маску сети (по умолчанию используется 255.255.255.0). В таком случае конфиг приобретает вид:

Vagrant::Config.run do |config| config.vm.box = "precise64" config.vm.provision:shell, :path => "install_redis.sh" end

Во втором случае машина получает IP по DHCP и становится полноценным членом сети, в которой расположена и хост-машина. Если на хост-машине присутствует несколько сетевых интерфейсов, то мы можем указать, который именно использовать для моста. Для вывода списка имен сетевых интерфейсов воспользуемся командой:

~$ VBoxManage list bridgedifs | grep ^Name Name:en1: Wi-Fi (AirPort) Name:en0: Ethernet Name:p2p0

И, соответственно, конфигурация примет вид:

Vagrant::Config.run do |config| config.vm.box = "precise64" config.vm.provision:shell, :path => "install_redis.sh" config.vm.network:bridged, :bridge => "en1: Wi-Fi (AirPort)" end

Кроме того, Vagrant позволяет также пробрасывать порты. Вот, например, такой Vagrantfile позволяет пробрасывать с 6379-го порта гостевой машины, на который по умолчанию вешается редис, на 8765-й на хост-машине.

Vagrant::Config.run do |config| config.vm.box = "precise64" config.vm.provision:shell, :path => "install_redis.sh" config.vm.forward_port 6379, 8765 end

Какой вариант лучше - выбор за тобой, но в любом случае наша виртуалка уже вполне может выполнять роль сервера базы данных, на который можно зайти либо с хост-машины, либо с другой виртуалки.


Несколько виртуальных машин

Кстати, в одном Vagrant-файле можно объявить сразу несколько виртуальных машин с различными настройками. Как? Я думаю, следующий пример скажет сам за себя:

Vagrant::Config.run do |config| config.vm.define:web do |web_config| web_config.vm.box = "web" web_config.vm.forward_port 80, 8080 end config.vm.define:db do |db_config| db_config.vm.box = "db" db_config.vm.forward_port 3306, 3306 end end

Более того, запускать и пересоздавать виртуалки можно по отдельности, добавляя имя машины после соответствующей команды:

$ vagrant up web $ vagrant reload db

Общие папки

Еще одна интересная особенность VirtualBox - общие папки, дающие возможность легко обмениваться файлами между гостевой и хост-машинами. Разумеется, Vagrant предоставляет удобный способ настройки данной опции. Все, что нужно, - это немного поправить конфигурационный файл:

Vagrant::Config.run do |config| config.vm.share_folder "data", "/data", "data" end

Важно заметить также, что папки, использующие протокол NFS (Network File System), показывают лучшую производительность, нежели общие папки виртуалбокса. С другой стороны, NFS не поддерживается на хостах с Windows. Для того чтобы использовать NFS вместо VirtualBox shared folders, необходимо это явно указать в настройках:

Vagrant::Config.run do |config| config.vm.share_folder("data", "/data", "data", :nfs => true) end

Снэпшоты и песочница

Поскольку Vagrant предоставляет гибкий API для расширения своего функционала, неудивительно, что существует немалое количество плагинов для Vagrant, решающих самые различные задачи. На случай, если у тебя появятся новые идеи, какие новые возможности можно добавить в вагрант, - в документации есть специальный раздел, содержащий все необходимые настройки и примеры (bit.ly/126iIsM).

Sahara

Плагин представляет собой песочницу для виртуальных машин: если что-то поломалось, можно легко и просто откатить до последнего снэпшота. Плагин является руби-гемом (что вполне ожидаемо) и называется sahara . После его установки в вагранте появляется дополнительная команда - vagrant sandbox. Типичный пример использования выглядит так. Включаем режим песочницы:

$ vagrant sandbox on

Производим определенные действия (работаем с файлами, меняем настройки и прочее):

$ vagrant ssh

Если результат работы нас удовлетворил - сохраняем изменения:

$ vagrant sandbox commit

В противном случае откатываем неугодные правки:

$ vagrant sandbox rollback

И выходим из режима песочницы:

$ vagrant sandbox off

Создание базовых сборок

Несмотря на то что сообщество уже позаботилось о наиболее распространенных образах операционных систем, тебе вполне может понадобиться иметь свою особенную сборку. Из соображений безопасности (а вдруг хакер Вася добавил свою магию в одну из сборок, лежащих в Сети), необходимости каких-то особенных настроек или просто из интереса - неважно, главное, что такая возможность есть. И здесь нам поможет гем veewee , созданный специально для этих целей. Для начала установим его:

$ gem install veewee

Репозиторий veewee содержит большое количество шаблонов. Выберем интересующий нас - пусть это будет последняя версия Ubuntu Server. Теперь создадим новую базовую сборку на основе этого шаблона:

$ veewee vbox define myubuntubox "ubuntu-12.10-server-i386"

В результате у нас появится новое «определение» бейс-бокса. В папке definitions/myubuntubox содержатся файлы, описывающие нашу виртуальную машину:

Definition.rb, - postinstall.sh, - preseed.cfg.

Немного поправим конфигурацию виртуалки:

Veewee::Session.declare({ :cpu_count => "1", :memory_size=> "1024", :disk_size => "10140", :disk_format => "VDI", :hostiocache => "off", :os_type_id => "Ubuntu", :iso_file => "ubuntu-12.10-server-i386.iso", :iso_src => "http://releases.ubuntu.com/12.10/ubuntu-12.10-server-i386.iso", :iso_md5 => "b3d4d4edfc8f291af0b83f8a2ba19a2f", :iso_download_timeout => "1000", :boot_wait => "4", :boot_cmd_sequence => [ "", "/install/vmlinuz noapic preseed/url=http://%IP%:%PORT%/preseed.cfg ", "debian-installer=en_US auto locale=en_US kbd-chooser/method=us ", "hostname=%NAME% ", "fb=false debconf/frontend=noninteractive ", "keyboard-configuration/modelcode=SKIP keyboard-configuration/layout=us keyboard-configuration/variant=us console-setup/ask_detect=false ", "initrd=/install/initrd.gz -- " ], :kickstart_port => "7122", :kickstart_timeout => "10000", :kickstart_file => "preseed.cfg", :ssh_login_timeout => "10000", :ssh_user => "vagrant", :ssh_password => "vagrant", :ssh_key => "", :ssh_host_port => "7222", :ssh_guest_port => "22", :sudo_cmd => "echo "%p"|sudo -S sh "%f"", :shutdown_cmd => "shutdown -P now", :postinstall_files => [ "postinstall.sh"], :postinstall_timeout => "10000" })

Теперь запустим сборку командой

$ veewee vbox build myubuntubox

Veewee задумается на время, пока будет создавать виртуальную машину, скачивать ISO-образ операционной системы, а также устанавливать и настраивать ее. После того как команда закончит работу, проверим созданную виртуалку командой

$ veewee vbox validate myubuntubox

$ vagrant basebox export myubuntubox

Ну вот, собственно, и все. Теперь, чтобы использовать нашу базовую сборку, вызовем уже знакомые команды. Добавим бокс в список:

$ vagrant box add myubuntubox myubuntubox.box

И создадим новую виртуальную машину на основе уже созданной:

$ vagrant init myubuntubox

Вот и все - теперь даже самые рьяные параноики не смогут нас осудить, ведь теперь весь техпроцесс создания виртуальной среды контролируется нами же.

Заключение

Удобная среда разработки позволяет больше сконцентрироваться на решаемой проблеме, а не на вопросах совместимости ПО или различиях операционных систем, и это главная фишка Vagrant. С ним можно избавиться от проблем, когда на машине разработчика все работает, а на продакшене почему-то нет. Разумеется, на данный момент несколько смущает его сильная руби-ориентированность, но будем надеяться, что со временем разработчики решат и эту проблему, расширив, например, список провизоров на Python или Java. И кстати, в настоящее время идет работа по добавлению других систем виртуализации, кроме VirtualBox.

В любом случае, уже сейчас проект представляет большой интерес как для отдельных разработчиков, так и для групп разработки. Удачи и новых познаний!

И о том, чем он может быть полезен для веб-разработчика.

Каждый разработчик сталкивается с необходимостью настройки на своем компьютере окружения, необходимого для запуска веб-приложений, над которыми он работает. В состав окружения могут входить, например: PHP, MySQL, nginx, а также другие СУБД, веб-сервера и т. д.

Есть разные способы управления окружениями: кто-то вручную устанавливает и настраивает в системе по отдельности каждый из необходимых компонентов, кто-то использует готовые наборы (например XAMPP, Open Server в Windows или lamp-server в Linux), но у этих подходов есть несколько недостатков, главный из которых заключается в трудности поддержки разных окружений для разных проектов. Нередко возникают ситуации, когда, например, разные проекты работают с разными версиями PHP, или им нужны разные настройки php.ini, или разные веб-сервера и т. д. В таких случаях управление окружениями становится довольно трудоемкой задачей, решить которую человеку, не имеющему квалификации сисадмина, бывает весьма непросто. В добавок - операционная система компьютера “обрастает” большим количеством разного софта, который зачастую нужен только для того, чтобы запустить локально какое-то одно веб-приложение.

Я пользуюсь Vagrant для управления окружениями, и вот почему:

  • Vagrant использует виртуализацию, а это в свою очередь дает следующие преимущества:
    • Для каждого проекта разворачивается индивидуальное окружение со своей версией PHP, своими настройками php.ini, веб-сервером и т. д., то есть - полностью изолированная виртуальная машина.
    • Операционная система компьютера не “засоряется” различным программным обеспечением, которое, по большому счету, в ней не нужно.
  • Vagrant на лету синхронизирует каталог проекта с каталогом внутри виртуальной машины. Не нужно заботиться об обновлении версий файлов внутри нее. Все происходит автоматически и мгновенно.
  • Управление окружением производится с помощью минимального набора простых команд. В самом простом случае работа с Vagrant сводится к двум командам: vagrant up (запуск) и vagrant halt (остановка).

Vagrant является оберткой над ПО виртуализации и средствами управления конфигурациями, и предоставляет способ легко и быстро всем этим управлять.

Установка и настройка

Рассмотрим по шагам процесс установки Vagrant, а также развернем для примера готовый образ (или, как принято говорить в терминологии Vagrant - бокс), содержащий предустановленное программное обеспечение, необходимое для веб-разработки, в том числе LAMP-стек, и запустим в получившимся окружении веб-приложение (возьмем для примера ).

Я использую Linux Mint, которая основана на Ubuntu, поэтому все описанные манипуляции применимы в этих ОС. К сожалению, я не знаю точно, насколько стабильно все будет работать в Windows, однако все описанное ПО имеет версии для Windows, поэтому, надо полагать, там тоже все должно работать.

Итак, поехали.

Установка VirtualBox

Так как Vagrant оперирует виртуальными машинами, то ему для работы необходимо ПО виртуализации. Установим VirtualBox, который является широко распространенным, удобным и простым в использовании примером такого ПО. Для установки следуйте инструкциям со страницы: https://www.virtualbox.org/wiki/Linux_Downloads

Установка Vagrant

Затем установим сам Vagrant.

Для установки выполните:

$ sudo apt-get install vagrant

Или скачайте и установите последнюю версию отсюда: https://www.vagrantup.com/downloads.html

Установка плагинов Vagrant

Плагин vbguest нужен на тот случай, когда версии VirtualBox Guest Additions внутри виртуальной машины и на вашем компьютере различаются, этот плагин сам в автоматическом режиме разрешит данную проблему. Для установки выполним:

$ vagrant plugin install vagrant-vbguest

Плагин hostmanager нужен для того, чтобы Vagrant мог управлять именами хостов для виртуальных машин. Установим его:

$ vagrant plugin install vagrant-hostmanager

Загрузка файла конфигурации для Vagrant

Как уже говорилось выше, мы будем разворачивать уже готовое сконфигурированное окружение - . В репозитории Scotch Box находится конфигурационный файл Vagrantfile , который содержит необходимую Vagrant информацию для развертывания и запуска окружения. Скачаем репозиторий:

$ git clone https://github.com/scotch-io/scotch-box.git

Развертывание и запуск окружения

Для того, чтобы Vagrant развернул и запустил окружение, необходимо выполнить в каталоге проекта, то есть там, где находится файл Vagrantfile , единственную команду - vagrant up .

Перейдем в каталог, куда мы скачали репозиторий Scotch Box и сделаем это.

$ cd scotch-box $ vagrant up

Это на самом деле все, что нужно сделать. Первый запуск обычно занимает довольно длительное время, так как Vagrant должен скачать и развернуть образ виртуальной машины, разрешить конфликт версий VirtualBox Guest Additions, если он есть, а также установить, при необходимости, различное программное обеспечение внутри виртуальной машины. Второй и последующие запуски будут осуществляться за считанные секунды.

Scotch Box по умолчанию использует адрес http://192.168.33.10 . После того, как выполнится команда vagrant up , перейдите в своем браузере по этому адресу и убедитесь, что все работает.

Если вы хотите остановить виртуальную машину, выполните команду vagrant halt .

Если вы пользуетесь режимом гибернации, то перед тем, как переводить в него компьютер, рекомендуется выполнить для запущенного окружения команду vagrant suspend , так как в противном случае ОС может “зависнуть” при переходе в гибернацию. После выхода из режима гибернации запустите окружение, снова выполнив vagrant up .

Если открыть GUI Virtual Box, то можно увидеть, что Vagrant создал для вас обычную виртуальную машину. Ничего не мешает вам управлять ей как любой другой виртуальной машиной, используя средства Virtual Box.

Демонстрация работы

Как и говорилось выше, продемонстрируем работу окружения на примере .

Скачайте последнюю версию WordPress и распакуйте ее в каталог scotch-box/public, котрый в Scotch Box является корневым каталогом веб-сервера. Не забудьте перед распаковкой удалить файл index.php из каталога public.

Теперь перейдите по адресу http://192.168.33.10 , вы должны увидеть первый шаг установки WordPress:

Обратите внимание на то, что все изменения файловой системы внутри каталога public мгновенно перенеслись внутрь виртуальной машины без необходимости производить какие-либо дополнительные манипуляции. Все работает прозрачно - так, будто никакой виртуальной машины нет вообще: вы меняете файлы, открываете url в браузере и наблюдаете изменения.

На шаге, посвященном настройке соединения с базой данных, укажите параметры, описанные на сайте

После завершения всех шагов, вы получите установленный экземпляр WordPress внутри вашей виртуальной машины.

Работайте над проектом как обычно, например откройте каталог проекта в IDE и ведите разработку там.

Следует упомянуть, что в том случае, если вы используете PhpStorm, вас ждет приятный сюрприз в виде поддержки Vagrant внутри IDE. Откройте в главном меню “Tools” -> “Vagrant”. Вы можете управлять окружением для проекта прямо из PhpStorm, не заходя в командную строку.

Что дальше?

Рассмотренный пример - это наиболее простой из возможных вариантов использования Vagrant. На самом деле Vagrant - это гибкий и мощный инструмент, который позволяет очень тонко настраивать необходимое окружение.

Scotch Box устроен таким образом, что сам образ виртуальной машины содержит все необходимое предустановленное ПО. Более распространен такой сценарий использования Vagrant, когда берется чистый образ системы и, с помощью конфигов, описывается: что необходимо установить туда и как все это настроить.

Laravel .

Спасибо за внимание!

Итак, в прошлый раз я рассмотрел что такое Vagrant и чем он может быть нам полезен. Однако для тех, кто никогда с ним не работал, все эти команды, какой-то файл настроек… Короче покажется все это ересью. Поэтому, в дополнение к предыдущему посту по Vagrant, я как бы хочу добавить несколько комментариев, пояснить отдельные вопросы.

Важно понимать, что эта статья НЕ является заменой офф документации. Vagrant как и любой другой проект развивается, поэтому изложенная тут информация уже через месяц может быть не актуальной. Например, при переходе от версии 1.4 к 1.5 у них сменился синтаксис ряда команд (как тот же vagrant add box ), поэтому в первую очередь черпайте актуальную информацию вот отсюда , я же лишь поясню некоторые детали.

Boxes

Они же шаблоны для построения Ваших стендов. Основная информация в д Я же приведу сухую выдержку по эксплуатации и немного приподниму капот их устройства)

Итак, что есть бокс — это специальный пакет для Vagrant который притаскивает внутри себя уже подготовленный км то (установленный и пред настроенный) экземпляр виртуальной машины. Как Я уже ранее писал, основным репозиторием боксов является облачный ресурс создателей vagrant: https://app.vagrantup.com/boxes/search . Нужно сказать пару слов про пространства имен (name spaces) в облаке Vagrant. Обычно название бокса идет в виде «name space / box name», где вторая часть- название бокса, которое обычно сообщает нам что за сборка (например trusty64 — 64 битная Ubuntu 14.04), а первая часть — кто выложил сборку. Например:

  • hashicorp — сборки от создателей Vagrant
  • ubuntu — сборки боксов от компании Canonical со своей ОС

Таким образом мы можем использовать бокс с Ubuntu как от ее разработчиков, так и от разработчиков Vagrant. В чем же тогда разница? Ну во первых — это «свежесть» образа. Крайняя справа колонка показывает, как давно был релизнут / обновлен образ. Во вторых — средняя колонка, содержащая информацию о том, для каких средств виртуализации подойдет этот бокс (Virtualbox, vmware, aws и т.д.)

Помои этого, создатели vagrant рекомендуют обратить внимание на боксы от проекта Bento . Мол боксы hashicorp сделаны с упором на VMware и VirtualBox, они включают в себя самые минимальные образы той же Ubuntu, а у Bento можно найти например боксы для Paralels. Ну так, короче разнообразие не помешает.

Основной инструмент работы с боксами (барабанная дробь) — утилита vagrant box !

Какие ее опции нам нужно освоить для начала:

  • vagrant box add — добавить бокс в Ваш локальный список доступных шаблонов. По сути происходит скачивание указанного бокса к Вам на компьютер, после чего он доступен для использования
  • vagrant box list — посмотреть список всех боксов на вашей машине, включая информацию об их версиях
  • vagrant box remove — удалить бокс
  • vagrant box update — обновить бокс

У каждой команды есть свой набор опций, который можно посмотреть либо в онлайн документации, либо через опцию -h в самой команде

Давайте рассмотрим пример — я хочу узнать сколько и какие образы у меня есть, а заодно почистить старые/не нужные и т.д. Сказано- сделано:

Итак, я дал команду обновить все имеющиеся у меня боксы, после чего опция Lixt показала, что прилетело обновление для Xenial64. Держать старый бокс я не хочу, поэтому даю команду его удалить. Удаление завершается с ошибкой, потому что у меня два бокса с этим именем и программа просит уточнить, какую версию бокса я хочу удалить. После чего все происходит как надо. Так же, для удаления старый образов есть команда vagrant box prune .

Добавление образа происходит довольно просто — вы даете команду vagrant box add, в качестве параметра указывая имя бокса с его name space, либо (если бокс выложен не в облаке Vagrant) — url на его местонахождение:

Не плохо было бы знать, что на самом деле представляют из себя эти боксы. Взглянем!

В Linux (Ubuntu в частности), в Вашем домашнем каталоге создается скрытый каталог «.vagrant.d/», в котором и хранятся боксы:

Что мы там видим:

  1. box.ovf — информация о конфигурации VM, выгружаемая (например с помощью Virtualbox при создании-экспорте) в т.н. Open Virtualization Format.
  2. *name*.vmdk — файл-диск, содержащий образ установленной ОС в формате vmware.
  3. metadata.json — файл в формате JSON, содержащий описание, под какой провайдер виртуализации предназначается данный бокс. Скорее всего, его содержимое будет: {«provider»: «virtualbox»} , что говорит о том, что бокс создан только для использования с помощью Virtualbox
  4. Vagrantfile — файл vagrant с базовым описанием среды, создаваемой при развертывании бокса.

На этом с основами по боксам все, если что-то еще будет появляться- постараюсь обновлять этот раздел статьи.

Vagrantfile

Итак, этот файл — центральная часть всей Вашей инфраструктуры, Вашей работы с Vagrant. По сути, «проект в Vagrant» = Vagrntfile и наоборот, Vagrntfile = «проект в Vagrant». Файл содержит детальное (на столько, на сколько Вам это нужно) описание виртуальных машин, используемых в вашем проекте. Да, да, как мы увидели в прошлый раз, Vagrantfile может содержать описание более чем одной ВМ. Основную информацию по . Я опять же, сконцентрируюсь на основных моментах.

Никто не мешает создать Вам этот файл вручную. Однако, для этих целей существует команда vagrant ini t, которая, будучи запущенной в предназначенном для проекта каталоге, создаст Vagrantfile с некоторым стандартным содержимым и примерами использования, например:

Если очистить файл от комментариев, получится примерно следующее:

По сути, очень минималистичная заготовка. Если же воспользоваться vagrant init ubuntu/xenial64 ,т.е.. с указанием целевого бокса, то получим следующее содержимое:

Содержимое не сильно отличается, но мы видим что выбрано использование определенного бокса- шаблона. Весь набор доступных опций для конфигурации vagrantfile, можно найти в соответствующем разделе документации . Я же разберу продемонстрированный ранее пример. Еще раз приведу его в качестве образца, чтобы потом разобрать по пунктам:

Давайте теперь возьмем за основу первую часть конфигурационного файла. Я визуально разбил его на 4 цветовых секции — красную, оранжевую, зеленую и синюю:

Каждая секция начинается ключевым выражением config.* и заканчивается ключевым словом end. Табуляция не обязательна, но я применяю ее для облегчения понимания структуры файла.

Красным цветом выделен «глобальный» заголовок — это опции, которые применяются для всего проекта. Если хотите, любую из них можно переопределить на уровне конфигурации конкретной виртуальной машины. Например Вы можете задать, что бокс по умолчанию у Вас — Ubuntu сервер (как и тут — указано config.vm.box = «ubuntu/xenial64» ), но в какой-то машине Вы хотите Centos или redhat или Debian. Тогда VM, у которых ничего не указано в опции config.vm.box , будут использовать ubuntu/xenial64, аVM у которых есть своя опция используемого бокса, будут использовать нечто отличное.

Далее, оранжевым цветом выделена секция, отвечающая за идентификацю VM — т.е. задание ее отображаемого имени (имени хоста в настройках ОС — в данном случае *.vm.hostname = «web-server» ), тип и адрес сетевого адаптера, название используемого бокса (если не хотим использовать определенный ранее в глобальном контексте).

Зеленым цветом выделена секция, отвечающая за настройку виртуального провайдера- указывается его тип, имя, которое будет отображаться в его интерфейсе, число ядер и объем оперативной памяти VM.

И наконец синим цветом выделена секция исполняемых при запуске гостевой ОС команд. С т.з. структуры Vagrant файла, она состоит из одной опции и относится к оранжевой секции, но с идеологической т.з. я решил выделить ее отдельно. Vagrant может сам,при создании и запуске VM выполнить ряд произвольных команд, тем самым автоматизируя Ваши действия по первичной конфигурации машины, снимая с Вас рутинные задачи. Все, что находится между ключевыми словами SHELL будет выполнено от имени root в командной строке гостевой ОС.

Подключение папок и доступ по SSH

Этой автоматизацией развертывания VM, достоинства Vagrant не ограничиваются! Во первых, после создания VM командой vagrant up, Вы можете автоматически подключиться к ней по ssh со своей основной машины командой vagrant ssh *machive name* — не нужно ни адресов, ни логинов, ни паролей! Более того, запуск командной оболочки под правами root так же происходит без какого либо подтверждения паролем (на самом деле тут нет никакой магии, Vagrant просто подготавливает авторизацию по ключам ssh).

Еще одним приятным нюансом (как для разработчика, так и для администратора), является тот факт, что при запуске VM, папка проекта автоматически монтируется в директорию /vargrant/ (в корне фс гостевой ос). Таким образом, если Вы хотите проверить свой код или скрипты, нет необходимости править их на своей машине, потом переносить в вм и там запускать — просто поместите их в папку проекта и они сразу окажутся в пространстве файловой системы гостевой ос. При этом Вы сможете легко и удобно продолжать работу с ними из своей основной ОС. Подробней про опцию с подключением каталогов (например подключить другой каталог или сразу несколько), можно так же прочесть в документации Vagrant.

На сегодня на этом все, жду Ваших вопросов!

Tagged ,

Преамбула

Данная мини-статья является отсылкой к созданию более правильного окружения для разработки.

В современном мире WEB-разработки, разработчики уже давно перестали устанавливать окружение для разработки: PHP, WEB-сервер, СУБД и т.д. на свой локальный компьютер, на котором производят разработку.

Во-первых, установка и настройка занимает драгоценное время и силы.

Во-вторых, если разработчик работает на нескольких компьютерах (компьютер в офисе, дома, ноутбук), то достаточно проблематично настроить идентичное окружение везде и синхронизировать его настройку между всеми своими компьютерами. Эта проблема называется проблемой идентичности состояния, когда предполагается, что состав, версии и конфигурация всего ПО должна быть максимально идентичной.

В-третьих, если вы не один разработчик, то еще тяжелее поддерживать идентичность окружения на всех ваших компьютерах и на всех компьютерах ваших коллег. Здесь поддержать идентичное состояние еще сложней, так как от вас уже почти ничего не зависит.

В четвертых, состояние окружения вашего рабочего компьютера скорее всего не совпадает и не может совпадать с состоянием окружения вашего боевого (продакшн) сервера. Ведь у вас же Windows со всеми его причудами в конфигурировании, а на боевом сервере что-то однозначно другое.

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

Избежать этого хаоса вам поможет виртуализация окружения разработки. Вам нужна виртуальная машина, которая бы разворачивалась по заданному вами сценарию, чтобы ее можно было развернуть одним кликом на любом компьютере под любой операционной системой. Пока вы будете пить кофе, ваша виртуальная машина будет готова. Также вам нужны какие-то средства для быстрого и простого управления такой виртуальной машиной (запуск, остановка, реконфигурация).

Также вам необходимо, чтобы ваш рабочий каталог с проектом отражался на каталог внутри виртуальной машины. Например, чтобы каталог локальной машины D:\myProjects, где хранятся ваши проекты, соответствовал каталогу виртуальной машины /var/myProjects или подобному.

Еще хотелось бы иметь возможность полноценно выполнять отладку с использованием PHP-Xdebug, причем приложение должно выполняться в виртуальной среде, на виртуальной машине, а управлять им вы могли с локальной. Уже нравится? Идем дальше!

Vagrant

Всего этого и много чего еще можно добиться используя виртуализацию с использованием Vagrant . О Vagrant в интернете написано очень много. Смысла дублировать здесь никакого нет, иначе статья будет не мини, как обещалось в начале, а макси.

Скажу лишь несколько слов. Vagrant - это специальный набор скриптов, которые работают с гипервизорами (виртуальными машинами), такими как vmWare, VirtualBox, Parallels и другими, для упрощения взаимодействия с этими виртуальными машинами.

Для Vagrant существуют готовые образы операционных систем, называемых «коробками » (boxes). Коробка — это, по сути, просто образ уже установленной и настроенной операционной системы, на основании которого строится виртуальная машина. Часто авторы коробок собирают их для поддержки в разных гипервизорах (приложениях для работы с виртуальными машинами). Мне по душе гипервизор VirtualBox, потому что я начал работать с Vagrant еще тогда, когда поддерживался только он, да и до сих пор больше всего коробок выпускаются именно под VirtualBox. Сейчас же вы можете выбрать гипервизор на свой вкус, главное, чтобы он поддерживался той коробкой, которую вы собираетесь использовать.

Использование Vagrant решает проблему идентичности состояния окружения разработки, не зависимо от операционной системы на хост-машине (так называется ваш локальный компьютер, за которым вы работаете). Гостевая операционная система, выполняемая на виртуальной машине, всегда будет одна и также. К сожалению, Vagrant рассчитан только на обеспечения идентичности состояния при разработке . На сервер невозможно установить Vagrant (точнее, конечно, возможно, но лучше этого не делать), так как виртуализация с использованием Vagrant работает на уровне виртуальной машины, что, очевидно, не подходит для продакшена. Зато Vagrant совершенно одинаково работает под разными операционными системами. Если члены вашей команды предпочитают разные ОС или работают над проектом из разных мест, где могут использоваться разные ОС.

Виртуальная машина, управляемая Vagrant-ом, представляет собой полноценный виртуальный сервер, на котором установлена операционная система и весь необходимый набор приложений и служб.

Стоит сказать, что помимо виртуализации целиком всей операционной системы, вместе со всеми приложениями и службами, также существует решение контейнеризации отдельных служб прямо на локальном компьютере.

Правда полноценно контейнеризация работает только в операционной системе Linux, на остальных же операционных системах для запуска контейнеризации используются виртуальные машины, что делает использование контейнеризации не таким удобным инструментом. Но при использовании контейнеризации мы получаем возможность повторить идентичность состояния в том числе и на сервере в продакшене, что в некоторых проектах может быть очень важно.

Одним из самых распространенных и популярных способов работы с контейнерами в Linux является приложение Docker, о котором я напишу в другой статье. А пока что вернемся к виртуализации с использованием Vagrant.

Чтобы развернуть коробку в виртуальную машину, нужен файл конфигурации, в котором описаны все параметры развертывания. Такой файл называется Vagrantfile и написан он с применением синтаксиса Ruby (на котором и написан Vagrant). Я не стану заставлять вас писать такой файл вручную. Чаще всего вы можете найти уже готовый файл в описании установки вашей коробки, в который нужно внести руками лишь некоторые изменения. Но все это индивидуально для каждой коробке. В любом случае Вы найдете инструкции по развертыванию виртуальной машины на ее основе в инструкциях к ней. На всякий случай еще раз повторю ссылку на хранилище коробок .

Как установить и попробовать

Устанавливаем

Для начала вам необходимо установить гипервизор и затем установить сам Vagrant. Чтобы виртуальные машины могли выполняться, необходимо, чтобы ваш процессор поддерживал виртуализацию и она была обязательно включена в BIOS.

Давайте для начала, чтобы уж точно всё получилось, остановимся на гипервизоре VirtualBox . Это замечательный бесплатный гипервизор от Oracle, который очень быстро и просто устанавливается и сразу же работает без танцев с бубном.

Перед тем как начать установку, убедитесь, что путь к вашей домашней папки, а также путь к файлам ваших проектов не содержат кириллических символов. Если всё же кириллические символы есть, то нужно создать два каталога, например D:\VagrantHome и D:\VirtualBoxMachines. В первом будут находиться файлы Vagrant, а во втором файлы виртуальных машин VirtualBox. Теперь создайте переменную окружения с именем VAGRANT_HOME и значением D:\VagrantHome. Перезагрузитесь.

Теперь можно скачать и установить VirtualBox . После установки откройте окно приложения и перейдите в Файл-Настройки-Общие. Если вы создавали каталог, подобный D:\VirtualBoxMachines, то укажите путь к нему здесь, где «Папка для машин по умолчанию». После этого окно приложения можно закрыть.

Теперь перейдем к установке Vagrant . Скачайте и установите в тот каталог, который предлагается по умолчанию. Раньше была проблема, если указать другой каталог, правда это было 2 года назад, но тем не менее страх остался. Перезагрузитесь, как того требует установщик.

Последнее, что пригодится - это git . Это клиент, необходимый для работы с системой контроля версий git. Если вы еще не знакомы с этим, обязательно ознакомьтесь , зачем это и для чего. Вам понравится.

Во время установки будьте осторожны. Раз уж мы с вами разрабатываем на PHP, то наши файлы не зависимо от операционной системы должны иметь окончания строк вида \n или LF . Это значит, что нам не нужно автоматически преобразовывать концы строк в файлах нашего исходного кода. Поэтому во время установки git, когда будет предложено выбрать, как обрабатывать окончания строк на экране установки «Configuring the line ending conversions», выбирайте второй вариант «Checkout as-is, commit Unix-style line endings.» и git не будет изменять окончания строк в \r\n , как это принято для разработки в других языках программирования.

Описанные процедуры были больше для Windows, однако вы можете точно так же установить VirtualBox и Vagrant в других операционных системах. Смысл тот же.

Разбираемся в коробках

Вы можете воспользоваться различными коробками, например, поставляемыми с фреймворками или рекомендуемыми к использованию ими же.

Одна виртуальная машина на один проект

Если Вы разрабатываете (или только хоттите начать разрабатывать) на фреймворке Yii2 , то шаблоны приложений (базовый и расширенный) уже содержат файл конфигурации Vagrantfile , который использует коробку bento/ubuntu-16.04 . Вся конфигурация: развертывание (provision), конфигурация nginx и конфигурация самой виртуальной машины описаны в различных файлах, находящихся в каталоге vagrant в корне приложения.

Если Вы внимательно изучите Vagrantfile, то найдете там места, в которых подключаются эти конфигурационные файлы. В данном случае, на одно приложение создается отдельная виртуальная машина, что очень удобно, если необходимо сохранить целостность окружения разработки между всеми вашими машинами и машинами ваших коллег.

В файле Vagrantfile вы найдете параметр config.vm.synced_folder , который указывает каталоги для отображения (синхронизации). В данном случае, текущий каталог хост-машины (вашего компьютера) отображается на каталог /app на виртуальной. Все файлы, которые находятся у вас в текущем каталоге, также незамедлительно доступны на виртуальной машине в каталоге /app.

Если в Вашем проекте появляется необходимость в использовании нового расширения PHP, либо в какой-то другой зависимости, то вам достаточно добавить ее в файл vagrant/provision/once-as-root.sh, который представляет собой сценарий установки и настройки виртуальной машины. Как только Вы это сделаете и отправите измененный файл в репозиторий - ваши коллеги получат все эти изменения и введя всего одну команду перенастроят свои виртуальные машины. Таким образом вам не придется рассказывать и запоминать что куда установить и как настроить - все сохранено в сценариях автоматического развертывания виртуальной машины.

Одна виртуальная машина на все проекты

Еще один способ использования виртуализации - использовать одну виртуальную машину для всех ваших проектов. Именно такой подход применен в отдельной виртуальной машине от авторов Laravel, которая называется Homestead . Стоит отметить, что Homestead также может быть развернута в качестве виртуальной машины для одного проекта, подобно описанному выше варианту, но мы ниже рассмотрим именно вариант использования одной машины для всех проектов. Как запустить Homestead для одного проекта, .

В данном случае, файлы конфигурации виртуальной машины не принадлежат какому-то одному проекту, а хранятся отдельно. Основная конфигурация вынесена вообще в домашний каталог пользователя. С одной стороны это неудобно, так как теряется удобная синхронизация настроек виртуальной машины между рабочими станциями, но с другой стороны у вас всего одна виртуальная машина, которая идеально настроена изначально «из коробки» и имеет очень простой, гибкий и очень мощный способ конфигурирования.

Чтобы воспользоваться данной коробкой, вам необходимо загрузить файлы из репозитория и создать пару RSA-ключей (открытый и закрытый). Как это сделать описано .

Другие

Есть еще множество готовых наборов конфигураций для различных коробок, чтобы разработчик не тратил время на самостоятельное конфигурирование. Каждый выбирает удобную для себя смесь возможностей.

Пробуем

Итак. VirtualBox и Vagrant у нас установлены. Теперь пришло время начать их использовать. Мы договорились, что будем использовать коробку Laravel/Homestead . Инструкция по ее развертыванию доступна . Ознакомьтесь обязательно с ней, так как она может содержать более актуальную информацию. Я же дальше опишу простые шаги.

Еще раз договоримся, что все наши проекты красиво лежат в каталоге D:\myProjects , разложенные по папочкам. Именно на этот каталог мы будем опираться далее. Вы же должны заменить его на свой.

Далее необходимо будет вводить команды в командную строку. Однако, я рекомендую использовать вместо привычной командной строки интерпретатор git-bash , который идет в комплекте с git под Windows. Запустите его и перейдите в каталог с проектами, выполнив команду

Cd /D/myProjects

(обратите внимание на слеши на путь с использованием буквы диска). Теперь необходимо сначала скачать саму коробку, а затем скачать с репозитория набор конфигурационных файлов развертывания для нее. Выполняем:

Vagrant box add laravel/homestead git clone https://github.com/laravel/homestead.git Homestead

Итак, коробка загружена, конфигурация тоже. Теперь необходимо запустить инициализацию этой конфигурации (скрипт просто скопирует файлы на свои места). Затем установим плагин, позволяющий автоматически управлять host-файлом на вашей локальной машине. Выполните (В примере указана ветка с версией 7.0.1 — актуальной на момент написания статьи. Вам же нужна самая последняя ветка):

Cd Homestead git checkout v7.0.1 ./init.sh vagrant plugin install vagrant-hostmanager

После этого в вашем домашнем каталоге должен появиться каталог.homestead, содержащий файл Homestead.yaml - это конфигурационный файл в формате YAML, который вы должны открыть любым редактором кода и отредактировать. Давайте посмотрим, что там внутри. Я покажу уже отредактированный файл, который использую я в тестовой конфигурации. Вы же можете обратиться к документации по конфигурированию Homestead для более подробной информации.

Ip: "192.168.22.2" memory: 2048 cpus: 2 provider: virtualbox folders: - map: d:\myProjects to: /home/vagrant/www sites: - map: hmvc.app to: /home/vagrant/www/hmvc/public - map: yiibasic.app to: /home/vagrant/www/yii2basic/web databases: - homestead

Здесь видно, что IP адрес виртуальной машины 192.168.22.2, ей выделено 2 Гб ОЗУ и 2 ядра процессора. Провайдер (гипервизор) - VirtualBox.

Далее следует список каталогов локальной системы folders , отображаемых на каталоги виртуальной машины. У меня такой один — каталог d:\myProjects (указан в директиве map) отображается на каталог /home/vagrant/www (указан в директиве to) внутри виртуальной машины. То есть все файлы и каталоги внутри него будут автоматически доступны внутри виртуальной машины по указанному пути.

В самом низу примера — базы данных databases . Я использую одну базу данных с именем homestead.

У вас в файле ниже еще имеется другая информация, например информация о пробросе портов с локальной машины на виртуальную. При необходимости вы можете использовать эту возможность.

После того, как конфигурационный файл составлен, просто запускаем виртуальную машину. Возвращаемся в интерпретатор git-bash и, находясь в каталоге /D/myProjects/Homestead выполняем команду vagrant up .

Первый запуск этой команды приведет к развертыванию виртуальной машины из коробки и конфигурированию ее согласно файлам конфигурации. Чтобы остановить виртуальную машину, находясь в каталоге /D/myProjects/Homestead, выполните vagrant halt . Последующие запуски виртуальной машины будут происходить значительно быстрее, так как уже будет готовый образ виртуальной машины, развернутый из коробки и настроенный.

Если вы что либо меняете в файле конфигурации, то достаточно запустить развертывание принудительно, выполнив команду vagrant provision . Все изменения в конфигурации будут применены к текущей виртуальной машине.

Глобальный доступ для управления Homestead

Так как описанный способ использования виртуальной машины Homestead подразумевает глобальную установку для использования всеми проектами на локальной машине, то хотелось бы иметь возможность управления данной виртуальной машиной не из каталога d:\myProjects\Homestead, а из любого места.

Это очень легко настроить. Обратитесь к данному пункту документации , чтобы узнать как это сделать для разных операционных систем.

Заключение

Использование виртуальных машин в разработке WEB-приложений значительно экономит время и силы для настройки окружения и поддержания его в актуальном состоянии на нескольких рабочих станциях. Разработчик не тратит время на настройку веб-сервера под Windows, которая иногда требует шаманского опыта и не тратит нервы на устранение непрекращаемого потока ошибок. Особенно, если вы только что решили, что хотите начать заниматься разработкой, вам не стоит тратить нервы на развертывание окружения в Windows.

Разница в потребляемых ресурсах виртуальной машины и того варианта, если бы вы развернули окружение локально в Windows, стремится к нулю. Удобство от использования виртуальной машины стремится к максимуму. Дополнительным опытом при использовании такого способа разработки будет пассивное изучение нормальных операционных систем, вроде Debian или Ubuntu.

Манипуляции с виртуальными машинами производятся либо через командную строку, либо через нажимание кнопочек в IDE PhpStorm (в меню Tools-Vagrant). Основные команды управления:

vagrant up - запускает виртуальную машину. Если виртуальная машина еще не построена, то сначала строит ее (при необходимости скачивает образ коробки).

vagrant halt - останавливает виртуальную машину.

vagrant reload - перезагружает виртуальную машину.

vagrant ssh - открывает ssh соединение с виртуальной машиной.

vagrant provision - производит перепостроение виртуальной машины (например, если изменили файлы конфигурации).

Остальные команды можно узнать введя vagrant help .

Удачного использования!