MyTetra Share
Делитесь знаниями!
Vagrant. Установка, настройка, использование
Время создания: 04.10.2015 12:02
Текстовые метки: Vagrant, VirtualBox, виртуализация, виртуальная машина, разработки
Раздел: Компьютер - Linux - Виртуализация и эмуляция - VirtualBox
Запись: xintrea/mytetra_syncro/master/base/1443949367p0fbo3umsf/text.html на raw.github.com

Что такое Vagrant?

Я бы описал Vagrant - как надстройка над виртуальными машинами (VirtualBox, VMWare) со своей инфраструктурой. Vagrant позволяет с помощью заранее подготовленных инструкций развернуть подобие серверного окружения на своей локальной машинке (сколько часов отладки было потрачено из-за отличий окружений (dev, test, prod), в которых запускается разрабатываемое ПО). Поговаривают, что Vagrant в силах решить эти проблемы. Проверим так ли это, и не принесет ли он больше сложностей нежели профита.


Определения

Vagrant Box - базовый образ для быстрого клонирования виртуальных машин (некая базовая болванка заготовка). На основе бокса вы будете создавать виртуальные машины. Сами боксы никаких не изменяются. Размер боксов варьируется от 200MB до 2,5GB.

Vagrantfile - это файл конфигурации виртуальной машины, расположен в директории проекта. Описывает производительность виртуальной машины, форвардинг портов, установку приложений, прочее. Если вы работает в команде или хотите чтобы другие пользователи могли развернуть ваше окружение - держите этот файл в GIT репозитории.

Provider - система для виртуализации (VirtualBox, VMWare, AWS). По умолчанию используется VirtualBox.


Установка Vagrant

Скачиваем и устанавливаем свежую версию (1.3.5 на текущий момент), deb-пакет весит 23MB. При установке, Vagrant уведомил что потребуется удалить установленную версию VirtualBox (у меня была 4.2), но после успешной установки Vagrant - VirtualBox остался на месте. Странно..


Подготовка

Теперь нужно скачать Vagrant Box. Эти боксы необходимо скачивать только единожды, а в дальнейшем на их основе поднимать виртуальные машины. В данный момент LAMP сборка VagrantBox доступен только на Ubuntu 10.04.4 LTS Lucid x86_64 (Apache 2.2.14, PHP 5.3.2, MySQL 5.1.66), весом 343MB. Старовата, но для тестов сойдет. Поэтому я все же начну эксперименты с этого бокса. Ставим:

vagrant box add lucid10x64 https://dl.dropbox.com/u/14741389/vagrantboxes/lucid64-lamp.box

Lucid10LAMPx64 - это просто название бокса, который будет храниться в ~/.vagrant.d/boxes. Загрузка займет 15-20 мин. (средняя скорость ~ 200Kbps).


Пробный запуск

Теперь на основе скачанного бокса нужно создать новую виртуальную машину (та самая, которая создается в VirtualBox). При инициализации, в текущем каталоге будет создан файл Vagrantfile, а виртуальная машина будет располагаться в дефолтном для VirtualBox каталоге.


# 1. Переходим в каталог нашего локального проекта

cd your_project

# 2. Создается базовый файл конфигурации виртуальной машины - Vagrantfile

vagrant init lucid10x64

# 3. Правим Vagrantfile (детали ниже)

# 4. Запускаем виртуалку (голый старт около минуты)

vagrant up


Примечание

Чтобы использовать другую систему виртуализации, запускайте виртуальную машину с параметром provider:

vagrant up --provider=vmware_fusion # aws


Настройка окружения

Параметры конфигурации виртуальной машины и всего окружения настраиваются через файл Vagrantfile:


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

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 # cписок доступных "боксов"


Будьте бдительны!

Пользователь vagrant имеет право выполнять команды под рутом (sudo) без пароля.


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

VAGRANT_HOME - переменная окружения, содержит путь к каталогу с VagrantBox'ами (как установить переменную окружения).


Вопросы

В: Где будет расположен/скрипты код, с которым мы работаем? Постоянно синхронизироваться? А это быстро?

О: Код, с которым вы работаете будет располагаться в локальном каталоге. Каталог проекта уже по дефолту синхронизируется с виртуальной машиной.


В: Сколько времени займет развертывание типичного LAMP сервера?

О: Скачивание Vagrant Box ~ 20 мин. Если файл конфигурации уже описан, тогда все зависит от окружения и зависимых пакетов - все зависимости будут скачиваться и устанавливаться (если только они не включены в сам бокс). Если вы только начинаете настройку окружения и виртуалки - готовьтесь потратить от часа на описание нужного окружения.


В: Средний расход ресурсов на обслуживание одного LAMP окружения?

О: Прикидываю как бы замерять расход памяти по нескольким процессам...


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования