Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Быстрое развертывание среды разработки c Vagrant

Быстрое развертывание среды разработки c Vagrant

“Как надоело, что этот ноут тормозит... Почему? Да там полно программ: для одного проекта нужен rabbitmq, для другого redis, для третьего mysql” - звучит знакомо, правда?

Нет, а как насчет этого: “Да я за целый день прочитать этот README не смогу, не то что поставить все требуемые пакеты”?

Сейчас все большую популярность набирает Vagrant — инструмент для создания и распространения виртуальных окружений на базе VirtualBox. С помощью набора простых команд вы за несколько шагов можете поднять рабочее окружение с вашей любимой ОС. Что немаловажно, он поддерживает такие системы управления конфигурациями, как Chef и Puppet, так что вы с легкостью можете установить ПО, требуемое для конкретного проекта. При этом ваша исходная машинка остается чистенькой, так что по окончании проекта вам не придется выпиливать его наследие.

В своем докладе я расскажу:

* зачем все же это нужно
* какие преимущества вы получаете, используя Vagrant
* как создать и запустить простейшую коробку (vagrant box)
* как накатить на нее пару chef рецептов

D83b63db79b42978fe35e120550ca180?s=128

Anton Kaliaev

April 16, 2013
Tweet

Transcript

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

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

    к разработке
  3. Реальный мир $ 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
  4. None
  5. Идеальный мир $ git clone git://github.com/project.git $ run

  6. None
  7. Почему? ‣ создавать рабочие окружения тяжело ‣ распространять еще сложнее

    (README не установит требуемое ПО за нас) ‣ никакой изоляции (конфликтующие бинарники) ‣ никаких гарантий (“Но это работает на моей машине”)
  8. None
  9. Решение

  10. Идея Виртуальная ОС Виртуальная ОС ОС

  11. Что такое Vagrant? ‣ инструмент для создания и распространения рабочих

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

    перезагрузка VM vagrant up vagrant reload vagrant halt доступ по ssh vagrant ssh
  13. 1. Устанавливаем VirtualBox (https:// www.virtualbox.org/wiki/Downloads) 2. Устанавливаем Vagrant (http:// downloads.vagrantup.com/)

    3. Загружаем Vagrant бокс Устанавливаем Vagrant
  14. Что такое Vagrant бокс? ‣ заранее упакованные образы виртуальных машин

    ‣ список http://www.vagrantbox.es/ ‣ вы можете создать бокс сами :)
  15. Как загрузить Vagrant бокс? $ vagrant box add {title} {url}

  16. Запускаем бокс $ vagrant init {title} $ vagrant up

  17. Vagrant Базовый конфиг (Vagrantfile) Vagrant.configure("2") do |config| config.vm.box = "ubuntu"

    config.vm.box_url = "https://github.com/downloads/roderik/ VagrantQuantal64Box/quantal64.box" end
  18. Vagrant Синхронизация каталогов между гостевой и родной ОС Vagrant.configure("2") do

    |config| ... config.vm.synced_folder "~/projects", "/projects" end
  19. Vagrant Настройка сети Vagrant.configure("2") do |config| ... config.vm.network :private_network, ip:

    "10.11.12.13" config.vm.network :forwarded_port, guest: 8080, host: 8080 end прокидываем порты статический ip
  20. Что получаем? ‣ легкость создания и настройки ‣ изоляция (на

    каждый проект свой бокс) ‣ отделение среды разработки от ОС
  21. ‣ система менеджмента конфигурации (SCM) ‣ воплощение принципа “Инфраструктура как

    код” или как управлять тысячей серверов
  22. Chef cookbook ‣ набор действий по установке, настройке и запуску

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

  24. Скачиваем кукбуки $ mkdir cookbooks $ git clone https://github.com/opscode-cookbooks/ openssl.git

    cookbooks/openssl $ git clone https://github.com/opscode-cookbooks/ postgresql.git cookbooks/postgresql вручную
  25. Настраиваем 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' } } } end end Vagrantfile
  26. Запускаем бокс $ vagrant up

  27. Что получаем? ‣ совпадает с продакшеном (можно и нужно использовать

    те же инструменты на продакшене) ‣ переносимость
  28. Переносимость ‣ вы можете скопировать файлы (или лучше разместить их

    в git репозитории) ‣ вы можете упаковать существующий бокс Способы распространения $ vagrant package --output=/tmp/demo.box
  29. Установка и настройка ПО Продвинутый уровень :)

  30. Berkshelf ‣ менеджер кукбуков (как Bundler для Ruby gems) http://berkshelf.com/

    Альтернатива - librarian-chef https://github.com/ applicationsonline/librarian-chef
  31. Устанавливаем Berkshelf $ gem install berkshelf $ vagrant plugin install

    berkshelf-vagrant $ berks init перед этим нужно установить ruby (http://www.ruby-lang.org/en/downloads/)
  32. Добавляем кукбук postgresql Berksfile site :opscode cookbook 'postgresql'

  33. Настраиваем 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' } } } end end Vagrantfile не нужно указывать зависимости кукбуки berkshelf автоматически подключаются в Vagrant’е
  34. Запускаем бокс $ berks install $ vagrant provision

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

    управление версиями
  36. Vagrant providers ‣ VirtualBox ‣ WMWare fusion ‣ AWS (https://github.com/mitchellh/vagrant-aws)

  37. Vagrant provisioners ‣ Chef Solo ‣ Chef Server ‣ Puppet

    Standalone ‣ Puppet Server ‣ Shell
  38. Полезные плагины ‣ vagrant-vbguest (https://github.com/dotless-de/ vagrant-vbguest) - следит за состоянием

    Guest Additions ‣ veewee (https://github.com/jedi4ever/veewee) - автоматизация создания Vagrant боксов
  39. None
  40. Примеры боксов для разработки ‣ Personal https://github.com/aderyabin/ vagrantfiles ‣ 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
  41. Полезные настройки Используем NFS для синхронизации каталогов Vagrant.configure("2") do |config|

    ... config.vm.synced_folder "~/projects", "/projects", :nfs => true end стандартный механизм медленный, так что используем NFS
  42. Полезные настройки Vagrant.configure("2") do |config| ... config.ssh.forward_agent = true end

    Форвардинг SSH ключей
  43. Vagrant.configure("2") do |config| ... config.vm.provider :virtualbox do |vb| vb.customize ["modifyvm",

    :id, "--memory", 1024] end end Полезные настройки Увеличиваем объем оперативной памяти
  44. В итоге + единое окружение у всех разработчиков/ тестировщиков и

    в продакшене ★ окружение легко создать и настроить ★ окружение изолировано ★ окружение легко скопировать/перенести + меньше время входа нового человека в проект + быстрая адаптация к новым требованиям
  45. Вопросы? anton.kalyaev@gmail.com github.com/akalyaev twitter.com/AntonKalyaev