vagrant provision что делает
Vagrant. Начало работы. Часть 2 из 2
Установка пакетов
При установке Vagrant выдает сообщения:
Если команд много, их удобно объединить:
Или вообще вынести в отдельный shell-файл:
Поставщики (provisioners) выполняются в трех случаях:
Если у каждого поставщика есть имя, то можно выполнить только его:
Несколько виртуальных машин
Допускается создание нескольких виртуальных машин в одном Vagrantfile :
Запускаем виртуальные машины:
Ход установки первой виртуальной машины:
Ход установки второй виртуальной машины:
Остановить обе виртуальные машины:
Запустить обе виртуальные машины:
Подключение по ssh к первой машине:
Остановить вторую виртуальную машину:
Установка Nginx, MySQL и PHP
Синхронизация директорий
По умолчанию синхронизируется директория, где расположен Vagrantfile на хост-системе с директорией /vagrant виртуальной машины. Это можно изменить с помощью настройки config.vm.synced_folder : указывается абсолютный или относительный путь для хост-системы и абсолютный — для виртуальной машины.
Скрипт безопасности MySQL
Чтобы это исправить, нужно выполнить скрипт безопасности. После запуска скрипт задает вопросы и нам надо на них ответить:
В этом нам поможет expect — инструмент, который позволяет создать скрипт, который ответит на вопросы от скрипта безопасности MySQL. Подключимся к виртуальной машине по ssh и установим expect :
Изменим имя скрипта (это можно сделать и в директриии d:/vagrant/www ):
Запросы, которые нужно выполнить, чтобы root мог подключаться по паролю:
После этого удаляем виртуальную машину и создаем заново. Но предварительно изменяем кофигурационный файл:
Основные команды
Проверить файл конфигурации Vagrantfile :
Запустить или создать виртуальную машину:
Приостанавить работу виртуальной машины
Возобновить работу виртуальной машины:
Перезагрузить виртуальную машину:
Подключиться к виртуальной машине по ssh:
Посмотреть настройки подключения по ssh:
Остановить виртуальную машину:
Удалить виртуальную машину:
Проверить состояние виртуальной машины:
Проверить состояние всех виртуальных машин:
Vagrant для малышей, или как на Windows легко получить настроенный сервер для разработки веб-приложений
Здравствуй, мой дорогой любитель поработать с Composer’ом, создавая свой очередной крутой проект на одном из модных фреймворков. Или, быть может, ты — фронтэнд-мастер, пишущий сложные штуки на JS и CSS, компилируя их из jsx- и less-файлов, устанавливая библиотеки через Bower, а проект собирая в каком-нибудь Grunt, попутно прогоняя код юнит-тестами и, конечно же, заливая потом всё это на github… Если всё это — часть твоей повседневной жизни, то хвала Всевышнему, поздравляю: ты прошел все эти испытания и даже не сломал себе мозг. Отныне, ты — из числа тех счастливых, потративших не одну неделю, разбираясь в том, как корректно настроить всю эту кучу инструментов, а также, ты — один из тех, кто может доминировать, властвовать и унижать блистать своими знаниями в комментариях Хабра к статьям других, менее проворных и смышлёных коллег по цеху…
Но… быть может, ты — лишь один из тех, кто только мечтает о подобных извращениях манипуляциях мастеров разработки современных веб-приложений?) Тогда я спешу обрадовать тебя: я тут на днях узнал пару полезных вещей и понял, что это — настоящий подарок для начинающих разработчиков. И решил написать эту статью.
Уже несколько лет я слышу о Vagrant, да и ты, наверное, тоже краем уха слыхал об этом средстве для быстрого разворачивания настроенных виртуальных машин. Но, каждый раз, когда я читал очередную статью о Vagrant’е, меня отталкивала излишняя сложность инструкций к нему. Не люблю я забивать свою голову лишней информацией: как-то проще было всё это время ставить всё необходимое через «sudo apt-get install [program-name]» и вручную добавлять новые конфиги в nginx, беря за основу старые. Но, почитав на днях инструкцию в документации к Laravel, я понял, что всё не так уж и страшно, а желание обучить программированию своего знакомого стало последним фактором, из-за которого я всё-таки полез настраивать на своей машине Vagrant…
Разработчики Laravel создали свой образ виртуальной машины для Vagrant’а, который уже содержит в себе все средства и инструменты, необходимые тебе для счастливой разработки. В итоге, в совокупности с маленькой утилитой Homestead, также заботливо предоставляемой Laravel для работы с их образом, работать с ним реально проще простого. Список основных компонентов, установленных в их образе, можно посмотреть в документации. Среди прочих инструментов, не указанных в нём, числятся такие вещи, как, например, composer и git. В общем, там уже есть всё необходимое для тебя. Нам с тобой остаётся лишь немного разобраться в том, как работает Vagrant и Homestead и спокойно всё это дело использовать в своей повседневной работе.
И не обязательно использовать данный набор только для проектов, основанных на Laravel: скрипт Homestead предоставляет простые средства для ведения разработки сразу нескольких проектов, через простой файл конфигурации позволяя управлять базами данных и nginx-конфигурациями сервера. В итоге, мы получаем практически аналог Denwer’у, но при этом мы имеем дело с полноценным linux-сервером, которым, при необходимости, мы можем легко начать управлять вручную, и установить на него другие компоненты, и таким образом вырасти в более серьёзных и опытных разработчиков.
Предварительная настройка
По сути, всё, что надо сделать — это установить на свой компьютер VirtualBox и Vagrant и немного поковыряться с их настройкой. В статье я буду говорить только о Windows-пользователях, так как линуксоиды, я думаю, и сами всё смогут сделать по инструкциям в документациях. Конечно, всё не без проблем. Если ваше имя пользователя в системе Windows написано русскими буквами (как у меня), то приготовьтесь к ошибкам во время выполнения команд. В таком случае я рекомендую создать системную переменную среды VAGRANT_HOME с указанием папки без русских символов (не знаете, как это делается? почитайте об этом здесь, например), а также открыть настройки VirtualBox’а и указать папку хранения виртуальных машин, в которой тоже нет русских символов. Всё, теперь эти инструменты должны будут корректно работать и не выдавать ошибок.
Итак, основу мы для себя создали, пришло время написать немного команд 🙂 Жмём на клавиатуре клавиши Win+R, вбиваем в открывшееся окошко фразу «cmd», жмём Enter и попадаем в командную строку. Кстати, возможно, вам придётся перезагрузить машину после установки Vagrant, чтобы его команда стала доступна в консоли. Итак, для начала попробуем просто набрать слово «vagrant» в консоли и проверить, корректно ли установлен наш инструмент:
У меня всё нормально. Если возникли проблемы, то проверьте вашу переменную PATH, в ней должен быть путь к бинарнику Vagrant’а. И перезагрузите машину, если не сделали этого.
Дальше в официальной документации нам предлагают склонировать с помощью git или, что еще страшнее, установить через composer на свой компьютер библиотеку Homestead. У меня на винде нет ни git’а, ни, уж тем более, composer’а. И вообще: я эту виртуальную машину и собрался поставить себе как раз для того, чтобы избавить себя от ручной мороки с установкой всех этих инструментов… Поэтому, давай всё-таки не будем заниматься извращениями и просто, по старинке, скачаем zip-архив с github-страницы этой библиотеки на свой компьютер и распакуем его в какую-нибудь папочку 🙂
Распаковали? Теперь, чтобы установить библиотеку на компьютер, необходимо выполнить команду homestead init. Но вот снова беда: эта команда заработает у нас только тогда, когда на нашем компьютере будут установлены Composer и основные библиотеки Laravel. Другой вариант — это выполнить скрипт init.sh, лежащий тут же рядом, но для его выполнения нам всё равно нужен линуксовый интерпретатор. В общем, опять ставить кучу всякой всячины… Как видим, под виндой простого решения нет. Поэтому давай снова сделаем пару вещей вручную: откроем-ка содержимое файла init.sh и изучим его. Там всего 11 строк кода. Как видим, чтобы «установить» библиотеку, нам просто надо скопировать в папку
/.homestead несколько файлов (знак
обозначает домашнюю директорию текущего пользователя, у меня это «C:\Users\Ахмадуллин\»). Если проанализировать то, как работают их скрипты, то мы придём к выводу, что нам оттуда нужны следующие файлы:
Воот… Совсем другое дело. Мы уже почти готовы к полноценной работе с нашей виртуальной машиной. Для доступа к нашей машине нам также нужно создать себе SSH-ключи. Тут нам поможет набор инструментов программы Putty, которую мы также впоследствии будем использовать для управления своим сервером. Скачаем программу PuttyGen и сгенерируем с помощью неё свои приватный и публичный ключи, и сохраним их в папку
Публичный ключ сохрани под следующим именем: «
/.ssh/id_rsa.pub». При этом, приватный ключ нам необходимо сохранить в двух форматах: стандартном для Putty (кнопка Save private key, название файла —
/.ssh/putty_private.ppk, например), и в формате OpenSSH (пункт «Export OpenSSH key» в меню Conversions, название файла должно быть «
/.ssh/id_rsa»). Первый приватный ключ нам нужен для того, чтобы потом подключаться к серверу через программу Putty, а второй — для настройки и инициализации сервера через скрипты Homestead. В итоге, у нас должна получиться примерно такая картина с файлами ключей:
Теперь лишь осталось указать некоторые настройки нашему серверу перед запуском, если в этом есть необходимость. Открой в любом редакторе файл Homestead.yaml. Это единственный файл настроек, через который мы можем указывать все основные параметры нашей виртуальной машины. Стандартные настройки уже неплохо написаны, и для начала нам тут и менять ничего не придётся, я лишь кратко объясню его содержимое: раздел «folders» указывает связь каталогов виртуальной машины и вашей реальной системы, чтобы ты мог легко редактировать файлы в виртуальной машине через свой любимый редактор в главной системе. Раздел «sites» — это настройки nginx, и опять же, всё очень просто: мы просто задаём связь домена и каталога на сервере. Раздел «databases» перечисляет названия баз данных, которые будут созданы при инициализации виртуальной машины. Вот, собственно, и всё, что вам надо знать о конфигурировании нашей системы.
P.S. Да, и так как в разделе «folders» по умолчанию указана связь папки
/Code с аналогичной папкой в виртуальной машине, то не забудь создать данную директорию в папке своего пользователя. Впоследствии, через неё мы сможем работать с файлами твоего сервера.
P.P.S. И еще, имей ввиду, что формат yaml немного отличается своим подходом к хранению данных. Поэтому, если будешь добавлять туда свои параметры, учти, что количество пробелов здесь имеет значение, так как через них задаётся иерархия данных. Поэтому, устанавливай именно такие отступы к новым объектам, какие уже есть в файле. Более подробно можешь почитать о данном формате, например, в Википедии.
Ну и, наконец, мы подошли к самому интересному…
Запуск виртуального сервера
/.homestead и выполни в ней магическую команду:
Если ты всё сделал правильно, то у тебя начнётся загрузка VirtualBox-образа от разработчиков Laravel, и картина будет примерно такая:
Если Vagant сообщил тебе о какой-либо проблеме, не отчаивайся: внимательно изучи текст ошибки и попробуй вбить её текст в Google. Скорее всего, есть уже множество людей, которые столкнулись с подобной проблемой и каким-либо образом решили её. Если образ успешно скачался на твой компьютер, и ошибка возникла во время загрузки машины, то попробуй открыть VirtualBox и запустить её вручную, без Vagrant’а, и посмотреть, что из этого выйдет. Vagrant — это, по сути, просто надстройка над VirtualBox, и ты можешь легко запустить собранную им виртуальную машину самостоятельно, если это будет надо.
Если же всё пошло нормально… То, через несколько минут работы Vagrant’а твоя виртуальная машина полностью настроится и установит все необходимые компоненты и параметры. И ты уже сможешь спокойно подключиться к своему полноценному серверу. Для этого можно использовать, например, Putty.
Подключение к серверу
P.S. на некоторых машинах была выявлена следующая проблема: Vagrant по какой-то причине не принимает созданный в Putty файл ключа и генерирует свой собственный, по его мнению, более безопасный. Ключ этот сохраняется по адресу «
Молодец, боец! Первый рубеж на пути покорения мира профессиональной разработки веб-приложений пройден. Теперь, давай напишем еще парочку команд и установим Laravel, просто для того, чтобы убедиться в том, что у нас на сервере всё корректно работает. Введи по очереди две следующие команды на своём сервере:
И сходи попей чайку. Когда вернёшься, открой ту самую папку
/Code, которую ты создавал в своей домашней директории, и если всё прошло нормально, то тебя там должен ожидать сюрприз 🙂
Так-то: сервер пофурычил что-то у себя, и на выходе мы получили на своём настоящем компьютере папку Laravel со всеми необходимыми файлами фреймворка. Осталось сделать самую малость для того, чтобы увидеть наше приложение в браузере: открой файл hosts в режиме администратора, чтобы иметь возможность редактировать его, и добавь туда следующую строчку:
А теперь открывай в браузере адрес homestead.app. Ну как, что видно? У меня вот такая картина:
Если достаточно прищуриться, то можно разглядеть логотип Laravel 🙂 Ну, можно еще мышкой выделить буквы, так виднее будет. В качестве упражнения, давай немного исправим это. Ты можешь открыть файл «
\Code\Laravel\resources\views\welcome.blade.php» и удалить оттуда строчки «color: #B0BEC5;» и «font-family: ‘Lato’;» в первых двадцати строках исходного кода. А потом сохранить этот файл и обновить свою страницу. Кажется, так стало лучше?)
В общем-то, это практически всё. Если ты дошёл до данной части статьи, и у тебя всё получилось, это означает, что ты большой молодец, и у тебя теперь есть полноценный собственный веб-сервер, в котором для тебя уже собраны все необходимые для работы технологии. Осталось только немного рассказать о том, как его останавливать, обновлять его конфигурацию и полностью удалить из системы. Для этого используй следующие команды Vagrant’а, и не забудь, что при этом ты должен находиться в директории
Всё написанное в данной статье — это очень краткое описание всех возможностей Vagrant’а, изучай официальную документацию и другие статьи по данному инструменту, если у тебя возникло желание разобраться в нём более глубоко. И советую также почитать комментарии к данной статье, там тоже иногда разные умные люди пишут полезные вещи. Ну и вот и всё. Кажется, статья закончена. Надеюсь, она принесёт пользу людям. И всего хорошего вам, дорогие разработчики 🙂
Vagrant
Содержание
В теме описано использование vagrant с провайдером VirtualBox.
Подробное содержание доступно справа.
Установка vagrant + VirtualBox
Устанавливать будем с официального сайта, скачав подходящие deb-пакеты.
Скачиваем и устанавливаем vagrant:
Скачиваем и устанавливаем VirtualBox:
Может понадобиться пакет linux-headers:
После всех манипуляций выше должны в системе присутствовать:
Всё готово для использования.
Создаём машину по-умолчанию
Для того, чтоб создать виртуальную машину со стандартными настройками вполне достаточно выполнить две команды:
эта команда в текущей директории создат Vagrantfile (можете посмотреть его в vim любимом текстовом редакторе), который будет считывать следующей командой:
Эта команда скачает базовый образ из репозитория vagrant и на его основе создаст виртуальную машину для VirtualBox.
Маленькие прелести vagrant:
И всё, мы внутри гостя.
Создаём собственный Vagrantfile
и далее редактировать сгенерированный файл.
Вот небольшой пример Vagrantfile с одной машиной, которая содержит образ Ubuntu 14.04.
Он написан на языке Ruby. Знать язык не обязательно для работы, всё просто.
начинает цикл, подставляя вместо «Vagrant.configure» ⇒ «config»
указываем название образа. Название образа можно выбрать отсюда (официальный репозиторий) или создать самому (немного сложнее).
По-умолчания, vagrant перед каждым запуском образа проверяет репозиторий на наличие обновлений. Это занимает какое-то время и не особо нам нужно, так как используем LTS версию.
задаёт имя машины для vagrant и VBox. Это не обязательно, но лучше это сделать, потому что удобнее обращаться к машинам по именам (см. п. 6)
И, наконец, мы говорим нашему провайдеру, что нам не нужен графический интерфейс (для VirtualBox по-умолачнию идёт значение False) и что памяти мы готовы выделить не больше 1 Гб:
Более развёрнутая информация о Vagrantfile тут
vagrant, VBox и сеть
Private network
Это удобно, если создавать виртуалку для «поиграться» или если планируется использовать виртуалку внутри сети и за NAT (например, она получит адрес от DHCP другой виртуалки, которая будет выполнять роль шлюза).
сконфигурировать можно в Vagrantfile следующим способом:
IP можно не указывать, можно сделать так:
и адрес назначится автоматически.
больше информации о приватных сетях тут
Public network
Создать публичную сеть можно так:
больше информации о публичных сетях тут
Port Forwarding
Автоматически эта опция включена только для 22 порта, для портов, которые вы задаёте вручну, нужно указать эту опцию как
Где? возле каждого порта, который вы указали (пример ниже)
Для того, чтоб принудительно открыть порты, используется следующий синтаксис:
в этом примере мы перенаправили стандартный 80 порт для веб-серверов (http) с гостя на 9999 порт хоста. Теперь, если у нас в виртуальной машине есть какой-либо веб-сервер (nginx, apache), то мы сможем попасть на него с хоста двумя способами:
Если нам требуется пробросить несколько портов, то просто задаём две строки в Vagrantfile:
И второй порт тоже будет доступен на хосте.
По-умолчанию проброс идёт ТСР протокола, для того, чтоб проборосить UDP порт, это нужно явно указать:
Синхронизация каталогов
«Из коробки» vagrant синхронизирует каталог хоста с Vagrantfile в директорию /vagrant виртуальной машины.
Для того, чтоб указать дополнительный каталоги для синхронизации, нужно добавить следующую строку в Vagrantfile:
Если абсолютный путь, то он абсолютный 🙂
Путь на гостевой машине должен быть только абсолютный. Если директорий не существует, они будут созданы рекурсивно.
Если эта поция не указана, то vagrant выберет сам подходящую.
машине. Имеет смысл использовать, если у вас несколько расшареных каталогов
Рассмотрим подробнее вариант rsync
Отличия можно понять по названиям:
первый вариант запускается один раз (синхронизировал и всё).
Второй же работает в режиме демона и отслеживает изменения на хосте. Это удобно, так как один каталог можно шарить на несколько машин сразу, передавая изменения на всех гостей.
Использование команд vagrant
Пожалуй, самые необходимые команды это vagrant up, vagrant destroy, vagrant suspend, vagrant resume, vagrant ssh.
Теперь по порядку. vagrant up Эта команда смотрит в Vagrantfile и создаёт виртуальную машину согласно описанию. Если в Vagrantfile описано несколько мащин, то вы должны явно указать её имя. В противном случае будут подняты все машины. О мультимашинном Vagrantfile мы поговорим позже.
vagrant destroy Эта команда уничтожает машину полностью, найдя её описание в Vagrantfile. Точно также, как и при создании машины, вы должны указать имя машины, если их несколько.
Требует наличие дополнительного свободного места, так как сохраняет ОЗУ вируталки.
После этого, машину можно «воскресить» командой:
vagrant resume Как уже сказано выше, эта команда пробуждает машину из сна.
vagrant ssh
Название команды также говорящее. Этой командой очень просто подключиться к машине. Если она одна, то подключение будет сразу. Если машин несколько, то следует явно указать её имя.
Теперь еще парочку дополнительных команд, которые могут оказаться полезными.
vagrant global-status
Команда-исключение. Её можно выполнять в любой директории и она вернёт список машин, вместе с состоянием и с дирекорией, в которой размещён Vagrantfile. Пример использования:
Это удобно, если вы забыли(ну, разное бывает), в какой директории запустили vagrant. Эта команда всё покажет и рааскажет.
vagrant halt
vagrant port
показывает список проброшенных портов. Пример:
Более подробно о других команда можно узнать на официальном сайте
Конфигурирование нескольких машин
В одном Vagrantfile может быть столько машин, сколько нам нужно. Задать их можно двумя способами:
Очевидно, что циклом удобно поднимать машины, которые буду отличаться только названием, хостнеймом и, возможно, ip адресом (параметры, которые можно итерировать). Другие параметры системы, такие как память, процессор, синхронизированные каталоги задать нельзя. Это могут быть ноды кластера, ноды для балансировщика или если вам нужно поднять пару десятков одинаковых машин для тестировщиков или разработчиков.
При конфигурировании каждой мащины отдельно мы имеем гораздо больше возможностей, но и писать придётся больше.
Использование цикла
Первый цикл конфигурирует провайдер VirtualBox, а именно задаёт:
версию дистрибутива, а проверка замедляет запуск виртуальной мащины, то это вполне логично.
Теперь мы создаём цикл, который будет создавать машины, меняя название машины, хостнейм и ip адрес.
Идёт итерация от 1 до mach_quant (в данном случае три), номер машины подставляется в переменную і.
Значение i | Имя машины | ip адрес | Хостнейм |
---|---|---|---|
1 | node1 | 192.168.1.25 | node1 |
2 | node2 | 192.168.1.26 | node2 |
3 | node3 | 192.168.1.27 | node3 |
Работать с таким файлом можно двумя способами: в этом случае будут подняты все машины, конфиги которых присутствуют.
А в этом случае будет поднята только та машина, которая указан.
Описываем каждую машину отдельно
Вот пример Vagrantfile, в котором создаются 4 разных машины:
прописываем глобальный конфиг для всех машин:
Далее создаём машины:
Всё почти так же, как при описании одной машины.
В результате команды
у нас получится 4 машины:
Имя машины | ip адрес | Хостнейм | Память |
---|---|---|---|
dev | 192.168.1.160 | dev | 4096 |
db | 192.168.1.161 | db | 1024 |
ci | 192.168.1.162 | ci | 2048 |
lamp_node | 192.168.1.163 | lamp_node | 512 |
Все машины с Ubuntu внутри, без графического интерфейса, обновления отключены.
Для каждой отдельной машины можно переопределить глобальные конфигурации, например, переопределим образ в одной из машин с Ubuntu на CentOS:
Теперь подумаем, что проект, над которым работает один разработчик, в современных реалиях, маловероятен. Тогда нам необходимо несколько машин для разработчиков. Решение вопроса ниже.
Используем цикл и отдельное описание машин
Предположим, что у нас есть небольшой проект, в котором 5 разработчиков, один сервер непрерывной интеграции, две машины с базами данных(репликация и\или кластер). Добавим две ноды, на которые разворачивается приложение. И добавим машину, на которой будет крутиться балансировщик нагрузки (HAProxy, Nginx, httpd), он будет балансировать между нодами с приложениями. Итого 11 машин. Vagrantfile для всей инфраструктуры выглядит следующим образом:
По традиции, сводная таблица поднятых машин после выполнения
Имя машины | ip адрес | Хостнейм | Память |
---|---|---|---|
dev1 | 192.168.1.11 | dev1 | 4096 |
dev2 | 192.168.1.12 | dev2 | |
dev3 | 192.168.1.13 | dev3 | |
dev4 | 192.168.1.14 | dev4 | |
dev5 | 192.168.1.15 | dev5 | |
db1 | 192.168.1.51 | db1 | 1024 |
db2 | 192.168.1.52 | db2 | |
ci | 192.168.1.60 | ci | 2048 |
lamp_node1 | 192.168.1.151 | lamp_node1 | 512 |
lamp_node2 | 192.168.1.152 | lamp_node2 | |
gate | 192.168.1.2 | gate | 2048 |
Vagrant provision
При чём некоторые из них, например, Chef, Puppet, Salt имеют несколько вариантов использования (мастер-агент, без мастера, запуск локально).
Автоматически provision запускается только в двух случаях:
vagrant up и vagrant reload. Если вы хотите запустить подготовку машин принудительно, то необхожимо это явно указать. Например:
Provisioning with shell
В этом подразделе рассмотрим пост-конфигурацию машин с помощью shell. Парочка примеров, естественно будет под Linux, хотя и PowerShell тоже годится.
Чтоб vagrant исполнил код после загрузки необходимо добавить пару строк в Vagrantfile.
Выполнение одной команды
Если необходимо выполнить одну команду (например, удалить какой-то стандартный файл), то удобнее всего использовать следующую форму записи:
Эта строка задаёт тип провизора (подготовщика). Мы указали shell.
Мы задаём непосредственно команду. Всё, что идёт после двоеточия, будет выполнено в интерпретаторе по-умолчанию.
Есть несколько полезных команд, которые могут использоваться вместе с shell.
Пример ниже показывает использование:
Обратите внимание на одинарные кавычки вокруг hello, world!
Результатом будет вывод: hello, world!
Выполнение скрипта. Пишем скрипт на shell в Vagrantfile
Тут мы создаём переменную script, в переменную пихаем нужные нам команды. Далее вызываем наш текст командой:
Всё предельно просто.
Выполнение скрипта. Используем внешний файл
Не трудно представить, что у большинства есть любимые, оттестированные годами скрипты, которые привыкли выполнять сразу же, после установки голой системы.
В данном случае очень подойдёт умение vagrant выполнять внещние скрипты. Делается это следующим образом:
При этом, корень относится в директории с Vagrantfile, если он путь относительно.
Без проблем можно использовать и абсолютные пути (нормально работают и вещи вроде
Если же у вас скрипт необходимо запустить из определённой директории внутри гостевой машины, vagrant позволяет делать и это. Необходимо лищь указать необходимую директорию командой upload_path.
Provisioning with Ansible
Если вы не знакомы с Ansible, то рекомендую, для начала прочесть вот эту статью.
При необходимости создать полноценное окружение разработчика, или если нужно развернуть СУБД и БД из дампа, то более целесообразно использовать более мощные инструменты. Одним из таких инструментов является Ansible.
Чтобы применить Ansible через vagrant необходимо сделать следующее:
При этом, Playbook.yml должен находиться в одном каталоге с Vagrantfile. После того, как машина будет поднята, vagrant запустит Ansible.
Для Ansible имеется достаточно много опций, узнать их можно на странице официальной документации vagrant
Помимо того, что можно запускать Ansible с хоста, его можно также запускать и в самой гостевой мащине. Называется это Ansible local.
Преимущество в том, что нет необходимости устанавливать Ansible на хост. Вы можете просто загрузить роль с вашего репозитория или с Ansible galaxy и она выполнится.
По-умолчанию, vagrant попробует сам установить Ansible на гостувую машину, для этот предусмтрено несколько опций:
Этот вариант предпочтительней, так как это гарантирует, что версия будет свежая и одинаковая для всех нод.
Часть Vagrantfile, которая отвечает за Ansible local практически ничем не отличается от обычного Ansible:
Подробнее о хуке, а именно о том, как использовать Ansible local для создания полноценной инфраструктуры. С помощью одного Vagrantfile можно создать ноды, которые будут разворачиваться Ansible, который установлен в виртуальной машине.
Разберём всё подробнее.
Вот пример для этого файла:
И этот файлик положим в директорию с Vagrantfile, в корень.
Всё, можно делать vagrant up и смотреть, как создаётся окружение.
Provisioning with Puppet
Для тех, кто привык использовать Puppet, есть возможность использовать этот инструмент с vagrant.
Для этого нам нужна следующая структура Vagrantfile:
Мы сказали, что в качестве основы для гостя необходимо использовать специальный, официальный дистрибутив от команды Puppet, в котором уже будет присутствовать агент.