Встановити vagrant на windows. Vagrant – єдине оточення для розробки. Одна віртуальна машина на всі проекти

Головна / 2 Cool Reader

Преамбула

Ця міні-стаття є посиланням на створення більш правильного оточення для розробки.

В сучасному світі WEB-розробки, розробники вже давно перестали встановлювати оточення для розробки: PHP, WEB-сервер, СУБД тощо. на свій локальний комп'ютер, У якому виробляють розробку.

По-перше, установка та налаштування займає дорогоцінний час та сили.

По-друге, якщо розробник працює на кількох комп'ютерах (комп'ютер в офісі, будинки, ноутбук), то досить проблематично налаштувати ідентичне оточення скрізь та синхронізувати його налаштування між усіма своїми комп'ютерами. Ця проблема називається проблемою ідентичності стану, коли передбачається, що склад, версії та конфігурація всього програмного забезпечення повинна бути максимально ідентичною.

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

По-четверте, стан оточення вашого робочого комп'ютера швидше за все не співпадає і не може співпадати зі станом оточення вашого бойового (продакшн) сервера. Адже у вас Windows з усіма його примхами в конфігуруванні, а на бойовому сервері щось однозначно інше.

Зрештою, якщо ви продовжите встановлювати оточення для розробки на свій локальний комп'ютер, то зловите себе на думці, що половина вашого робочого часу проходить у спробах синхронізувати налаштування оточення, а стан вашої локальної операційної системи дуже швидко перетвориться на смітник.

Уникнути цього хаосу допоможе віртуалізація оточення розробки. Вам потрібна віртуальна машина, яка розгорталася б за заданим вами сценарієм, щоб її можна було розгорнути одним кліком на будь-якому комп'ютері під будь-якою операційною системою. Поки ви питимете каву, ваша віртуальна машина буде готова. Також вам потрібні якісь засоби для швидкого та простого управліннятакою віртуальною машиною (запуск, зупинка, реконфігурація).

Також вам необхідно, щоб ваш робочий каталог із проектом відбивався на каталог усередині віртуальної машини. Наприклад, щоб каталог локальної машини D:\myProjects, де зберігаються ваші проекти, відповідав каталогу віртуальної машини /var/myProjects або подібному.

Ще хотілося б мати можливість повноцінно виконувати налагодження з використанням PHP-Xdebug, причому програма повинна виконуватися у віртуальному середовищі, на віртуальній машині, а керувати ним ви могли з локальною. Вже подобається? Йдемо далі!

Vagrant

Усього цього і багато чого ще можна досягти, використовуючи віртуалізацію з використанням Vagrant. Про Vagrant в інтернеті написано дуже багато. Сенсу дублювати тут ніякого немає, інакше стаття буде не міні, як обіцялося на початку, а максі.

Скажу лише кілька слів. Vagrant - це спеціальний набір скриптів, які працюють з гіпервізорами. віртуальними машинами), такими як vmWare, VirtualBox, Parallels та інші, для спрощення взаємодії з цими віртуальними машинами.

Для Vagrant є готові образи операційних систем, Які називають «коробками » (boxes). Коробка - це, по суті, просто образ вже встановленої та налаштованої операційної системи, на основі якої будується віртуальна машина. Часто автори коробок збирають їх для підтримки різних гіпервізорах (додатках для роботи з віртуальними машинами). Мені до вподоби гіпервізор VirtualBox, тому що я почав працювати з Vagrant ще тоді, коли підтримувався тільки він, та й досі найбільше коробок випускаються саме під VirtualBox. Зараз ви можете вибрати гіпервізор на свій смак, головне, щоб він підтримувався тією коробкою, яку ви збираєтеся використовувати.

Використання Vagrant вирішує проблему ідентичності стану оточення розробки, незалежно від операційної системи на хост-машині (так називається ваш локальний комп'ютер, за яким ви працюєте). Гостьова операційна система, що виконується на віртуальній машині, завжди буде одна і також. На жаль, Vagrant розрахований тільки на забезпечення ідентичності стану при розробці. На сервер неможливо встановити Vagrant(точніше, звичайно, можливо, але краще цього не робити), тому що віртуалізація з використанням Vagrant працює на рівні віртуальної машини, що, очевидно, не підходить для продакшену. Зате Vagrant абсолютно однаково працює під різними операційними системами. Якщо члени вашої команди віддають перевагу різним ОС або працюють над проектом з різних місць, де можуть використовуватися різні ОС.

Віртуальна машина, керована Vagrant-ом, є повноцінним. віртуальний сервер, на якому встановлена ​​операційна система та весь необхідний набір додатків та служб.

Варто сказати, що крім віртуалізаціїЦілком всієї операційної системи, разом з усіма додатками та службами, також існує рішення контейнеризаціїокремих служб прямо на локальному комп'ютері.

Правда повноцінно контейнеризація працює тільки в операційній системі Linux, На інших операційних системах для запуску контейнеризації використовуються віртуальні машини, що робить використання контейнеризації не таким зручним інструментом. Але при використанні контейнеризації ми отримуємо можливість повторити ідентичність стану навіть на сервері в продакшені, що в деяких проектах може бути дуже важливо.

Одним з найпоширеніших і найпопулярніших способів роботи з контейнерами в Linux є програма Docker, про яку я напишу в іншій статті. А поки що повернемось до віртуалізації з використанням Vagrant.

Щоб розгорнути коробку у віртуальну машину, потрібен файл конфігурації, в якому описано всі параметри розгортання. Такий файл називається Vagrantfileі написаний він із застосуванням синтаксису Ruby (на якому і написаний Vagrant). Я не примушу вас писати такий файл вручну. Найчастіше ви можете знайти готовий файл в описі установки вашої коробки, в який потрібно внести руками лише деякі зміни. Але все це індивідуально для кожної коробки. У будь-якому випадку Ви знайдете інструкції щодо розгортання віртуальної машини на її основі в інструкціях до неї. Про всяк випадок ще раз повторю посилання на сховище коробок.

Як встановити та спробувати

Встановлюємо

Для початку вам необхідно встановити гіпервізор, а потім встановити сам Vagrant. Щоб віртуальні машини могли виконуватися, необхідно, щоб процесор підтримував віртуалізацію і вона була обов'язково включена в BIOS.

Давайте для початку, щоб точно все вийшло, зупинимося на гіпервізорі VirtualBox. Це чудовий безкоштовний гіпервізор від Oracle, який дуже швидко і просто встановлюється і одразу працює без танців з бубном.

Перш ніж почати інсталяцію, переконайтеся, що шлях до вашої домашньої папки, а також шлях до файлів ваших проектів не містять кириличних символів. Якщо все ж таки кириличні символи є, то потрібно створити два каталоги, наприклад D:\VagrantHome і D:\VirtualBoxMachines. У першому будуть знаходитись файли Vagrant, а у другому файли віртуальних машин VirtualBox. Тепер створіть змінну оточення з іменем VAGRANT_HOME та значенням D:\VagrantHome. Перезавантажтеся.

Тепер можна завантажити та встановити VirtualBox. Після встановлення відкрийте вікно програми та перейдіть до Файл-Параметри-Загальні. Якщо ви створювали каталог, подібний до D:\VirtualBoxMachines, то вкажіть шлях до нього тут, де "Папка для машин за замовчуванням". Після цього вікно програми можна закрити.

Тепер перейдемо до встановлення Vagrant. Завантажте та встановіть у той каталог, який пропонується за замовчуванням. Раніше була проблема, якщо вказати інший каталог, правда це було 2 роки тому, але страх залишився. Перезавантажтеся, як цього вимагає установник.

Останнє, що знадобиться - це git. Це клієнт, необхідний роботи з системою контролю версій git. Якщо ви ще не знайомі з цим, обов'язково ознайомтеся, навіщо це і для чого. Вам сподобається.

Під час встановлення будьте обережні. Якщо ми з вами розробляємо на PHP, то наші файли незалежно від операційної системи повинні мати закінчення рядків виду \n або LF . Це означає, що нам не потрібно автоматично конвертувати кінці рядків у файлах нашого вихідного коду. Тому під час установки git, коли буде запропоновано вибрати, як обробляти закінчення рядків на екрані установки Configuring the line ending conversions, вибирайте другий варіант Checkout as-is, commit Unix-style line endings. і git не буде змінювати закінчення рядків \r\n , як це прийнято для розробки в інших мовах програмування.

Описані процедури були більшими для Windows, однак ви можете точно встановити VirtualBox і Vagrant в інших операційних системах. Сенс той самий.

Розбираємось у коробках

Ви можете скористатися різними коробками, наприклад, що поставляються з фреймворками або рекомендованими для використання ними.

Одна віртуальна машина на один проект

Якщо Ви розробляєте (або бажаєте почати розробляти) на фреймворку Yii2 , то шаблони додатків (базовий та розширений) вже містять файл конфігурації Vagrantfile , який використовує коробку bento/ubuntu-16.04. Вся конфігурація: розгортання (provision), конфігурація nginx і конфігурація самої віртуальної машини описані в різних файлах, що знаходяться в каталозі vagrant в корені програми.

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

У файлі Vagrantfile ви знайдете параметр config.vm.synced_folder, який вказує каталоги для відображення (синхронізації). В даному випадку, поточнийкаталог хост-машини (вашого комп'ютера) відображається на каталог /appна віртуальній. Усі файли, які знаходяться у вас у поточному каталозі, також негайно доступні на віртуальній машині каталогу /app.

Якщо у Вашому проекті виникає потреба у використанні нового розширення PHP, або в якійсь іншій залежності, то вам достатньо додати її до файлу vagrant/provision/once-as-root.sh, який є сценарієм установки та налаштування віртуальної машини. Як тільки Ви це зробите і відправите змінений файл до репозиторію - ваші колеги отримають усі ці зміни і ввівши лише одну команду, переналаштують свої віртуальні машини. Таким чином вам не доведеться розповідати і запам'ятовувати, що куди встановити і як налаштувати - все збережено в сценаріях автоматичного розгортання віртуальної машини.

Одна віртуальна машина на всі проекти

Ще один спосіб використання віртуалізації – використовувати одну віртуальну машину для всіх ваших проектів. Саме такий підхід застосовано в окремій віртуальній машині від авторів Laravel, яка називається Homestead. Варто відзначити, що Homestead також може бути розгорнута як віртуальна машина для одного проекту, подібно до описаного вище варіанту, але ми нижче розглянемо саме варіант використання однієї машини для всіх проектів. Як запустити Homestead для одного проекту, .

У разі, файли конфігурації віртуальної машини не належать якомусь одному проекту, а зберігаються окремо. Основна конфігурація винесена взагалі у домашній каталог користувача. З одного боку це незручно, тому що втрачається зручна синхронізація налаштувань віртуальної машини між робочими станціями, але з іншого боку у вас всього одна віртуальна машина, яка ідеально налаштована спочатку з коробки і має дуже простий, гнучкий і дуже потужний спосіб конфігурування.

Щоб скористатися даною коробкою, вам необхідно завантажити файли з репозиторію та створити пару RSA-ключів (відкритий та закритий). Як це зробити описано.

Інші

Є ще багато готових наборів конфігурацій для різних коробок, щоб розробник не витрачав час на самостійне конфігурування. Кожен вибирає зручну собі суміш можливостей.

Пробуємо

Отже. VirtualBox та Vagrant у нас встановлені. Тепер настав час почати їх використовувати. Ми домовилися, що використовуватимемо коробку Laravel/Homestead. Інструкція з її розгортання доступна. Ознайомтеся обов'язково з нею, оскільки вона може містити більш актуальну інформацію. Я далі опишу прості кроки.

Ще раз домовимося, що всі наші проекти гарно лежать у каталозі D:\myProjects, розкладені за татками. Саме на цей каталог ми спиратимемося далі. Ви ж маєте замінити його на свій.

Далі необхідно буде вводити команди у командний рядок. Однак, я рекомендую використовувати замість звичної командного рядкаінтерпретатор git-bash, що йде в комплекті з git під Windows. Запустіть його та перейдіть до каталогу з проектами, виконавши команду

Cd /D/myProjects

(Зверніть увагу на сліши на шлях з використанням літери диска). Тепер необхідно спочатку завантажити саму коробку, а потім завантажити з репозиторію набір конфігураційних файлів розгортання для неї. Виконуємо:

Vagrant box add laravel/homestead git clone https://github.com/laravel/homestead.git Homestead

Отже, коробка завантажена, конфігурація також. Тепер необхідно запустити ініціалізацію цієї конфігурації (скрипт просто копіює файли на свої місця). Потім встановимо плагін, що дозволяє автоматично управляти host-файлом на вашій локальній машині. Виконайте (У прикладі вказана гілка з версією 7.0.1 — актуальною на момент написання статті. Вам же потрібна остання гілка):

Cd Homestead git checkout v7.0.1 ./init.sh vagrant plugin install vagrant-hostmanager

Після цього у вашому домашньому каталозі повинен з'явитися каталог.homestead, який містить файл Homestead.yaml - це конфігураційний файлу форматі YAML, який ви повинні відкрити будь-яким редактором коду та відредагувати. Давайте подивимося, що там усередині. Я покажу вже відредагований файл, який я використовую в тестовій конфігурації. Ви можете звернутися до документації конфігурування Homestead для більш детальної інформації.

Ip: "192.168.22.2" memory: 2048 cpus: 2 provider: virtualbox folders: - map: d:\myProjects: /home/vagrant/www sites: - map: hmvc.app to: /home/vagrant/www/ hmvc/public - map: yiibasic.app to: /home/vagrant/www/yii2basic/web databases: - homestead

Тут видно, що IP адреса віртуальної машини 192.168.22.2, їй виділено 2 Гб ОЗУ та 2 ядра процесора. Провайдер (гіпервізор) - VirtualBox.

Далі слідує список каталогів локальної системи folders, що відображаються на каталоги віртуальної машини. У мене такий один – каталог d:\myProjects (вказаний у директиві map) відображається на каталог /home/vagrant/www (вказаний у директиві to) усередині віртуальної машини. Тобто всі файли та каталоги всередині нього будуть автоматично доступні всередині віртуальної машини вказаним шляхом.

У самому низу прикладу - бази даних databases. Я використовую одну базу даних з ім'ям homestead.

У файлі нижче ще є інша інформація, наприклад інформація про прокидання портів з локальної машини на віртуальну. За потреби ви можете використати цю можливість.

Після того, як файл конфігурації складений, просто запускаємо віртуальну машину. Повертаємося в інтерпретатор git-bash і, перебуваючи в каталозі /D/myProjects/Homestead, виконуємо команду vagrant up .

Перший запуск цієї команди призведе до розгортання віртуальної машини з коробки та конфігурування її відповідно до файлів конфігурації. Щоб зупинити віртуальну машину, перебуваючи в каталозі /D/myProjects/Homestead, виконайте vagrant halt . Наступні запуски віртуальної машини відбуватимуться значно швидше, оскільки вже буде готовий образвіртуальної машини, розгорнуті з коробки і налаштовані.

Якщо ви змінюєте у файлі конфігурації, то досить запустити розгортання примусово, виконавши команду vagrant provision . Всі зміни конфігурації будуть застосовані до поточної віртуальної машини.

Глобальний доступ для керування Homestead

Так як описаний спосіб використання віртуальної машини Homestead має на увазі глобальну установку для використання всіма проектами на локальній машині, то хотілося б мати можливість управління даною віртуальною машиною не з каталогу d: MyProjects Homestead, а з будь-якого місця.

Це дуже легко налаштувати. Зверніться до цього пункту документації , щоб дізнатися, як це зробити для різних операційних систем.

Висновок

Використання віртуальних машин у розробці WEB-додатків значно заощаджує час та сили для настроювання оточення та підтримки його в актуальному стані на кількох робочих станціях. Розробник не витрачає час на налаштування веб-сервера під Windows, яка іноді вимагає шаманського досвіду і не витрачає нерви на усунення безперервного потоку помилок. Особливо, якщо ви вирішили, що хочете почати займатися розробкою, вам не варто витрачати нерви на розгортання оточення в Windows.

Різниця в споживаних ресурсах віртуальної машини і того варіанта, якби ви розгорнули оточення локально в Windows, прагне нуля. Зручність від використання віртуальної машини прагне максимуму. Додатковим досвідом використання такого способу розробки буде пасивне вивчення нормальних операційних систем, на зразок Debian або Ubuntu.

Маніпуляції з віртуальними машинами виробляються через командний рядок, або через натискання кнопок в IDE PhpStorm (в меню Tools-Vagrant). Основні команди управління:

vagrant up – запускає віртуальну машину. Якщо віртуальна машина ще не збудована, то спочатку будує її (при необхідності завантажує образ коробки).

vagrant halt – зупиняє віртуальну машину.

vagrant reload – перезавантажує віртуальну машину.

vagrant ssh – відкриває ssh з'єднання з віртуальною машиною.

vagrant provision - перебудова віртуальної машини (наприклад, якщо змінили файли конфігурації).

Решту команд можна дізнатися ввівши vagrant help .

Вдалого використання!

— це програма-асистент зі збирання та управління віртуальними машинами. З її допомогою можна автоматизувати процес розгортання кастомних (з налаштуваннями) віртуальних машин.

Суть роботи 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 – як надбудову над віртуальними машинами (VirtualBox, VMWare) зі своєю інфраструктурою. Vagrant дозволяє за допомогою заздалегідь підготовлених інструкцій розгорнути подобу серверного оточення на своїй локальній машинці (скільки годин налагодження було витрачено через відмінності оточення (dev, test, prod), в яких запускається програмне забезпечення). Подейкують, що Vagrant може вирішити ці проблеми. Чи перевіримо це, і чи не принесе він більше труднощів ніж профіту.

Визначення

назва боксу на основі якого буде розгортатися віртуалка

config.vm.box = "lucid10x64"

# Прокидання портів (8080 нашої машинки на 80 віртуалки)

config.vm.network:forwarded_port, host: 8080, guest: 80

# 2х стороння синхронізація каталогу (локальний, віртуальний)

config.vm.synced_folder "/home/stas/www/vagrant/src", "/var/www"

Примітка

За замовчуванням поточний каталог проекту (в якому знаходиться Vagrantfile) вже синхронізується з директорією /vagrant (в кореневій системі на віртуальній системі). DocumentRoot веб сервера Apacheзагорнуть на цей каталог. Тому додатково синхронізацію на /var/www вказувати не потрібно, але я привів цей конфіг як приклад для боксу, у якого не буде встановлено Apache .

Примітка

Для перевірки оточення віртуальної машини потрібно створити файл index.php всередині вашого проекту і перезавантажити конфіг Vagrant :

vagrant reload

Після цього відкрийте у браузері сторінку http://localhost:8080 - це і буде ваш index.php.

Підготувати оточення віртуальної машини (provision, забезпечення) під наш проект ми можемо декількома способами. Один з них, це запуск shell скрипта, в якому прописуються всі дії, необхідні для налаштування оточення. Давайте встановимо mc ( приклад установки Apache). Створіть у корені проекту файл bootstrap.sh:

#!/usr/bin/env bash

apt-get update

apt-get install mc

І пропишіть у Vagrantfile що необхідно запустити цей скрипт після старту віртуальної машини:

config.vm.provision:shell, :path => "bootstrap.sh"

Перезавантажте конфіг із оновленням забезпечення:

vagrant reload --provision

Управління

Команди для керування віртуальною машиною:

vagrant ssh # підключитися по SSH під користувачем vagrant

vagrant suspend # поставити на паузу

vagrant halt # вимкнути

vagrant reload # перезавантажити конфіг (без виконання provision)

vagrant reload --provision

vagrant destroy # видалити віртуалку

vagrant box list # Список доступних "боксів"

Будьте уважні!

Користувач vagrant має право виконувати команди під рутом (sudo) без пароля.

Кастомізація

VAGRANT_HOME - змінна оточення, містить шлях до каталогу з VagrantBox"ами ( як встановити змінну оточення).

Запитання

П: Де буде розташований/скрипти код, з яким ми працюємо? Постійно синхронізуватись? А це швидко?

В: Код, з яким ви працюєте, буде розміщуватися в локальному каталозі. Каталог проекту вже за дефолтом синхронізується із віртуальною машиною.

П: Скільки часу займе розгортання типового сервера LAMP?

В: Завантаження Vagrant Box ~ 20 хв. Якщо файл конфігурації вже описаний, тоді все залежить від оточення та залежних пакетів - всі залежності будуть завантажуватися та встановлюватися (якщо вони не включені в сам бокс). Якщо ви починаєте налаштування оточення і віртуалки - готуйтеся витратити від години на опис потрібного оточення.

З: Середня витрата ресурсів обслуговування одного LAMP оточення?

В: Прикидаю як би заміряти витрату пам'яті з кількох процесів.

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'и також можна розповсюджувати, якщо зареєструватися на вказаному вище сайті.

Як щодо того, щоб підняти роботу з VirtualBox на новий рівень – створювати віртуальні машини швидко та цілими пачками, організуючи їх у мережу? Що, якщо одним конфігураційним файлом та парою команд створювати просту та відтворювану структуру серверів, керуючи шарингом папок та перенаправленням портів? Вже цікаво?

Вступ

Головна сторінка проекту повідомляє, що йому вже висловили довіру такі гіганти світу IT як Mozilla, Nokia або DISQUS. «Бродяга» (а саме так перекладається назва проекту) створено у найкращих традиціях епохи гітхабу:

  1. Простий та приємний інформативний сайт: www.vagrantup.com.
  2. Вихідний код написаний на Ruby та викладено на широкий огляд: github.com.
  3. За два роки існування він встиг обрости великою кількістюдоповнень та плагінів на будь-який смак.

Встановлення

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

Перший - установка відповідного операційної системи пакета із downloads.vagrantup.com. Там є нативні інсталери під Windows, OS X та поширені дистрибутиви Linux (Deb/RPM-пакети, а також загальний інсталер). Другий – установка відповідного гему:

$ gem install vagrant

Після цього в системі з'явиться нова команда – vagrant. І ми вже готові створити нашу першу віртуалку:

$ vagrant box add precise64 http://files.vagrantup.com/precise64.box $ mkdir my_project $ cd my_project $ vagrant init precise64 $ vagrant up

Ну от і все, тепер переконаємось у її роботі – перевіримо її стан:

$ vagrant status Current VM states: default running

І зайдемо по SSH, побачивши стандартне вітання убунти:

$ vagrant ssh Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64) * Documentation: https://help.ubuntu.com/ Welcome to your Vagrant-built virtual machine. Last login: Mon Jan 28 13:51:24 2013 від 10.0.2.2 [email protected]:~$

Базові зборки

Базові складання (base box) - це спеціальним способомпідготовлені шаблони віртуальних машин, у тому числі потім створюються безпосередньо віртуальні середовища вагранта. Справа в тому, що для прискорення процесу створення віртуалки він копіює існуючу базову збірку і вже налаштовує її відповідно до конфігураційного Vagrant-файлу. В результаті користувач, з одного боку, може не турбуватися про деякі нюанси конфігурації віртуалки (наприклад, обсяг пам'яті або мережеві контролери), з іншого боку - всі ці нюанси при необхідності можуть бути легко змінені. Також великою мірою економиться час на створенні нової машини, що дозволяє будь-якої миті «вбити» все непотрібне, а потім створити по новій. Базові збирання в систему додаються командою:

$ vagrant box add<имя сборки>

Самі розробники вагранта пропонують чотири види базових збірок - два останні релізи Ubuntu у 32- та 64-бітному виконанні (одну з них ми щойно вже встановили в системі):

Але на цьому перелік далеко не закінчується. Існує спеціальний сайт, де кожен бажаючий може викласти своє базове складання. Він розташований за адресою: www.vagrantbox.es. Там будь-хто може вибрати собі що-небудь до смаку. В асортименті: Debian, Windows Server, FreeBSD, CentOS, Gentoo та інші.

Крім того, ти легко можеш створити власну стартову конфігурацію, але трохи пізніше.

НОВОВИНИ VIRTUALBOX 4.2

До речі, нещодавно Oracle випустили нову версію VirtualBox за номером 4.2. Якщо ти ще не перейшов на актуальну версію, то, ймовірно, тобі буде цікаво дізнатися про новації.

Групи віртуальних машин

У новому менеджері з'явилася можливість групувати віртуалки за будь-яким принципом (наприклад, за типом операційної системи, за проектом, у якому вони використовуються, або ще). Групи дозволяють організувати весь зоопарк, який з'являється у досвідчених користувачів віртуалбоксу, а також виконувати групові операції - наприклад, можна стартувати кілька машин, вибравши відповідну команду в групі.

Автостарт? Запуск «безмордовий»

Так званий Headless launch - тобто запуск віртуалки без відкриття вікна з інтерфейсом машини - тепер можливий прямо з менеджера. Якщо раніше, щоб запустити віртуальну машину, доводилося вирушати в консоль, набирати там щось на кшталт:

$VBoxManage startvm... --type headless

то тепер достатньо при запуску віртуальної машини з VirtualBox інтерфейсу затиснути. Зупинити запущену в режимі headless віртуалку можна також з менеджера, виконавши відповідну команду.

Створення віртуалок у два кліки

Це, щоправда, чисто інтерфейсне поліпшення (тобто ні про яке програмне прискорення створення віртуальної машини не йдеться), але все ж таки. Якщо на першому діалозі при створенні нової віртуалки натиснути кнопку "Приховати опис", то з'явиться інший діалог типу "все в одному", в якому можна буде швидко налаштувати параметри машини, що створюється.

Поліпшення мережевих інтерфейсів

Тепер VirtualBox дозволяє створювати віртуальні машини з 36 мережними картамина борту. Також представлений новий функціонал регулювання пропускної спроможності, щоб обмежити «ненажерливість» віртуалки

Підвищення продуктивності процесорів

Багато сучасних процесорів підтримують технологію віртуалізації вкладених сторінок для блоку управління пам'яттю процесора (у Intel вона називається Extended Page Tables, а у AMD - Rapid Virtualization Indexing). З версії 4.2 віртуалбокс тепер її також підтримує. Тому власники Core i5 або AMD Bulldozer після поновлення повинні помітити певний приріст швидкості роботи віртуальної машини.

Нові гостьові ОС

Список офіційно підтримуваних гостьових операцій тепер доповнився такими найменуваннями:

  • Mac OS X Mountain Lion
  • Windows 8
  • Windows Server 2012
  • Ubuntu 12.04 (Precise Pangolin)
  • Fedora 17
  • Oracle Linux 6.3

Отже тепер всі сучасні операційки без проблем повинні працювати всередині VB.

Vagrant-файл

Важливою частиною системи є спеціальний файл конфігурації, написаний на Ruby. Він називається Vagrantfile і описує віртуальні машини, необхідні в проекті. Передбачається, що в команді для розробки використовується той самий Vagrantfile, який поширюється через систему контролю версій між її членами. Важливо зазначити, що Vagrant читає конфігурацію послідовно з чотирьох місць, і кожен наступний етап може змінювати параметри попереднього. Отже, точний порядок завантаження такий:

  1. Спочатку завантажується Vagrantfile, що міститься в рубі-гемі.
  2. Далі завантажується Vagrantfile з директорії базової збірки (якщо вона була зібрана з параметром --vagrantfile).
  3. Потім завантажується Vagrantfile із домашнього каталогу користувача (~/.vagrant.d/), дозволяючи користувачеві додати йому будь-які параметри.
  4. І останнім завантажується Vagrantfile з директорії проекту. Найчастіше саме в ньому знаходяться всі основні налаштування проекту, і саме цей файл варто додати до системи контролю версій.

Повний список доступних параметрів для вагрантфайлу міститься в документації. Щойно створене віртуальне середовище має мінімальний конфіг виду:

Vagrant::Config.run do |config| config.vm.box = "precise64" end

Provisioning

Запуск порожньої віртуальної машини (нехай навіть і особливим чином налаштованої) навряд чи може бути дуже корисним, тому у вагранті є так звані наповнювачі (provisioners). різні способинастроїти віртуальну машину не зовні, а зсередини. По суті це можливість писати різні додаткові сценарії, які виконуються після створення віртуальної машини. Оскільки вагрант написаний рубістами, то як конфігуратор машини обрані звичні їм засоби: Chef Solo, Chef Server, Puppet Standalone, Puppet Server і звичайний Shell. Кошти Chef і Puppet досить відомі і поширені і часто застосовуються для деплою найрізноманітніших проектів, так що ми не загострюватимемо на нас увагу і розглянемо найпростіший варіант - shell-скрипт. Створимо в поточній директорії файл з ім'ям install_redis.sh та змістом:

Sudo apt-get -q -y install redis-server

А до Vagrant-файлу додамо команди для наповнення:

Vagrant::Config.run do |config| config.vm.box = "precise64" config.vm.provision:shell, :path => "install_redis.sh" end

Тепер переконфігуруємо нашу машину командою:

$ vagrant reload

В результаті на нашій віртуалці з'явиться нове редиска.

Налаштування мережі

Звичайно, одна з найважливіших налаштувань віртуальної машини – конфігурація мережевих інтерфейсів. За мережеві налаштуваннявідповідає параметр config.vm.network. Вагрант пропонує два варіанти на вибір: робота в мережі, обмеженою хост-машиною, та підключення через мережевий міст.

У першому випадку ми явно задаємо IP машини, а також можемо вказати маску мережі (за замовчуванням використовується 255.255.255.0). У такому випадку конфіг набуває вигляду:

Vagrant::Config.run do |config| config.vm.box = "precise64" config.vm.provision:shell, :path => "install_redis.sh" end

У другому випадку машина отримує IP по DHCP і стає повноцінним членом мережі, в якій розташована хост-машина. Якщо на хост-машині є кілька мережевих інтерфейсів, то ми можемо вказати, який саме використовувати для мосту. Для виведення списку імен мережевих інтерфейсів скористаємося командою:

~$ VBoxManage list bridgedifs | grep ^Name Name:en1: Wi-Fi (AirPort) Name:en0: Ethernet Name:p2p0

І, відповідно, конфігурація набуде вигляду:

Vagrant::Config.run do |config| config.vm.box = "precise64" config.vm.provision:shell, :path => "install_redis.sh" config.vm.network:bridged, :bridge => "en1: Wi-Fi (AirPort)" end

Крім того, Vagrant дозволяє також прокидати порти. Ось, наприклад, такий Vagrantfile дозволяє прокидати з 6379-го порту гостьової машини, на який за вмовчанням вішається редиска, на 8765-й на хост-машині.

Vagrant::Config.run do |config| config.vm.box = "precise64" config.vm.provision:shell, :path => "install_redis.sh" config.vm.forward_port 6379, 8765 end

Який варіант краще - вибір за тобою, але в будь-якому випадку наша віртуалка вже цілком може виконувати роль сервера бази даних, на який можна зайти або з машини, або з іншої віртуалки.


Декілька віртуальних машин

До речі, в одному Vagrant-файлі можна оголосити відразу кілька віртуальних машин різними налаштуваннями. Як? Я думаю, наступний приклад скаже сам за себе:

Vagrant::Config.run do |config| config.vm.define:web do |web_config| web_config.vm.box = "web" web_config.vm.forward_port 80, 8080 end config.vm.define:db do |db_config| db_config.vm.box = "db" db_config.vm.forward_port 3306, 3306 end end

Більше того, запускати та перестворювати віртуалки можна окремо, додаючи ім'я машини після відповідної команди:

$ vagrant up web $ vagrant reload db

Загальні папки

Ще одна цікава особливість VirtualBox - спільні папки, що дають можливість легко обмінюватися файлами між гостьовою та хост-машинами. Зрозуміло, Vagrant надає зручний спосібналаштування даної опції. Все, що потрібно, - це трохи виправити конфігураційний файл:

Vagrant::Config.run do |config| config.vm.share_folder "data", "/data", "data" end

Важливо також зазначити, що папки, що використовують протокол NFS (Network File System), показують кращу продуктивність, ніж спільні папки віртуалбоксу. З іншого боку, NFS не підтримується на хостах із Windows. Для того щоб використовувати NFS замість VirtualBox shared folders, необхідно це вказати в налаштуваннях:

Vagrant::Config.run do |config| config.vm.share_folder("data", "/data", "data", :nfs => true) end

Снепшоти та пісочниця

Оскільки Vagrant надає гнучкий API для розширення свого функціоналу, не дивно, що існує чимала кількість плагінів для Vagrant, які вирішують різні завдання. На випадок, якщо в тебе з'являться нові ідеї, які нові можливості можна додати до вагранту, - у документації є спеціальний розділ, що містить усі необхідні налаштуваннята приклади (bit.ly/126iIsM).

Sahara

Плагін є пісочницею для віртуальних машин: якщо щось поламалося, можна легко і просто відкотити до останнього снепшота. Плагін є рубі-гемом (що цілком очікувано) і називається sahara. Після його встановлення у вагранті з'являється додаткова команда – vagrant sandbox. Типовий приклад використання має такий вигляд. Включаємо режим пісочниці:

$ vagrant sandbox on

Виробляємо певні дії (працюємо з файлами, змінюємо налаштування та інше):

$ vagrant ssh

Якщо результат роботи нас задовольнив – зберігаємо зміни:

$ vagrant sandbox commit

В іншому випадку відкочуємо неугодні редагування:

$ vagrant sandbox rollback

І виходимо з режиму пісочниці:

$ vagrant sandbox off

Створення базових збірок

Незважаючи на те, що спільнота вже подбала про найпоширеніші образи операційних систем, тобі цілком може знадобитися мати своє особливе складання. З міркувань безпеки (а раптом хакер Вася додав свою магію в одну зі збірок, що лежать у Мережі), необхідності якихось особливих налаштувань або просто з інтересу – неважливо, головне, що така можливість є. І тут нам допоможе гем veewee, створений спеціально для цих цілей. Для початку встановимо його:

$ gem install veewee

Репозиторій veewee містить велику кількість шаблонів. Виберемо цікавий для нас - нехай це буде остання версія Ubuntu Server. Тепер створимо нову базову збірку на основі цього шаблону:

$ veewee vbox define myubuntubox "ubuntu-12.10-server-i386"

В результаті у нас з'явиться нове визначення бейс-боксу. У папці definitions/myubuntubox містяться файли, що описують нашу віртуальну машину:

Definition.rb - postinstall.sh, - preseed.cfg.

Трохи виправимо конфігурацію віртуалки:

Veewee::Session.declare(( :cpu_count => "1", :memory_size=> "1024", :disk_size => "10140", :disk_format => "VDI", :hostiocache => "off", :os_type_id => "Ubuntu", :iso_file => "ubuntu-12.10-server-i386.iso", :iso_src => "http://releases.ubuntu.com/12.10/ubuntu-12.10-server-i386.iso", :iso_md5 => "b3d4d4edfc8f291af0b83f8a2ba19a2f", :iso_download_timeout => "1000", :boot_wait => "4", :boot_cmd_sequence => [ " ", "/install/vmlinuz noapic preseed/url=http://%IP%:%PORT%/preseed.cfg ", "debian-installer=en_US auto locale=en_US kbd-chooser/method=us ", "hostname =%NAME% ", "fb=false debconf/frontend=noninteractive", "keyboard-configuration/modelcode=SKIP keyboard-configuration/layout=us keyboard-configuration/variant=us console-setup/ask_detect=false ", "initrd =/install/initrd.gz -- ], :kickstart_port => "7122", :kickstart_timeout => "10000", :kickstart_file => "preseed.cfg", :ssh_login_timeout => "10000", :ssh_user => "vagrant", :ssh_pass vagrant", :ssh_key => "", :ssh_host_port => "7222", :ssh_guest_port => "22", :sudo_cmd => "echo "%p"|sudo -S sh "%f"" :shutdown_cmd = > "shutdown -P now", :postinstall_files => [ "postinstall.sh"], :postinstall_timeout => "10000" ))

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

$ veewee vbox build myubuntubox

Veewee замислиться на час, поки створюватиме віртуальну машину, завантажуватиме ISO-образ операційної системи, а також встановлюватиме і налаштовуватиме її. Після того, як команда закінчить роботу, перевіримо створену віртуалку командою

$ veewee vbox validate myubuntubox

$ vagrant basebox export myubuntubox

Ну от, власне, і все. Тепер, щоб використати нашу базову збірку, викличемо вже знайомі команди. Додамо бокс до списку:

$ vagrant box add myubuntubox myubuntubox.box

І створимо нову віртуальну машину на основі вже створеної:

$ vagrant init myubuntubox

От і все - тепер навіть найзавзятіші параноїки не зможуть нас засудити, адже тепер весь техпроцес створення віртуального середовищаконтролюється нами ж.

Висновок

Зручне середовище розробки дозволяє більше сконцентруватися на проблемі, а не на сумісності ПЗ або відмінності операційних систем, і це головна фішка Vagrant. З ним можна позбавитися проблем, коли на машині розробника все працює, а на продакшені чомусь немає. Зрозуміло, зараз трохи бентежить його сильна рубі-орієнтованість, але сподіватимемося, що з часом розробники вирішать і цю проблему, розширивши, наприклад, список провізорів на Python або Java. І, до речі, зараз йде робота з додавання інших систем віртуалізації, крім VirtualBox.

У будь-якому разі, вже зараз проект цікавий як для окремих розробників, так і для груп розробки. Удачі та нових знань!

© 2022 androidas.ru - Все про Android