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 рецептов

Anton Kaliaev

April 16, 2013
Tweet

More Decks by Anton Kaliaev

Other Decks in Programming

Transcript

  1. Реальный мир $ 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
  2. Почему? ‣ создавать рабочие окружения тяжело ‣ распространять еще сложнее

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

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

    перезагрузка VM vagrant up vagrant reload vagrant halt доступ по ssh vagrant ssh
  5. Что такое Vagrant бокс? ‣ заранее упакованные образы виртуальных машин

    ‣ список http://www.vagrantbox.es/ ‣ вы можете создать бокс сами :)
  6. Vagrant Базовый конфиг (Vagrantfile) Vagrant.configure("2") do |config| config.vm.box = "ubuntu"

    config.vm.box_url = "https://github.com/downloads/roderik/ VagrantQuantal64Box/quantal64.box" end
  7. 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
  8. Что получаем? ‣ легкость создания и настройки ‣ изоляция (на

    каждый проект свой бокс) ‣ отделение среды разработки от ОС
  9. Chef cookbook ‣ набор действий по установке, настройке и запуску

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

    cookbooks/openssl $ git clone https://github.com/opscode-cookbooks/ postgresql.git cookbooks/postgresql вручную
  11. Настраиваем 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
  12. Что получаем? ‣ совпадает с продакшеном (можно и нужно использовать

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

    в git репозитории) ‣ вы можете упаковать существующий бокс Способы распространения $ vagrant package --output=/tmp/demo.box
  14. Berkshelf ‣ менеджер кукбуков (как Bundler для Ruby gems) http://berkshelf.com/

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

    berkshelf-vagrant $ berks init перед этим нужно установить ruby (http://www.ruby-lang.org/en/downloads/)
  16. Настраиваем 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’е
  17. Vagrant provisioners ‣ Chef Solo ‣ Chef Server ‣ Puppet

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

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

    ... config.vm.synced_folder "~/projects", "/projects", :nfs => true end стандартный механизм медленный, так что используем NFS
  21. Vagrant.configure("2") do |config| ... config.vm.provider :virtualbox do |vb| vb.customize ["modifyvm",

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

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