6. Реальный мир
$ git clone git://github.com/project.git
$ читаем README
$ wget -O SDL_image-1.2.11.tar.gz http://goo.gl/98zi6
$ ./configure && make
$ sudo make install
$ пытаемся запустить хотя бы один тест
$ ищем помощи у коллег
$ MAGIC_CONST=23 prepare-run --fix-missing
$ run
8. Почему?
‣ создавать рабочие окружения тяжело
‣ распространять еще сложнее (README не
установит требуемое ПО за нас)
‣ никакой изоляции (конфликтующие
бинарники)
‣ никаких гарантий (“Но это работает на моей
машине”)
18. Vagrant
Базовый конфиг (Vagrantfile)
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu"
config.vm.box_url = "https://github.com/downloads/roderik/
VagrantQuantal64Box/quantal64.box"
end
19. Vagrant
Синхронизация каталогов между гостевой и родной ОС
Vagrant.configure("2") do |config|
...
config.vm.synced_folder "~/projects", "/projects"
end
20. Vagrant
Настройка сети
Vagrant.configure("2") do |config|
... прокидываем порты
статический ip
config.vm.network :private_network, ip: "10.11.12.13"
config.vm.network :forwarded_port, guest: 8080, host: 8080
end
21. Что получаем?
‣ легкость создания и настройки
‣ изоляция (на каждый проект свой бокс)
‣ отделение среды разработки от ОС
22. или как управлять тысячей серверов
‣ система менеджмента конфигурации (SCM)
‣ воплощение принципа “Инфраструктура как
код”
23. Chef cookbook
‣ набор действий по установке, настройке и
запуску какого-то определенного
программного пакета
‣ обычно кроссплатформенные
‣ состоит из одного или нескольких рецептов
(recipes)
‣ коллекция от Opscode https://github.com/
opscode-cookbooks
28. Что получаем?
‣ совпадает с продакшеном (можно и нужно
использовать те же инструменты на
продакшене)
‣ переносимость
29. Переносимость
Способы распространения
‣ вы можете скопировать файлы (или лучше
разместить их в git репозитории)
‣ вы можете упаковать существующий бокс
$ vagrant package --output=/tmp/demo.box
34. Настраиваем provision
Vagrantfile
Vagrant.configure("2") do |config|
...
кукбуки berkshelf автоматически подключаются в Vagrant’е
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = ['cookbooks']
chef.add_recipe 'openssl'
chef.add_recipe 'postgresql::server'
не нужно указывать зависимости
chef.json = {
postgresql: {
password: {
postgres: 'mystrongpassword'
}
}
}
end
end
36. Что получаем?
‣ никакого копирования
‣ автоматическое подгрузка зависимостей
‣ управление версиями
37. В итоге
+ единое окружение у всех разработчиков/
тестировщиков и в продакшене
★ окружение легко создать и настроить
★ окружение изолировано
★ окружение легко скопировать/перенести
+ меньше время входа нового человека в проект
+ быстрая адаптация к новым требованиям
41. Примеры боксов для
разработки
‣ Gitlab https://github.com/gitlabhq/gitlab-vagrant-
vm
‣ Rails https://github.com/rails/rails-dev-box
‣ PHP https://github.com/dirkaholic/vagrant-php-
dev-box
42. Полезные настройки
Используем NFS для синхронизации каталогов
Vagrant.configure("2") do |config|
...
config.vm.synced_folder "~/projects", "/projects", :nfs => true
end
стандартный механизм медленный, так
что используем NFS
43. Полезные настройки
Форвардинг SSH ключей
Vagrant.configure("2") do |config|
...
config.ssh.forward_agent = true
end
44. Полезные настройки
Увеличиваем объем оперативной памяти
Vagrant.configure("2") do |config|
...
config.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", 1024]
end
end