Блоґ одного кібера

Історія хвороби контуженого інформаційним вибухом

vagrant up!

with 10 comments

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
Advertisements

Written by bunyk

Лютий 23, 2015 at 09:11

Відповідей: 10

Subscribe to comments with RSS.

  1. Якщо справа тільки в пітонах, то раджу https://github.com/yyuu/pyenv і ставити через https://github.com/yyuu/pyenv-installer .
    Можна мати різні версії пітона та віртуалки з різними версіями пітону.
    В мене zsh навіть автокомпліти підхопив.

    foldl

    Лютий 23, 2015 at 10:26

  2. Мав на увазі, що [i]правильний[/i] CLI до VirtualBox 🙂

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

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

    dmytrish

    Лютий 23, 2015 at 22:30

    • Взагалі кажуть що є така наука – девопс, яка всі ці штуки розглядає але я теж ще до такого рівня не дойшов. 🙂 Мені ж що головне – поменше робити і аби побільше було зроблено. 🙂

      bunyk

      Лютий 23, 2015 at 22:34

    • я пробую зараз зробити деплой через NixOPs. Там заявлена неймовірна простота в заміні, наприклад, пачки віртуалбоксів на EC2 або GCE машин. Як налаштую – цікаво було би порівняти, чим деплоїти зручніше. Правда, є одне обмеження у NixOPs – він деплоїть тільки NixOSи

      danbst

      Лютий 27, 2015 at 16:10

  3. тепер я ваш вдячний читач, а оскільки сферу діяльності довелось радикально змінити, то і учень також.

    Andrew Ivakhnenko

    Липень 19, 2015 at 18:05

    • Ну, будемо сподіватись що через кілька років ситуація зміниться, Україна отримає інвестиції, побудує нові заводи, проведе автобани і залізниці до району “блакитного банана”, ми будемо займатися роботехнікою для якогось там Daimler AG, Siemens, BMW, Deutsche Bahn чи Bosh і я стану вашим учнем.

      bunyk

      Липень 20, 2015 at 14:03

  4. […] середовища. Наприклад середовища розробки. Хоча цим може займатись і Vagrant. А ще Vagrant може керувати не тільки машинами на VirtualBox, а […]

  5. […] Поки вони ставляться, раджу коротко ознайомитись як користуватись тим Vagrant-ом. […]


Залишити відповідь

Заповніть поля нижче або авторизуйтесь клікнувши по іконці

Лого WordPress.com

Ви коментуєте, використовуючи свій обліковий запис WordPress.com. Log Out / Змінити )

Twitter picture

Ви коментуєте, використовуючи свій обліковий запис Twitter. Log Out / Змінити )

Facebook photo

Ви коментуєте, використовуючи свій обліковий запис Facebook. Log Out / Змінити )

Google+ photo

Ви коментуєте, використовуючи свій обліковий запис Google+. Log Out / Змінити )

З’єднання з %s

%d блогерам подобається це: