Початок роботи з Vagrant

У принципі на цьому налаштування веб-проету закінчено.

Про брази віртуальних машин (Віртуальні бокси)

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

Отримання базового образу віртуальної машини

На самому початку статті ми вже завантажили базовий образ 32-бітної системи Ubuntu 12.04LTS precise і додали його до Vagrant. Зверніть увагу, що якщо ви вже завантажили образ, то вам не потрібно повторно його щоразу завантажувати при наступному запуску. Vagrant підтримує завантаження образів як з Інтернету, так і з жорсткого диска. На початку статті ми запустили наступну команду:

$ vagrant box add precise32-box http://files.vagrantup.com/precise32.box

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

Адреса http://files.vagrantup.com/precise32.box ми використовували тільки один раз на самому початку, тепер підключати базовий образ ми будемо з локального сховища на жорсткомудиск.

Удалення віртуальних боксів

Також просто як додати, віртуальні бокси можна і видалити. Для цього використовуйте команду:

$ vagrant box remove my_box

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

Налаштування проету для використання потрібного віртуального боксу

Тепер, коли віртуальний бокс з іменем precise32-box був доданий до Vagrant ми можемо додавати його до наших проектів. Це робиться шляхом запису в конфігураційний файл Vagrantfile наступного рядка:

Vagrant::Config.run do config

Перевірка налаштування

На даний момент ми зробили базове налаштування нашого віртуального оточення. Ми не задали перекидання портів (port forwarding), своє забезпечення для оточення (provisioning) і т.д. Але навіть з таким базовим налаштуванням у нас вийшла повнофункціональна віртуальна машина. Ви можете в цьому переконатися, набравши наступну команду vagrant up з кореневої директорії проекту Ця команда запустить віртуальну машину. Щоб зупинити запущену віртуальну машину та очистити місце на диску, яке вона займала, потрібно виконати команду vagrant destroy:

Vagrant надає повний доступ до віртуальної машини через SSH протокол за допомогою команди vagrant ssh. Після запуску цієї команди відкриється термінал, і ви побачите приблизно наступне запрошення командного рядка:

УВАГА: для користувачів Windows

Т.к. ssh-клієнт за замовчуванням не поширюється на Windows платформі, то при запуску команди vagrant shh на Windows машині Vagrant виведе замість вікна терміналу - вікно з необхідною інформацією для підключення до віртуальної машини через shh протокол через ssh-клієнт PuTTY :

PuTTY не розпізнає стандартні openssh ключі, тому вам доведеться перетворити даний приватний ключ у формат .ppk за допомогою утиліти puttygen, яка йде в комплекті з PuTTY.

Доступ до файлів проекту з віртуальної машини

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

Про безпеку для віртуальних боксів (Provisioning)

Ми запустили за допомогою Vagrant віртуальну машину, налаштували підключення через ssh і що далі? Для нас як розробників ця машина не представляє ніякого інетерса, т.к. на ній, поки що, нічого не встановлено крім операційної системи Ubuntu. Для розробки нашого web-проекту нам необхідно із заготовки віртуальної машини зробити повноцінне віртуальне оточення - максимально точну копію того, що у нас знаходиться на робочому сервері. Для цього нам треба встановити потрібне програмне забезпечення, наприклад, nginx або Apache, php, ruby, MySQL і т.д., тобто забезпечити наш віртуальний бокс необхідною провізією (Provisioning)

Для цих цілей Vagrant дозволяє використовувати на вибір одне з двох рішень – це Chef (Chef-Solo) або Puppet. Також, при необхідності, ви можете розширювати Vagrant та використовувати інші засоби автоматизованого розгортання додатків (але це вже не стосується цієї статті).

Налаштування Chef і Vagrant

У цій статті ми скористаємося заздалегідь приготовленими рецептами для Chef, щоб продемонструвати розгортання віртуальної машини. Для цього відредагуємо конфігураційний файл Vgarantfile:

Vagrant::Config.run do config

# Enable and configure chef solo provisioner

config.vm.provision :chef_solo do chef

# We're going to download our cookbooks from the web

# Tell chef what recipe to run. У цьому випадку, `vagrant_main` recipe

# does all the magic.

Зверніть увагу, що ми використовуємо URL http://files.vagrantup.com/getting_started/cookbooks.tar.gz для завантаження набору рецептів (cookbooks) для Chef. Натомість ви також можете просто скопіювати набір рецептів до кореневої директорії нашого Vagrant-проекту та підключити їх через конфіг у Vagrantfile'і. Докладніше про це можна знайти в розділі ChefSolo.

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

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

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

Hello від Vagrant VM

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

Проброс портів (Port Forwarding)

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

Задання номера порту для прокидання

У цьому випадку ми хочемо прокинути порт, на якому працює сервер Apache. Перекидання порту налаштовується у файлі Vagrantfile так:

Vagrant::Config.run do config

# Forward guest port 80 to host port 4567

config.vm.forward_port 80, 4567

Hello від Vagrant VM

Пакетування (Packaging)

Отже, ми отримали готове до використання віртуальне оточення для нашого web-проекту. Але уявіть ситуацію, що ви не один, а перебуваєте в команді і вам треба забезпечити своїх колег таким самим віртуальним оточенням, як і у вас. Що робити? Vagrant надає можливість створення пакетів (packages) віртуального оточення. Ці пакети ви віддаєте своїм колегам і вони встановлюють їх у себе на комп'ютері.

Пакети (Packages) – це готові до встановлення образи вашого віртуального оточення, яке можуть бути швидко розгорнуті на інших комп'ютерах. Зазвичай, вони мають розширення .box і називаються боксами. Опціонально в цей бокс можна включити сам конфігураційний файл Vagrantfile .

Перед тим як створити бокс переконайтеся, що ваше віртуальне оточення проініціалізоване та запущене командою vagrant up.

З VagrantFile'а

Спочатку ми повинні створити конфігураційний файл Vagrantfile, який потім буде поміщений у створений віртуальний бокс. На цьому етапі важливо переконатися, що ваше віртуальне оточення запущено командою vagrant up і працює HTTP доступ до нього. Тепер створюємо файлVagrantfile.pkg , який буде використовуватися як Vagrantfile тільки для створеного боксу. Файл повинен містити таку конфігурацію:

Vagrant::Config.run do config

config.vm.forward_port 80, 8080

Далі виконайте команду:

$ vagrant package --vagrantfile Vagrantfile.pkg

vagrant package візьме поточне запущене віртуальне оточення і запакує його в бокс package.box в поточну директорію, звідки була запущена команда (тобто в корені нашого Vagrant проекту). Опція --vagrantfile вказує, що бокс повинен включати файл Vagrantfile.pkg , щоб при розгортанні на іншому комп'ютері було автоматично виконано прокидання портів (докладніше див тут ).

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

$ vagrant box add my_box /шлях/до/боксу/package.box

$ vagrant init my_box

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

Про становлення віртуальних боксів (Teardown)

Щоб завершити запущене віртуальне оточення в Vagrant, існує три різних способи зробити це:

  • Suspend - відхід у сплячий режим із збереженням поточного стану системи,
  • Halting – звичайне завершення роботи (як на будь-якому комп'ютері),
  • Destroing – завершення роботи з очищенням місця на диску, яке займало запущене віртуальне оточення.

Всі ці типи зупинки віртуальних боксів розглянуті далі.

S uspend - відхід у сплячий режиміз збереженням поточного стану системи

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

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

H alting – звичайне завершення роботи

Це завершення роботи виконується командою vagrant halt. При цьому виконується загальне завершення роботи (як у звичайній Linux системі при виконанні команди halt). Щоб відновити роботу віртуального оточення після такого вимкнення треба виконати команду vagrant up.

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

D estroing – завершення роботи з очищенням усіх файлів боксу

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

Основна перевага цього способу в тому, що ви заощаджуєте до 1 Гб місця на жорсткому диску. Але при цьому поновлення роботи буденайдовшим процесом, т.к. Vagrant'у придестя заново ставити весь необхідний софт із рецептів. Зазвичай не рекомендується користуватися даним способом завершення роботи, якщо тільки ви не прагнете за будь-яку ціну заощадити місце на жорсткому диску, що при поточних розмірах сучасних жорстких дисків вкрай рідкісна необхідність.

Швидке перескладання

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

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