Vagrant – це як висловився dmytrish – CLI до VirtualBox. (А також для інших систем віртуалізації. Перекладається слово як бродяга, і далі ви зрозумієте чому. Для чого там інтерфейс командного рядка? Ну, щоб швидше створювати і перемикатись між віртуальними машинами, а вони сьогодні ой як потрібні.)
Для чого? Ну, для початку – щоб ізолювати середовище розробки. Бо, коли я пишу на своїй машині команду python, мені пропонують наступний вибір:
python python3.3 python2 python3.3-config python2.7 python3.3m python2.7-config python3.3m-config python2.7-dbg python3.4 python2.7-dbg-config python3.4-config python2-config python3.4m python2-dbg python3.4m-config python2-dbg-config python3-config python3 python3mu python3.2 python-config python3.2-config python-dbg python3.2mu python-dbg-config python3.2mu-config
Трохи забагато, чи не так? А от якби я пробував кожен наступний python у своїй віртуалці – все було б набагато акуратніше.
Чи наприклад інший приклад. Я хочу тестувати взаємодію бота з медіавікі. Для цього мені бажано її мати (не тестувати ж на живій, а раптом помилку зроблю?), а їй потрібен LAMP-стек, тобто апач або nginx, php, mysql. І це потрібно мені не завжди, а лише поки я ганяю тести до медіавікі. Було б класно тримати для цього окрему віртуальну машину, щоб можна було її вмикати і вимикати при потребі. Отож, давайте розберемось як Vagrant в такому випадку може допомогти.
Інсталятор можна скачати зі сторінки http://www.vagrantup.com/downloads, або встановити за допомогою пакетного менеджера:
sudo apt-get install vagrant
Далі команда
vagrant init hashicorp/precise32
Створює в поточній директорії файл з назвою “Vagrant” що містить конфігурацію для запуску віртуальної машини на основі образу 32-х розрядної Ubuntu 12.04.
vagrant up
Запускає віртуальну машину описану в даному файлі.
vagrant ssh
Входить в запущену віртуальну машину.
За замовчуванням Vagrant робить директорію вашого проекту, доступною віртуальній машині за адресою /vagrant
. Тому обережно з rm -rf /
бо це потре і ваш проект. А окрім цього можете робити з віртуальною машиною що завгодно. Також зручно мати проект і всередині віртуальної машини і на хості, бо можна одночасно редагувати в зручному редакторі з хоста, і деплоїти з віртуалки.
О, щодо розгортання. Ми можемо зайти по SSH і поставити апач, але тоді це доведеться робити всім хто використовуватиме Vagrant з вашим проектом. Замість цього можна скористатись автоматичним деплойментом.
Інструкція пише що Apache ставиться отаким скриптом:
#!/usr/bin/env bash apt-get update apt-get install -y apache2 if ! [ -L /var/www ]; then rm -rf /var/www ln -fs /vagrant /var/www fi
А також директорія яку він хостить перенаправляється на директорію з нашим проектом.
Його можна зберегти в директорії проекту як bootstrap.sh
і відредагувати файл Vagrant
так, щоб він запускав цей файл при старті машини, якщо цього не було зроблено ним раніше. Тепер наш Vagrant
-файл повинен виглядати приблизно так:
Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise32" config.vm.provision :shell, path: "bootstrap.sh" end
Якщо машина вже була запущена, їй можна скомандувати перезапуститись і виконати файл провізіонування:
vagrant reload --provision
Якщо ви отримуєте помилку:
/home/bunyk/post2peer/Vagrantfile:6: syntax error, unexpected ':', expecting kEND config.vm.provision :shell, path: "bootstrap.sh"
То значить у вас стара версія Ruby, оновіться.
Як побачити що Apache працює? Браузером звісно, але для цього треба відкрити на віртуалці порт для HTTP. Додаємо до конфігурації такий рядок:
config.vm.network :forwarded_port, host: 4567, guest: 80
Він каже зробити порт 80 віртуалки доступним на хості як 4567. Щоб зміни мали ефект – перезавантажте машину:
vagrant reload
localhost:4567 повинен показувати вміст файлу index.html
, якщо такий наявний в вашому проекті.
Коли ви закінчили роботу з машиною, можна зробити три речі:
vagrant suspend
– зберегти стан машини і зупинити її. Плюси – все зберігається як ви й залишили і для старту буде потрібно лише 5-10 секунд. Мінуси – машина займатиме диск, бо потрібно буде записати знімок її пам’яті.vagrant halt
– зупинити всі програми і вимкнути машину. Вміст диску зберігається, вміст оперативки – звісно ні. Старт буде трохи довшим, бо доведеться знову ініціалізувати всі процеси…vagrant destroy
– знищити всі сліди того що ви взагалі працювали з машиною (диск).vagrant up
буде працювати ніби вперше. Плюси – нічого не треба зберігати, економиться диск. Мінуси – при старті багато часу піде на провізіонування.
І ще інша перевага Vagrant в тому, що він може керувати не тільки VirtualBox, а й всякими там VMWare, і навіть AWS. Треба просто вказати йому інший провайдер – і ваш сервер в хмарах. Але про це якось іншим разом.
Ах, і я на початку казав про медіавікі. Ну, вона ставиться ось так:
sudo apt-get install nfs-kernel-server # якщо NFS не було встановлено git clone https://gerrit.wikimedia.org/r/mediawiki/vagrant cd vagrant git submodule update --init --recursive ./setup.sh vagrant up
Filed under: Інструменти, Кодерство Tagged: віртуалізація, розробка
