Главная » Хобби » Vagrant - установка и настройка. Vagrant — единое окружение для разработки Установка vagrant на windows

Vagrant - установка и настройка. Vagrant — единое окружение для разработки Установка vagrant на windows

Vagrant 2.2 - Creating a Base Box

Создание базовой коробки

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

Например, ящики Ubuntu, предоставленные проектом Vagrant (например, «exact64»), являются базовыми. Они были созданы из минимальной установки Ubuntu из ISO, а не для переупаковки существующей среды.

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

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

Что находится в базовой коробке?

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

  • Менеджер пакетов
  • Пользователь SSH, так что Vagrant может подключиться
  • Возможно, Шеф-повар, Кукольный и т. Д., Но не обязательно.

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

Создание базовой коробки

Создание базового поля на самом деле зависит от поставщика. Это означает, что в зависимости от того, используете ли вы VirtualBox, VMware, AWS и т. Д., Процесс создания базовой коробки отличается. Из-за этого этот документ не может быть полным руководством по созданию базового блока.

Однако на этой странице будут описаны некоторые общие рекомендации по созданию базовых ящиков и будут ссылки на руководства, ориентированные на поставщика, для создания базовых блоков.

Конкретные руководства для создания базовых ящиков приведены ниже:

Пакер и облако бродяг

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

Дисковое пространство

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

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

Память

Как и дисковое пространство, важно найти правильный баланс объема памяти по умолчанию. Для большинства провайдеров пользователь может изменить память с помощью Vagrantfile, поэтому не используйте слишком много по умолчанию. Это было бы плохой пользовательский опыт (и слегка шокирующий), если vagrant up из базовой коробки мгновенно потребовал много гигабайт оперативной памяти. Вместо этого выберите такое значение, как 512 МБ, которого обычно достаточно, чтобы играть и делать интересные вещи с помощью машины бродяг, но при необходимости ее можно легко увеличить.

Периферийные устройства (аудио, USB и т. Д.)

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

Настройки пользователя по умолчанию

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

Если вы создаете базовый ящик для частного использования, вы должны стараться не следовать им, поскольку они открывают ваш базовый блок для рисков безопасности (известные пользователи, пароли, закрытые ключи и т. Д.).

«бродячий» пользователь

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

Чтобы настроить SSH-доступ с небезопасной ключевой парой, поместите открытый ключ в файл ~/.ssh/authorized_keys для пользователя-бродяги. Обратите внимание, что OpenSSH очень разборчив в отношении прав на файлы. Поэтому убедитесь, что ~/.ssh имеет разрешения 0700 а файл авторизованных ключей имеет разрешения 0600 .

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

Корневой пароль: «бродяга»

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

В общедоступных базовых блоках обычно используется пароль root для «бродяг», чтобы все было в порядке.

Без пароля

Это важно! , Многие аспекты Vagrant ожидают, что пользователь SSH по умолчанию будет настроен без пароля sudo. Это позволяет Vagrant настраивать сети, монтировать синхронизированные папки, устанавливать программное обеспечение и многое другое.

Для начала, некоторые минимальные установки операционных систем даже не включают sudo по умолчанию. Убедитесь, что вы устанавливаете sudo каким-то образом.

После установки sudo настройте его (обычно с помощью visudo), чтобы разрешить пароль sudo для «бродячего» пользователя. Это можно сделать со следующей строкой в ​​конце файла конфигурации:

vagrant ALL=(ALL) NOPASSWD: ALL

Кроме того, Vagrant не использует pty или tty по умолчанию при подключении через SSH. Вам нужно будет убедиться, что в нем нет строки, в которой requiretty необходимости. Удалите это, если оно существует. Это позволяет sudo нормально работать без tty. Обратите внимание, что вы можете настроить Vagrant на запрос pty, который позволяет сохранить эту конфигурацию. Но бродяга по умолчанию этого не делает.

SSH Tweaks

Чтобы ускорить работу SSH, даже если ваш компьютер или машина Vagrant не подключены к Интернету, установите для конфигурации UseDNS значение no в конфигурации сервера SSH.

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

Коробки для Windows

Поддерживаемые гостевые операционные системы Windows: - Windows 7 - Windows 8 - Windows Server 2008 - Windows Server 2008 R2 - Windows Server 2012 - Windows Server 2012 R2

Windows Server 2003 и Windows XP не поддерживаются, но если вы являетесь жестким поклонником XP, this может вам помочь.

Базовая конфигурация Windows

  • Выключить UAC
  • Отключить сложные пароли
  • Отключите «Shutdown Tracker»
  • Отключите «Диспетчер серверов», начиная с входа (для неядерных)

Помимо отключения UAC на панели управления, вы также должны отключить UAC в реестре. Это может отличаться от версии Windows до версии Windows, но Windows 8 / 8.1 использует приведенную ниже команду. Это позволит некоторым вещам, таким как автоматическая установка Puppet, работать в базовых коробках Vagrant Windows.

reg add HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /d 0 /t REG_DWORD /f /reg:64

Базовая конфигурация WinRM

Чтобы включить и настроить WinRM, вам нужно будет настроить службу WinRM для автоматического запуска и разрешить незашифрованное базовое auth (очевидно, это небезопасно). Выполните следующие команды из обычной командной строки Windows:

winrm quickconfig -q winrm set winrm/config/winrs @{MaxMemoryPerShellMB="512"} winrm set winrm/config @{MaxTimeoutms="1800000"} winrm set winrm/config/service @{AllowUnencrypted="true"} winrm set winrm/config/service/auth @{Basic="true"} sc config WinRM start= auto

Дополнительная конфигурация WinRM 1.1

Эти дополнительные шаги настройки специфичны для Windows Server 2008 (WinRM 1.1). Для Windows Server 2008 R2, Windows 7 и более поздних версий Windows вы можете игнорировать этот раздел.

  1. Убедитесь, что установлена ​​функция Windows PowerShell
  2. Измените порт WinRM на 5985 или обновите до WinRM 2.0

Следующие команды изменят порт WinRM 1.1 на то, что ожидается от Vagrant:

netsh firewall add portopening TCP 5985 "Port 5985" winrm set winrm/config/listener?Address=*+Transport=HTTP @{Port="5985"}

Другое программное обеспечение

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

Хотя мы планируем его в будущем, Vagrant по-прежнему не устанавливает Chef или Puppet автоматически при использовании этих средств обеспечения. Для этого пользователи могут использовать средство обеспечения оболочки, но если вы хотите, чтобы Chef / Puppet просто работал из коробки, вам нужно будет установить их в базовом поле.

Установка этого параметра выходит за рамки этой страницы, но должна быть довольно простой.

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

Упаковка коробки

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

Распространение ящика

Вы можете распространять файл окна, но хотите. Однако, если вы хотите поддерживать управление версиями, ставя несколько провайдеров по одному URL-адресу, нажимая обновления, аналитику и т. Д., Мы рекомендуем вам добавить окно в Vagrant Cloud от HashiCorp .

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

Тестирование коробки

Чтобы проверить поле, притворись, что ты новый пользователь Vagrant и сделайте снимок:

$ vagrant box add --name my-box /path/to/the/new.box ... $ vagrant init my-box ... $ vagrant up ...

Если вы сделали коробку для какого-то другого провайдера, обязательно укажите опцию --provider для vagrant up . Если up удалось, тогда ваша коробка работала!

— это программа-ассистент по сборке и управлению виртуальными машинами. С её помощью можно автоматизировать процесс развёртывания кастомных (с пользовательскими настройками) виртуальных машин.

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

Как установить Vagrant в Linux

Поскольку Vagrant это всего лишь надстройка над VirtualBox , то начать нужно с установки VirtualBox .

Теперь, когда VirtualBox уже есть в вашей системе, то поищите vagrant в стандартных репозиториях вашей системы — скорее всего, он там уже есть.

Для установки в Ubuntu, Linux Mint, Debian, Kali Linux и их производные выполните команду

Sudo apt install vagrant

Для установки в Arch Linux, BlackArch и их производные выполните команду:

Sudo pacman -S vagrant

Как установить Vagrant в Windows

Для Vagrant в Windows также имеется графический установщик, скачайте его и выполните установку.

В качестве папки установки Vagrant выбирает не C:\Program Files\, а другую папку, это позволяет программе проще работать с разрешениями и правами доступа:

После перезагрузки откройте командную строку Windows. Это можно сделать нажав Win+x , в открывшемся окне выберите Windows PowerShell (администратор) . В открывшемся окне для перехода из PowerShell в командную строку введите

В этой консоли выполните команду:

Должна появиться стандартная справка по пользованию программой:

Если возникнет ошибка, либо просто для профилактики, выполните обновление плагинов:

Vagrant plugin update

Установка плагина vagrant-vbguest

vagrant-vbguest — это плагин Vagrant, который автоматически устанавливает в гостевые системы VirtualBox Guest Additions — гостевые дополнения VirtualBox.

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

Vagrant plugin install vagrant-vbguest

Если в Windows у вас проблемы с установкой этого плагина, то попробуйте следующую команду:

C:\vagrant\vagrant\embedded\bin\gem.bat install vagrant-vbguest

Также в Windows файервол может запросить разрешение для выхода в сеть программой:

Плагин vagrant-vbguest запускается и используется по умолчанию всеми виртуальными машинами. Он запускается автоматически сразу после старта коробки (так в Vagrant называют виртуальные машины). Получается что он работает каждый раз при загрузке коробки, то есть при использовании команд vagrant up или vagrant reload . Он не будет работать при команде vagrant resume (или vagrant up на приостановленной коробке) чтобы не тратить время при возобновлении работы виртуальной машины.

Чтобы отключить этот плагин, в настройках виртуальных машин установите vbguest.auto_update на false .

Как пользоваться Vagrant

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

Например, offensive-security подготовили kali-linux-light ,

тогда установка и запуск выполняются командами:

Vagrant init offensive-security/kali-linux-light vagrant up

Примеры других популярных систем:

Для разных систем выделите отдельные папки, то есть запускайте приведённые выше команды в разных папках.

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

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

Как устроен Vagrant

Основа Vagrant’а — это box’ы. Box — это файл с полностью настроенной и готовой к использованию виртуальной средой. Например, я в работе использую связку Nginx + PHP-FPM + MySQL (LEMP) и у меня есть готовый box , который настроен идентично моему рабочему серверу. Box’ы удобно передавать коллегам для обеспечения идентичной среды разработки у всей команды.

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

Как пользоваться Vagrant

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

  1. устанавливаем нужный нам box командой vagrant box add [имя box"а] ;
  2. создаём Vagrantfile командой vagrant init и настраиваем его;
  3. запускаем Vagrant командой vagrant up ;
  4. после работы останавиливаем Vagrant командой vagrant halt ;
  5. когда проект закончен, удаляем виртуальную среду командой vagrant destroy.

Где взять box’ы

Тысячи готовых box’ов на все случаи жизни можно найти на сайте HashiCorp . Кроме настроенных сред там есть чистые установки популярных операционных систем. Такие box’ы можно использовать как основу для своего собственного box’а, если нужно что-то специфичное. Собственные box’ы также можно распространять, если зарегистрироваться на указанном выше сайте.

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

Предыдущая статья: Следующая статья:

© 2015 .
О сайте | Контакты
| Карта сайта