Антон Каляев — Быстрое развертывание среды с Vagrant

45
БЫСТРОЕ РАЗВЕРТЫВАНИЕ СРЕДЫ РАЗРАБОТКИ С Антон Каляев

Transcript of Антон Каляев — Быстрое развертывание среды с Vagrant

Page 1: Антон Каляев — Быстрое развертывание среды с Vagrant

БЫСТРОЕ РАЗВЕРТЫВАНИЕ СРЕДЫ РАЗРАБОТКИ САнтон Каляев

Page 2: Антон Каляев — Быстрое развертывание среды с Vagrant

”Vagrant will change how you work”Vagrant изменит ваш подход к разработке

Page 3: Антон Каляев — Быстрое развертывание среды с Vagrant

Как я раньше жил без него?

Page 4: Антон Каляев — Быстрое развертывание среды с Vagrant

Идеальный мир

$ git clone git://github.com/project.git$ run

Page 5: Антон Каляев — Быстрое развертывание среды с Vagrant

Мы счастливы

Page 6: Антон Каляев — Быстрое развертывание среды с Vagrant

Реальный мир

$ 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

Page 7: Антон Каляев — Быстрое развертывание среды с Vagrant

Мы в ****

Page 8: Антон Каляев — Быстрое развертывание среды с Vagrant

Почему?

‣ создавать рабочие окружения тяжело ‣ распространять еще сложнее (README не установит требуемое ПО за нас) ‣ никакой изоляции (конфликтующие бинарники)‣ никаких гарантий (“Но это работает на моей машине”)

Page 9: Антон Каляев — Быстрое развертывание среды с Vagrant
Page 10: Антон Каляев — Быстрое развертывание среды с Vagrant

Решение

Page 11: Антон Каляев — Быстрое развертывание среды с Vagrant

Идея

Виртуальная ОС Виртуальная ОС

ОС

Page 12: Антон Каляев — Быстрое развертывание среды с Vagrant

Что такое Vagrant?

‣ инструмент для создания и распространения рабочих окружений на базе виртуальных машин (http://www.vagrantup.com/)

Page 13: Антон Каляев — Быстрое развертывание среды с Vagrant

VagrantУправление VM из командной строки

остановка VM

старт VM

перезагрузка VM

vagrant up

vagrant reload

vagrant halt

доступ по sshvagrant ssh

Page 14: Антон Каляев — Быстрое развертывание среды с Vagrant

1. Устанавливаем VirtualBox (https://www.virtualbox.org/wiki/Downloads)2. Устанавливаем Vagrant (http://downloads.vagrantup.com/)3. Загружаем Vagrant бокс

Устанавливаем Vagrant

Page 15: Антон Каляев — Быстрое развертывание среды с Vagrant

Что такое Vagrant бокс?

‣ заранее упакованные образы виртуальных машин‣ список http://www.vagrantbox.es/‣ вы можете создать бокс сами :)

Page 16: Антон Каляев — Быстрое развертывание среды с Vagrant

Как загрузить Vagrant бокс?

$ vagrant box add {title} {url}

Page 17: Антон Каляев — Быстрое развертывание среды с Vagrant

Запускаем бокс

$ vagrant init {title}$ vagrant up

Page 18: Антон Каляев — Быстрое развертывание среды с Vagrant

VagrantБазовый конфиг (Vagrantfile)

Vagrant.configure("2") do |config| config.vm.box = "ubuntu" config.vm.box_url = "https://github.com/downloads/roderik/VagrantQuantal64Box/quantal64.box"end

Page 19: Антон Каляев — Быстрое развертывание среды с Vagrant

VagrantСинхронизация каталогов между гостевой и родной ОС

Vagrant.configure("2") do |config| ...

config.vm.synced_folder "~/projects", "/projects"end

Page 20: Антон Каляев — Быстрое развертывание среды с Vagrant

VagrantНастройка сети

Vagrant.configure("2") do |config| ...

config.vm.network :private_network, ip: "10.11.12.13"

config.vm.network :forwarded_port, guest: 8080, host: 8080end

прокидываем портыстатический ip

Page 21: Антон Каляев — Быстрое развертывание среды с Vagrant

Что получаем?

‣ легкость создания и настройки‣ изоляция (на каждый проект свой бокс)‣ отделение среды разработки от ОС

Page 22: Антон Каляев — Быстрое развертывание среды с Vagrant

‣ система менеджмента конфигурации (SCM)‣ воплощение принципа “Инфраструктура как код”

или как управлять тысячей серверов

Page 23: Антон Каляев — Быстрое развертывание среды с Vagrant

Chef cookbook

‣ набор действий по установке, настройке и запуску какого-то определенного программного пакета‣ обычно кроссплатформенные‣ состоит из одного или нескольких рецептов (recipes)‣ коллекция от Opscode https://github.com/opscode-cookbooks

Page 24: Антон Каляев — Быстрое развертывание среды с Vagrant

Установка и настройка ПОНа примере Postgresql

Page 26: Антон Каляев — Быстрое развертывание среды с Vagrant

Настраиваем provision

Vagrant.configure("2") do |config| ...

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' } } } endend

Vagrantfile

Page 27: Антон Каляев — Быстрое развертывание среды с Vagrant

Запускаем бокс

$ vagrant up

Page 28: Антон Каляев — Быстрое развертывание среды с Vagrant

Что получаем?

‣ совпадает с продакшеном (можно и нужно использовать те же инструменты на продакшене)‣ переносимость

Page 29: Антон Каляев — Быстрое развертывание среды с Vagrant

Переносимость

‣ вы можете скопировать файлы (или лучше разместить их в git репозитории)‣ вы можете упаковать существующий бокс

Способы распространения

$ vagrant package --output=/tmp/demo.box

Page 30: Антон Каляев — Быстрое развертывание среды с Vagrant

Установка и настройка ПОПродвинутый уровень :)

Page 32: Антон Каляев — Быстрое развертывание среды с Vagrant

Устанавливаем Berkshelf

$ gem install berkshelf$ vagrant plugin install berkshelf-vagrant$ berks init

перед этим нужно установить ruby (http://www.ruby-lang.org/en/downloads/)

Page 33: Антон Каляев — Быстрое развертывание среды с Vagrant

Добавляем кукбук postgresqlBerksfile

site :opscode

cookbook 'postgresql'

Page 34: Антон Каляев — Быстрое развертывание среды с Vagrant

Настраиваем provision

Vagrant.configure("2") do |config| ...

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' } } } endend

Vagrantfile

не нужно указывать зависимости

кукбуки berkshelf автоматически подключаются в Vagrant’е

Page 35: Антон Каляев — Быстрое развертывание среды с Vagrant

Запускаем бокс

$ berks install$ vagrant provision

Page 36: Антон Каляев — Быстрое развертывание среды с Vagrant

Что получаем?

‣ никакого копирования‣ автоматическое подгрузка зависимостей‣ управление версиями

Page 37: Антон Каляев — Быстрое развертывание среды с Vagrant

В итоге

+ единое окружение у всех разработчиков/тестировщиков и в продакшене

★ окружение легко создать и настроить ★ окружение изолировано★ окружение легко скопировать/перенести

+ меньше время входа нового человека в проект+ быстрая адаптация к новым требованиям

Page 38: Антон Каляев — Быстрое развертывание среды с Vagrant

Vagrant providers

‣ VirtualBox‣ WMWare fusion‣ AWS (https://github.com/mitchellh/vagrant-aws)

Page 40: Антон Каляев — Быстрое развертывание среды с Vagrant

Полезные плагины

‣ vagrant-vbguest (https://github.com/dotless-de/vagrant-vbguest) - следит за состоянием Guest Additions‣ veewee (https://github.com/jedi4ever/veewee) - автоматизация создания Vagrant боксов

Page 42: Антон Каляев — Быстрое развертывание среды с Vagrant

Полезные настройкиИспользуем NFS для синхронизации каталогов

Vagrant.configure("2") do |config| ...

config.vm.synced_folder "~/projects", "/projects", :nfs => trueend

стандартный механизм медленный, так что используем NFS

Page 43: Антон Каляев — Быстрое развертывание среды с Vagrant

Полезные настройки

Vagrant.configure("2") do |config| ...

config.ssh.forward_agent = trueend

Форвардинг SSH ключей

Page 44: Антон Каляев — Быстрое развертывание среды с Vagrant

Vagrant.configure("2") do |config| ...

config.vm.provider :virtualbox do |vb| vb.customize ["modifyvm", :id, "--memory", 1024] endend

Полезные настройкиУвеличиваем объем оперативной памяти

Page 45: Антон Каляев — Быстрое развертывание среды с Vagrant

Вопросы?

[email protected]/akalyaev

twitter.com/AntonKalyaev