Как создать тестовое окружение при помощи vagrant. Введение в Vagrant. Базовая конфигурация WinRM

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 можно считать завершённой.

Как насчет того, чтобы поднять работу с 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.

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

Vagrant является инструментом с помощью которого осуществляется создание и управление виртуальными машинами с помощью технологии виртуализации.

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

Установка для Windows

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

VirtualBox гипервизор, осуществляющий процесс виртуализации (опа, тавтология) систем Linux, macOS, Windows и других. Установка софта VirtualBox, как и самого Vagrant проста и не вызовет у вас никаких вопросов и проблем, а как только вы установите две программы, рекомендуется выполнить перезагрузку Вашей системы.

После установки откройте командную строку и проверьте доступность Vagrant с помощью следующих строк кода:

$ vagrant Usage: vagrant -v, --version Print the version and exit. -h, --help Print this help. # ...

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

Mkdir vagrant_demo && cd vagrant_demo vagrant init ubuntu/trusty64

Vagrantfile - это файл Ruby , который описывает, как настроить и подготовить виртуальную машину.

Однако, вместо создания виртуальной машины с нуля, софт предлагает вам воспользоваться базовыми образами для использования "шаблонов " виртуальной машины. Эти базовые образы в Vagrant называются "Vagrant box" , которые добавляются в Vagrant с помощью инструмента vagrant box add , сохраняющего Vagrant box под определенным именем, предоставляя возможность использовать несколькими средами повторно. Круто, не правда ли?

$ vagrant box add hashicorp/precise64

С помощью этой команды вы сможете загрузить готовый Vagrant box с названием "hashicorp/precision64" из каталога Vashgrant Cloud , предоставляемого разработчиками для обмена готовыми образами. Следует отметить и то, что имеется возможность добавления образов из локальных файлов или пользовательского URL.

"Боксы" хранятся для каждого пользователя отдельно. Каждый проект Vagrant box создает новую копию "бокса" и никогда не изменяет исходный образ. Это означает, что если у вас есть два проекта, в которых используется один образ Vagrant box hashicorp/precision64, добавление файлов на одной виртуальной машине не повлияет на другую.

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

Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise64" end

Вы можете указать версию "бокса", указав config.vm.box_version , например:

Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise64" config.vm.box_version = "1.1.0" end

Также возможно указать URL-адрес, используя config.vm.box_url :

Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise64" config.vm.box_url = "https://vagrantcloud.com/hashicorp/precise64" end

Загружаем первую виртуальную машину Vagrant и вводим команду: $ vagrant up

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

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

Эта команда переведет вас в полноценный SSH-сеанс. Теперь у Вас есть возможность взаимодействия с виртуальной машиной. Сеанс SSH может быть завершен с помощью сочетания клавиш CTRL + D .

Vagrant@precise64:~$ logout Connection to 127.0.0.1 closed.

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

Установка на Ubuntu:

Устанавливаем Virtualbox, который, кстати, сразу доступен в репозиториях Ubuntu: > sudo apt install virtualbox

Совет: Следует отметить, что Vagrant и Virtualbox, доступные в репозиториях Ubuntu могут быть не самой актуальной версии, для установки последних версий этих программ, загрузите их с официальных сайтов разработчиков.

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

Вы должны увидеть примерно следующее: Vagrant 2.0.2

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

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

Создайте каталог проекта и переключитесь на него:

Mkdir ~/my-first-vagrant-project cd ~/my-first-vagrant-project

Следующим шагом является инициализация нового Vagrantfile с помощью команды vagrant init. В этом примере мы у нас CentOS 7. Запустите следующую команду, чтобы инициализировать новый Vagrantfile:

Vagrant init centos/7

A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.

Запустив vagrant up, мы получаем возможность создать и настроить среду в соответствии с Vagrantfile.

Vagrant up ==> default: Configuring and enabling network interfaces... default: SSH address: 192.168.121.74:22 default: SSH username: vagrant default: SSH auth method: private key ==> default: Rsyncing folder: /home/linuxize/Vagrant/my-first-vagrant-project/ => /vagrant

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

Чтобы войти в среду, просто запустите ее с помощью команды:

Vagrant ssh

Остановка работы среды:

Vagrant halt

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

Vagrant destroy

Благодаря нашей статье, вы увидели процесс установки и настройки виртуальной машины на свой компьютер на Windows или Ubuntu 18.04 , а также в статье наглядно продемонстрирован процесс создания и настройки виртуальной машины. Профит!

Полезна ли Вам эта статья?

Пожалуйста, расскажите почему?

Нам жаль, что статья не была полезна для вас:(Пожалуйста, если не затруднит, укажите по какой причине? Мы будем очень благодарны за подробный ответ. Спасибо, что помогаете нам стать лучше!

Ваше первое виртуальное окружение 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 .

На текущий момент 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 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 .

V agrantfile

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

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

$ mkdir my_vagrant_project

$ cd my_vagrant_project

$ vagrant init

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

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

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

$ echo "

Hello from a Vagrant VM

" > 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 следующей строчки:

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

На данный момент мы произвели самую базовую настройку нашего виртуального окружения. Мы не задали переброс портов (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")

З апуск!

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

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

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

$ vagrant ssh

vagrant@vagrantup:~$ wget -qO- 127.0.0.1

Hello from a Vagrant VM

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

Как вы видите мы задали проброс портов с 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

$ 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 S uspend - уход в спящий режим с сохранением текущего состояния системы

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

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

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

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

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

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

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

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

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

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

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

  • Available Vagrant Boxes - доступные образы Vagrant
  • www.vagrantbox.es - еще образы Vagrant

Итак, в прошлый раз я рассмотрел что такое 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 ,