MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
Начало работы с Vagrant
04.10.2015
12:15
Текстовые метки: Vagrant, VirtualBox, виртуализация
Раздел: Компьютер - Linux - Виртуализация и эмуляция - VirtualBox

Содержание

Начало

  • Где взять VirtualBox
  • Установка Vagrant

Ваше первое виртуальное окружение Vagrant

  • Преимущества от использования Vagrant
  • Преимущества для одного разработчика
  • Преимущества для команды разработчиков
  • Преимущества для компании

Настройка проекта

  • Vagrantfile
  • Настройка Vagrant проекта
  • Настройка Web-проекта

Образы виртуальных машин (Виртуальные боксы)

  • Получение базового образа виртуальной машины
  • Удаление виртуальных боксов
  • Настройка проета для использования нужного виртуального бокса
  • Проверка настройки

Настройка SSH

Обеспечение для виртуальных боксов (Provisioning)

Проброс портов (Port Forwarding)

Пакетирование (Packaging)

Остановка виртуальных боксов (Teardown)

  • Suspend - уход в спящий режим с сохранением текущего состояния системы
  • Halting - обычное завершение работы
  • Destroing - завершение работы с очисткой всех файлов бокса

Быстрая пересборка


Начало

Vagrant это менеджер ваших виртуальных окружений для разработки. Фактически он является надстройкой над программой VirtualBox от Oracle, и обеспечивает быстрое создание и настройку виртуальных машин. Созданные таким образом виртуальные машины - боксы (boxes) используются разработчиками web-приложений для построения необходимой среды разработки. Затем они могут быть упакваны в специальные контейнеры (боксы), для установки и использования другими разработчиками в команде.

Где взять VirtualBox

Vagrant полностью зависит от программы VirtualBox и использует ее для создания виртуальных образов. Основным назначением VirtualBox является полная виртуализация x86 оборудования. Это проект с открытым исходным кодом, который обеспечивает виртуализацию на профессиональном уровне и может быть использована как на серверах так и на десктопных компьютерах для построения виртуальных сред. VirtualBox доступен для Windows, Mac OS X, Linux и Solaris.

Вот ссылка на страницу загрузки VirtaulBox.

На текущий момент Vagrant поддерживает VirtualBox 4.0.x, 4.1.x и 4.2.x.


Установка Vagrant

Чтобы установить Vagrant, необходимо скачать соответствующий пакет или установщик с этой страницы загрузки и установить его, используя стандартную процедуру установки приложения на вашей системе. В операционных систмах Windows и Mac OS X после установки приложения будет доступна команда Vagrant из командной строки. На остальных систмах вам необходимо будет самим добавить этот путь /opt/vagrant/bin в переменную окружения PATH.

Если вы не нашли для вашей системы установщик Vagrant, то вы можете установить его используя RubyGems с помощью команды gem install vagrant. Но помните, что установка из пакетов или через установщик является наиболее предпочтительным способом установки приложения.


Ваше первое виртуальное окружение Vagrant

В командной строке набирите:

$ vagrant box add precise32-box http://files.vagrantup.com/precise32.box

$ vagrant init precise32-box

$ vagrant up

Эти команды необходимы для запуска виртуальной машины с помощью Vagrant. Учтите, что команды выше запускают полнофункциональную виртуальную машину на операционной системе Ubuntu 12.04LTS precise с объемом памяти по-умолчанию в 512Мб.


Преимущества от использования Vagrant

Многие Web-разрабочики используют виртуальное окружение для разработки своих Web-приложений. Все большую популярность сейчас набирают облачные сервисы для построения и развертывания виртуальных окружений для продакшена и разработки, начиная от EC2, Rackspace Cloud и заканчивая более специализированными как EngineYard и Heroku. Vagrant реализует схожие принципы при создания виртуальных машин для локальной разработки и тестирования ваших приложений на рабочем компьютере. Такая организация работы повышает гибкость и продуктивность как вас так и вашей команды при разработке web-приложений.

Для развертывания и настройки виртуальных окружений Vagrant использует достаточно зарекомендовавшие себя технологии виртуализации в лице VirtualBox от Oracle и технологии автоматицированного развертывания приложений от Chef и Puppet.


Преимущества для одного разработчика

Использование однотипного окружения разработки для разных проектов расчитанных для разных версий языков программирования и фреймворков зачастую очень трудная задача. Как быть, если один проект работает на PHP4, второй на PHP 5.2.x, а третий на PHP 5.3.x или 5.4.x и его необходимо тестировать в той версии языка на которую он расчитан?

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

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


Преимущества для команды разработчиков

Все участники команды в идеале должны иметь одинаковое окружение разработки: одинаковые версии, зависимости, настройки и т.д. ведь по идее команда работает над общими проектами. Но что если часть команды работает над проектом с одной версий базы данных, к примеру, MySQL, а другая часть - над проектом где используется PostgreSQL или MSSQL. Что если одному участнику команды нужно приступить к разработке другого проекта, у которого другая версия языка или базы данных и т.д. Вобщем, сплошная головная боль, приводящая к замедлению разработки и уменьшению эффективности команды.

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


Преимущества для компании

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


Настройка проекта

После того как вы установили Vagrant на свою систему, все его управление осуществляется через команду vagrant. У этой команды есть множество необходимых подкомманд, например, vagrant up - для запуска виртуальной машины, vagrant ssh - для подключения по ssh, vagrant package- для создания пакета текущего виртуального окружения готового к развертыанию на другом компьютере и т.д. Чтобы просмотреть все доступные команды, просто наберите в командной строке команду vagrant.

Vagrantfile

Vagrantfile для Vagrant как Makefile для Make. Vagrantfile располагается в корне каждого Vagrant проекта и используется для настройки поведения самого Vagrant и виртуальных машин созданных с помощью него. Пример содержимого этого файла приведен ниже:

Vagrant::Config.run do |config|

# Setup the box

config.vm.box = "my_box"

end

Как вы видите, содержимое файла это код на языке Ruby.

Настройка Vagrant проекта

Первым шагом для любого проекта Vagrant является создание корневой директории проекта и инициализация проекта:

$ mkdir my_vagrant_project

$ cd my_vagrant_project

$ vagrant init

команда vagrant init создаст файл Vagrantfile. Пока мы оставим этот файл как есть, но далее мы будем его редактировать для настройки виртуальной машины нашего проекта.

Настройка Web-проекта

Теперь когда Vagrant настроен, давайте создадим небольшой web-проект, который будем потом использовать для демострации работы Vagrant. Создайте в корне Vagrant проекта (где расположен файл Vagrantfile) индексный html файл:

$ echo "<h1>Hello from a Vagrant VM</h1>" > index.html

В принципе на этом настройка web-проета закончена.


Образы виртуальных машин (Виртуальные боксы)

Следующим шагом после инициализации проета, является создание базового бокса. Vagrant не создает виртуальную машину с нуля. Он импортирует базовый образ виртуальной машины и запускает его, применяя затем все необходимые настройки заданные в конфигурационном файле Vagrantfile. Это упрощает жизнь пользователям Vagrant, т.к. им не надо тратиь время на настройку параметров виртуальной машины, таких как выделенная виртуальная память, объем диска, сетевые интерфейсы и пр.

Получение базового образа виртуальной машины

В самом начале статьи мы уже скачали базовый образ 32-битной системы Ubuntu 12.04LTS precise и добавили его в Vagrant. Обратите внимание, что если вы уже скачали образ, то вам не нужно повторно каждый раз его скачивать при последующем запуске. Vagrant поддерживает загрузку образов как из Интернета, так и с вашего жесткого диска. В самом начале статьи мы запустили следующую команду:

$ vagrant box add precise32-box http://files.vagrantup.com/precise32.box

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

Адрес http://files.vagrantup.com/precise32.box мы использовали только один раз в самом начале, теперь подключать базовый образ мы будем из локального хранилища на жестком диске.

Удаление виртуальных боксов

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

$ vagrant box remove my_box

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

Настройка проета для использования нужного виртуального бокса

Теперь, когда виртуальный бокс с именем precise32-box был добавлен в Vagrant мы можем добавлять его в наши проеты. Это делается путем записи в конфигурационный файл Vagrantfile следующей строчки:

Vagrant::Config.run do |config|

config.vm.box = "precise32-box"

end

Проверка настройки

На данный момент мы произвели самую базовую настройку нашего виртуального окружения. Мы не задали переброс портов (port forwarding), свое обспечение для окружения (provisioning) и т.д. Но даже с такой базовой настройкой у нас получилась полнофункциональная виртуальная машина. Вы можете в этом убедится набрав следующую команду vagrant up из корневой директории проекта Эта команда запустит виртуальную машину. Чтобы остановить запущенную виртуальную машину и очистить место на диске, которое она занимала, нужно выполнить команду vagrant destroy:

$ vagrant up

...

$ vagrant destroy

...


Настройка SSH

Vagrant предоставляет полный доступ к виртуальной машине через SSH протокол при помощи команды vagrant ssh. После запуска этой команды откроется терминал и вы увидите приблизительно следующее приглошение командной строки:

$ vagrant ssh

...

vagrant@vagrantup:~$



ВНИМАНИЕ: для пользователей Windows

Т.к. ssh-клиент по-умолчанию не распространяется на Windows платформе, то при запуске команды vagrant shh на Windows машине Vagrant выведет вместо окна терминала - окно с необходимой информацией для подключения к виртуальной машине по shh протоколу через ssh-клиент PuTTY:

PuTTY не распознает стандартные openssh ключи, поэтому вам придется преобразовать данный приватный ключь в формат .ppk с помощью утилиты puttygen, которая идет в комплекте с PuTTY.


Доступ к файлам проекта с виртуальной машины

В запущенной через Vagrant виртуальной машине вы найдете расшаренную директорию, в которой находятся файлы вашего проекта. Эта директория располагается на виртуальной машине по этому пути: /vagrant. С виртуальной машины содержимое данной директории доступно как для чтения так и для записи.


Обеспечение для виртуальных боксов (Provisioning)

Мы запустили с помощью Vagrant виртуальную машину, настроили подключение через ssh, и что дальше? Для нас как для разработчиков эта машина не представляет никакого инетерса, т.к. на ней, пока, ничего не установлено кроме оперционной системы Ubuntu. Для разработки нашего web-проекта нам необходимо из получившейся заготовки виртуальной машины сделать полноценное виртуальное окружение - максимально точную копию того, что у нас находится на рабочем сервере. Для этого нам надо установить нужное программное обеспечение, к примеру, nginx или Apache, php, ruby, MySQL и т.д., т.е обеспечить наш виртуальный бокс необходимой провизией (Provisioning)

Для этих целей Vagrant позволяет использовать на выбор одно из двух решений - это Chef (Chef-Solo) или Puppet. Также, при необходимости, вы можете расширять Vagrant и использовать другие средства автоматизированного развертывания приложений (но это уже не относится к теме данной статьи).

Настройка Chef и Vagrant

В данной статье мы воспользуемся заранее приготовленными рецептами для Chef, чтобы продемонстрировать развертывания виртуальной машины. Для этого отредактируем конфигурационный файл Vgarantfile:

Vagrant::Config.run do |config|

config.vm.box = "precise32-box"


# Enable and configure the chef solo provisioner

config.vm.provision :chef_solo do |chef|

# We're going to download our cookbooks from the web

chef.recipe_url = "http://files.vagrantup.com/getting_started/cookbooks.tar.gz"


# Tell chef what recipe to run. In this case, the `vagrant_main` recipe

# does all the magic.

chef.add_recipe("vagrant_main")

end

end

Обратите внимание, что мы используем URL http://files.vagrantup.com/getting_started/cookbooks.tar.gz для загрузки набора рецептов (cookbooks) для Chef. Вместо этого вы также можете просто скопировать набор рецептов в корневую директорию нашего Vagrant-проекта и подключить их через конфиг в Vagrantfile'е. Более подробно про это можно найти в разделе ChefSolo.

Запуск!

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

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

Чтобы убедится всеже что наш простой сайт уже работает, вы можете подключится по ssh к виртуальной машине и в командной строке ssh-терминала набрать следующее:

$ vagrant ssh

...

vagrant@vagrantup:~$ wget -qO- 127.0.0.1

<h1>Hello from a Vagrant VM</h1>

vagrant@vagrantup:~$

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


Проброс портов (Port Forwarding)

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

Задание номера порта для проброса

В данном случае мы хотим пробросить порт на котором работает сервер Apache. Проброс порта настраивается в файле Vagrantfile следующим образом:

Vagrant::Config.run do |config|

# Forward guest port 80 to host port 4567

config.vm.forward_port 80, 4567

end

Как вы видите мы задали проброс портов с 80 порта (guest posrt) на виртуальной машине на 4567 порт (host port) на нашем рабочем компьютере. Теперь надо запустить виртуальную машину командой vagrant up или если она уже запущена, то перезагрузить командой vagrant reload. После этого можно в адресной строке браузера набрать адрес http://127.0.0.1:4567/ и он откроет нашу страничку с приветсвием:

Hello from a Vagrant VM



Пакетирование (Packaging)

Итак, мы получили готовое для использования виртуальное окружение для нашего web-проекта. Но представьте ситуацию, что вы не один, а состоите в команде и вам надо обеспечить своих коллег такимже виртуальным окружением как и у вас. Что делать? Vagrant предоставляет для этого случая возможность создавать пакеты (packages) виртуального окружения. Эти готовые пакеты вы отдаете своим коллегам и они устанавливают их у себя на компьютере.

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

Перед тем как создать бокс убедитесь что ваше виртуальное окружение проинициализировано и запущено командой vagrant up.

Создание VagrantFile'а

Сначала мы должны создать конфигурационный файл Vagrantfile, который затем будет помещен в созданный виртуальный бокс. На этот этапе важно убетиться, что ваше виртуальное окружение запущено командой vagrant up и работает HTTP доступ к нему. Теперь создаем файл Vagrantfile.pkg, который будет использоваться как Vagrantfile только для созданного бокса. Файл должен содержать следующую конфигурацию:

Vagrant::Config.run do |config|

# Forward apache

config.vm.forward_port 80, 8080

end

Далее выполните команду:

$ vagrant package --vagrantfile Vagrantfile.pkg

vagrant package возьмет текущее запущенное виртуальное окружение и упакует его в бокс package.box в текущую директорию откуда была запущена команда (т.е. в корне нашего Vagrant проета). Опция --vagrantfile указывает, что бокс должен включать в себя файл Vagrantfile.pkg, чтобы при развертывании на другом компьютере была автоматически выполнена проброска портов (более попдробно см. здесь).

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

$ vagrant box add my_box /путь/к/боксу/package.box

$ vagrant init my_box

$ vagrant up


После выполнения этих команд другой участник вашей команды получит готовое к работе виртуальное окружение (точную копию вашего виртуального окружения).


Остановка виртуальных боксов (Teardown)

Чтобы завершить запущенное виртуальное окружение в Vagrant существует три разных способа сделать это:

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

Все эти типы остановки виртуальных боксов рассмотрены далее.

Suspend - уход в спящий режим с сохранением текущего состояния системы

Завершение работы с уходом в спящий режим выполняется командой vagrant suspend. При этом происходит сохранение текущего состояни виртуального окружения и затем завершение его работы. Для возобновления работы достаточно выполнить команду vagrant resume.

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

Halting - обычное завершение работы

Это завершение работы выполняется командой vagrant halt. При этом выполняется обячное завершение работы (как в обычной Linux системе при выполнении команды halt). Чтобы возобновить работу виртуального окружения после такого выключения надо выполнить команду vagrant up.

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

Destroing - завершение работы с очисткой всех файлов бокса

Наконец, последний - третий способ выключения виртуального окружения. Выполняется командой vagrant destroy. При этом происходи завершение работы с полной очисткой места на диске, которое занимало виртуальное окружение. Чтобы возобновить работу необходимо также как и в предыдущем случае выполнить команду vagarnt up.

Основное преимущество этого способа в том, что вы экономите до 1 Гб места на жестком диске. Но при этом возобновление работы будет самым долгим процессом, т.к. Vagrant'у придестя заново ставить весь необходимы софт из рецептов. Обычно не рекомендуется пользоваться данным способом завершения работы, если только вы не стремитесь любой ценой сэконмить место на жестком диске, что при текущих размерах современных жестких дисков крайне редкая необходимость.


Быстрая пересборка

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

Не переживайте! Все что необходимо вам сделать чтобы возобновить работу над проектом это просто заново запустить виртуальный бокс командой vagrant up. Вот и все. Через пять минут может больше или меньше, когда Vagrant запустит виртуальную машину и установит весь нужный софт вы спокойно можете приступить к разработке вашего старого проекта.


Полезные ссылки


← Содержание ...
 
MyTetra Share v.0.35
Яндекс индекс цитирования