Ошибки запуска vagrant под ubuntu. Что такое Vagrant и для чего его использовать. Подключение папок и доступ по SSH

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

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 удалось, тогда ваша коробка работала!

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

В первом приближении Vagrant — это такой CLI для VirtualBox. То есть, утилита, которая говорит «создать виртуалку», «запустить виртуалку» и так далее. На самом деле, Vagrant представляет собой нечто куда большее. В частности, помимо VirtualBox есть немало других так называемых провайдеров — VMWare, Amazon EC2 , LXC и libvirt.

Для каких задач может пригодиться Vagrant?

  • Вам просто нравится CLI и нужна виртуальная машина чтобы с чем-то там поиграться;
  • Такой жесткий способ изолировать ненадежное, например, в плане безопасности, приложение ото всей остальной системы;
  • Быстрый способ развернуть на сервере какой-нибудь готовый LAMP ценой накладных расходов на виртуализацию;
  • Проверить, как ведет себя распределенное приложение при сетевых проблемах и падении машин;
  • Еще при тестировании удобно иметь какой-то начальный образ системы, к которому можно откатиться перед следующим прогоном тестов;
  • И опять таки, тестирование — вы разрабатываете под x64 c 16 Гб памяти, а хотите проверить, что программа работает на x86 с 512 Мб памяти;
  • Иногда выгоднее купить одну жирную тачку и разместить на ней несколько ВМ, чем покупать несколько физических машин;
  • В ряде случаев с Vagrant’ом намного удобнее мигрировать приложение с хоста на хост (в частности, передать сайт другому владельцу);
  • Как замена deb- и rpm-пакетам, которая умеет разрешать конфликты зависимостей всяких криво написанных приложений, как бы создавая для них «песочницы»;
  • Вы сидите под Ubuntu, а вам для решения каких-то задач иногда нужна другая ОС — CentOS, FreeBSD, OpenBSD или Windows;

Как видите, штука полезная. Давайте же научимся ею пользоваться!

VirtualBox качаем отсюда , а Vagrant — отсюда . Устанавливаем:

sudo dpkg -i virtualbox-4.3 _4.3.20-96996 ~Ubuntu~raring_amd64.deb
sudo dpkg -i vagrant_1.6.5_x86_64.deb

Чтобы не возиться со всякими там ISO-образами в Vagrant есть такое понятие, как боксы . Бокс — это сохраненный образ системы. Чтобы создать новую виртуалку, вам нужен бокс. Когда вы архивируете состояние вашей ВМ, на выходе также получаете бокс. Скачаем бокс с Ubuntu 14.04:

vagrant box add ubuntu/ trusty64
vagrant box list

Теперь создадим новую виртуалку:

mkdir -p ~/ vagrant/ ubuntu-test
cd ~/ vagrant/ ubuntu-test
vagrant init ubuntu/ trusty64

В каталоге появится файл с именем Vagrantfile. Здесь задаются параметры ВМ. Можно изменить ограничения по памяти и CPU , включить или отключить шаринг каталогов с хост-системой, поправить настройки сети, в том числе — настроить проброс портов из гостевой системы в хост-систему, и так далее. Кстати, по умолчанию все виртуалки находятся в одной виртуальной LAN и видят друг друга. Здесь и далее в качестве провайдера мы будем использовать VirtualBox. Он очень гибок в плане настроек. В частности, в Vagrantfile можно передать любые аргументы утилите VBoxMange , что не удивительно, так как под капотом всю виртуализацию Vagrant делает с ее помощью.

Чтобы у ВМ были красивые имена в интерфейсе VirtualBox, а также выводе vagrant global-status , я всегда прописываю в Vagrantfile что-то вроде:

# имя в `vagrant global-status`
config.vm .define "ubuntu1" do | t|
end
# имя в VirtualBox
config.vm .provider "virtualbox" do | v|
v.name = "ubuntu1"
end

Запустим виртуалку и зайдем в нее по ssh:

vagrant up
vagrant ssh
# что дописать в ~/.ssh/config для входа в виртуалку:
# vagrant ssh-config

Тут следует отметить, что говоря vagrant up вы должны находится в одном каталоге с Vagrantfile. При этом после запуска ВМ вы сможете обращаться к ней по id уже из любого каталога. А физически все виртуалки лежат вовсе не рядом с Vagrantfile, а в каталоге ~/VirtualBox VMs/. Есть подозрения, что интерфейс у Vagrant мог бы быть более однотипным, и от этого более простым и понятным, но уж как сделали.

Попав внутрь ВМ вы обнаружите, что работаете под пользователем vagrant, который может делать sudo без пароля. При этом есть возможность обмениваться файлами с хост-системой:

echo "hello from vagrant" > / vagrant/ hello

Файл hello появится в каталоге ~/vagrant/ubuntu-test хост-системы. В гостевой системе доступ к каталогу /vagrant/ имеет только пользователь vagrant. Если вдруг такой способ взаимодействия с гостевой системой кажется вам неудобным, ничто не мешает завести обычного пользователя, сказать ssh-copy-id и обмениваться файлами с помощью scp.

Если в хост-системе сказать:

vagrant global-status

… то можно увидеть все ВМ и их состояние.

Если ВМ удалялась не через Vagrant, она может остаться в global-status. Лечится это так:

vagrant global-status --prune

Виртуалки можно ставить на паузу:

vagrant suspend 1f2a1a5
vagrant resume ubuntu1

Заметьте, что можно использовать не полный id вируталки (1f2a1a5), а только его начало (например, 1f). Кроме того, если вы присвоили ВМ имена, как было описано выше, то можно использовать их.

Полная останова и запуск:

vagrant halt 1f
vagrant up 1f

Удаление ВМ:

vagrant destroy 1f

Можно создать из виртуалки бокс, сказав в каталоге с Vagrantfile:

Появится файл package.box (у меня он получился около 350 Мб). Упаковывать его не нужно, это уже сжатый файл.

Импорт бокса:

vagrant box add myubuntu package.box
vagrant box list
vagrant box remove myubuntu

Часто требуется присвоить виртуалке фиксированный IP в LAN. Для этого находим в Vagrantfile строку, похожую на следующую, раскомментируем и правим.

Vagrant работает с виртуальными машинами, а значит для виртуализации ему необходим какой-либо"провайдер". И для нашего примера подойдет VirtualBox.

Установка VirtualBox 5 на Windows 10

Для начала качаем VirtualBox с официального сайта последнюю версию (на текущий момент 5.2.18). Для этого после перехода по ссылке на страницу загрузки кликаем по ссылке Windows hosts:

Загруженный файл VirtualBox-5.2.18-124319-Win.exe запускаем для установки VirtualBox. Сам процесс установки сводится к нажатию нескольких кнопок "Next" и ожиданию завершения процесса. После запуска установщика появится следующее окно:

Здесь нажимаем Next.

На следующем этапе выбираем все компоненты для установки (выбраны по умолчанию) и нажимаем Next:

На следующем этапе указываем дополнительные настройки (если нужно) или оставляем все по умолчанию и нажимаем кнопку Next:


Наследующем этапе подтверждаем установку виртуального адаптера (то есть нажимаем Yes):

И на завершающем этапе нажимаем кнопку "Install":

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

Так же в процессе установки VirtualBox 5 на Windows 10 появится диалоговое окно с подтверждением установки дополнительного программного обеспечения:

Здесь мы нажимаем кнопку "Установить".

И после завершения установки появляется диалоговое окно:

На этом процесс установки VirtualBox на Windows 10 завершен.

Установка Vagrant на Windows 10

Для установки Vagrant необходимо скачать пакет с файлами для установки,который доступен по ссылке . В появившемся окне выбираем последнюю версию установщика (на момент написания статьи 2.1.5):


И выбираем файл с расширением.msi для установки на Windows:

После скачивания запускаем файл vagrant_2.1.5_x86_64.msi. В результате появится диалоговое окно с приветствием:

На следующем этапе соглашаемся с правилами пользования (устанавливаем галочку в поле "I acept...") и нажимаем Next:

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

И в следующем окне нажимаем кнопку "Install":

Ожидаем окончания установки:

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

После завершения установки Vagrant на Windows 10 появится окно с просьбой о перезагрузке компьютера:

Здесь нажимаем "Yes" и ожидаем перезагрузки компьютера. Если необходимо вручную завершить работу других программ (или сохранить изменения в важных документах), то нажимаем кнопку "No" и потом перезагружаем компьютер вручную.

Внесение изменений в переменные среды

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

Изменения в переменные среды мы будем вносить при помощи командной строки, а конкретно в переменную PATH мы будем добавлять путь до каталога, куда установлен Vagrant (в нашем случаем это: C:\HashiCorp\Vagrant\bin).

Вызываем командную строку следующим образом:

1. нажимаем на клавиатуре клавиши Ctrl+R для вызова окна "Выполнить".
2. В появившемся окне набираем команду: cmd
3. Нажимаем кнопку ОК:

В итоге должны получить следующее:

В окне командной строки добавляем следующую команду: set PATH=%PATH%;C:\HashiCorp\Vagrant\bin

и нажимаем клавишу Enter:


И теперь для проверки того, удалось ли нам прописать путь к Vagrant в переменные среду, в этом же окне командной строки набираем команду: vagrant -v

и нажимаем клавишу Enter:


И при помощи данной команды мы получим информацию о версии установленного Vagrant. Если все получилось так, как и в статье, значит все сделали верно.

На этом процесс установки и настройки Vagrant и VirtualBox на Windows 10 завершен.

Создание виртуальной машины в Vagrant на Windows 10

Для создания виртуальной машины для начала создадим отдельный каталог, например, VagrantVM:

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

C:\VM"s\VagrantVM

Значит в командной строке выполняем следующую команду:

Cd C:\VM"s\VagrantVM

В результате получим следующее:


Для примера будем использовать сборку ubuntu/trusty64. Чтобы ее запустить на виртуальной машине, нужно сначала инициализировать бокс с этой сборкой. Для этого в командной строке выполняем команду:

Vagrant init ubuntu/trusty64

В результате получим следующее сообщение:



Теперь запустим проинициализированный бокс:

Vagrant up

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



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

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

Vagrant ssh

В результате появится запрос на ввод пароля:

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

В результате после ввода пароля окно получаем следующее:

то есть попадаем в оболочку Ubuntu. Здесь можно непосредственно работать с виртуальной машиной при помощи командной строки.

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

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



И нажимаем кнопку Open. В появившемся диалоговом окне нажимаем Да:


В результате получаем следующее:



Здесь необходимо ввести логин и пароль (как мы ранее определились, по умолчанию vagrant/vagrant):



***Примечание: при вводе пароля символы не будут отображаться (никак, даже звездочками).

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

Vagrant halt

***Если окно командной строки ранее было закрыто, то необходимо снова его запустить и открыть при помощи команду cd каталог, в котором находится наша виртуальная машина.

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

Инструкции