MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
Настройка Vagrant для удобной разработки
04.10.2015
12:25
Автор: Рахим Давлеткалиев
Текстовые метки: Vagrant, VirtualBox, виртуализация, разработка
Раздел: Компьютер - Linux - Виртуализация и эмуляция - VirtualBox

Для удобства разработки веб-приложений я с недавнего времени использую Vagrant. Это просто готовый инструмент для быстрого развертывания и настройки виртуальной машины. В качестве эмулятора можно использовать и VMWare и VirtualBox (я использую второе).

Голый «исходник» виртуалки называется «box». Их можно делать самому, но есть куча готовых. Я выбрал Ubuntu 12.04 LTS и скачал бокс:

vagrant box add НАЗВАНИЕ_БОКСА URL_БОКСА


Название — любое, это просто идентификатор. Вагрант скачивает бокс в папку ~/.vagrant.d/boxes по умолчанию, но расположение можно поменять задав значение переменной окружения VAGRANT_HOME. Я недавно перешел на ССД в качестве системного диска, поэтому в .bash_profile у меня стоит:


export VAGRANT_HOME=«/Volumes/Mac HDD/freetonik/.vagrantboxes»

Теперь можно создавать виртуальную машину на основе этого бокса. Делается это очень просто:

vagrant init НАЗВАНИЕ_БОКСА

Эта команда создаст в текущей директории файл Vagrantfile, а в Виртуалбоксе появится новая виртуальная машина на основе образа из бокса. С самим боксом ничего не произойдет, он останется лежать в том же месте словно установочный пакет.

Виртуалбокс запустится в «безголовом» режиме, то есть вы не увидите никакого пользовательского интерфейса. Виртуальная машина на базе бокса сохранится там, где по умолчанию хранятся виртуальные машины Виртуалбокса. Поэтому я заранее запустил Виртуалбокс и сменил путь (чтобы не держать виртуалку на ССД).

Vagrantfile, созданный командой vagrant init — это конфигурация вашей виртуальной машины. В ней можно настроить перенаправление портов, общие папки и провизию: автоматическую установку приложений. Вот как выглядит мой Vagrantfile:

Vagrant.configure(«2») do |config|
config.vm.box = «ubuntu»
config.vm.network :forwarded_port, guest: 80, host: 8080
config.vm.synced_folder «/Users/freetonik/project/XXX», «/usr/share/nginx/www/»
end

80й порт виртуальной машины перенаправляется на порт 8080 хост-машины. Папка с репозиторием в моей домашней директории синхронизирована с той папкой, которую использует nginx.

Провизия позволяет устанавливать приложения и осуществлять автоматическую настройку конфигурации прямо при запуске виртуалки. Это удобная штука если у вас сложная конфигурация. Самый простой вариант — написать скрипт для последовательной установки нужных вам приложений. Но можно использовать puppet или chef. Со скриптом бывают проблемы (например, у меня никак не хотел устанавливаться nginx), а puppet/chef показался избыточным — у меня примитивная конфигурация nginx+php-fpm+postgres+redis. Так что я просто поставил все вручную несколькими короткими командами уже в самой виртуалке.

Что-ж, осталось лишь запустить виртуальную машину:

vagrant up

Через несколько секунд (если в Vagrantfile нет ошибок) виртуальная машина запустится. К ней можно сразу же подключиться через ssh:

vagrant ssh

Вы попадете в учетную запись пользователя vagrant, который может пользоваться sudo без пароля. Теперь можно установить сервер и другие пакеты (если вы не пользовались провизией). После запуска сервера веб-страницы доступны по адресу localhost:8080. Хост, конечно, можно поменять, но вот с портом незадача: OS X не позволяет использовать порт до 1024 если вы не root. Чтобы не извращаться я просто сделал еще одно перенаправление, но уже на хост-машине с помощью встроенного в OS X ipfirewall:

sudo ipfw add 100 fwd 127.0.0.1,8080 tcp from any to me 80

Теперь все, что идет на порт 8080 перенаправляется на 80. Получилось так:

nginx:80 — vagrant: 80—>8080 — ipfirewall: 8080—>80


Чтобы это правило работало и после перезагрузки нужно добавить сервис:

1) Создать файл /Library/LaunchDaemons/org.dmuth.ipfw.plist который будет искать конфигурацию фаерволла в /etc/ipfw.conf.

2) Создать файл /etc/ipfw.conf

flush
add 100 fwd 127.0.0.1,8080 tcp from any to me 80

3) Включить наш новый сервис

sudo launchctl load -w /Library/LaunchDaemons/org.dmuth.ipfw.plist

Поставить виртуалку на паузу: vagrant suspend
Остановить: vagrant halt
Перезагрузить конфигурацию (например, изменили порты или провизию): vagrant reload
Уничтожить: vagrant destroy (с боксом ничего не случится).

nginx не любит VirtualBox и иногда странно кеширует css-файлы. Это я исправил отключив sendfile в конфигурации nginx:

location ~ \.css {
add_header Content-Type text/css;
sendfile off;
}


← Содержание ...
 
MyTetra Share v.0.35
Яндекс индекс цитирования