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

7,033 views
6,857 views

Published on

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

  1. 1. БЫСТРОЕРАЗВЕРТЫВАНИЕСРЕДЫРАЗРАБОТКИ С Антон Каляев
  2. 2. ”Vagrant will change how you work” Vagrant изменит ваш подход к разработке
  3. 3. Как я раньше жил без него?
  4. 4. Идеальный мир$ git clone git://github.com/project.git$ run
  5. 5. Мы счастливы
  6. 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
  7. 7. Мы в ****
  8. 8. Почему?‣ создавать рабочие окружения тяжело‣ распространять еще сложнее (README неустановит требуемое ПО за нас)‣ никакой изоляции (конфликтующиебинарники)‣ никаких гарантий (“Но это работает на моеймашине”)
  9. 9. Решение
  10. 10. Идея ОСВиртуальная ОС Виртуальная ОС
  11. 11. Что такое Vagrant?‣ инструмент для создания и распространениярабочих окружений на базе виртуальныхмашин (http://www.vagrantup.com/)
  12. 12. Vagrant Управление VM из командной строки остановка VM vagrant halt перезагрузка VM vagrant reloadдоступ по ssh vagrant ssh старт VM vagrant up
  13. 13. Устанавливаем Vagrant1. Устанавливаем VirtualBox (https://www.virtualbox.org/wiki/Downloads)2. Устанавливаем Vagrant (http://downloads.vagrantup.com/)3. Загружаем Vagrant бокс
  14. 14. Что такое Vagrant бокс?‣ заранее упакованные образы виртуальныхмашин‣ список http://www.vagrantbox.es/‣ вы можете создать бокс сами :)
  15. 15. Как загрузить Vagrant бокс? $ vagrant box add {title} {url}
  16. 16. Запускаем бокс$ vagrant init {title}$ vagrant up
  17. 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. 18. VagrantСинхронизация каталогов между гостевой и родной ОСVagrant.configure("2") do |config| ... config.vm.synced_folder "~/projects", "/projects"end
  19. 19. 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: 8080end
  20. 20. Что получаем?‣ легкость создания и настройки‣ изоляция (на каждый проект свой бокс)‣ отделение среды разработки от ОС
  21. 21. или как управлять тысячей серверов‣ система менеджмента конфигурации (SCM)‣ воплощение принципа “Инфраструктура каккод”
  22. 22. Chef cookbook‣ набор действий по установке, настройке изапуску какого-то определенногопрограммного пакета‣ обычно кроссплатформенные‣ состоит из одного или нескольких рецептов(recipes)‣ коллекция от Opscode https://github.com/opscode-cookbooks
  23. 23. Установка и настройка ПО На примере Postgresql
  24. 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. 25. Настраиваем provision VagrantfileVagrant.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
  26. 26. Запускаем бокс$ vagrant up
  27. 27. Что получаем?‣ совпадает с продакшеном (можно и нужноиспользовать те же инструменты напродакшене)‣ переносимость
  28. 28. Переносимость Способы распространения‣ вы можете скопировать файлы (или лучшеразместить их в git репозитории)‣ вы можете упаковать существующий бокс $ vagrant package --output=/tmp/demo.box
  29. 29. Установка и настройка ПО Продвинутый уровень :)
  30. 30. Berkshelf‣ менеджер кукбуков (как Bundler для Rubygems) http://berkshelf.com/ / ht tps://github.com - librarian-chef Альтернатива e/librarian-chef applicationsonlin
  31. 31. Устанавливаем Berkshelf перед этим нужно установить ruby (http://www.ruby-lang.org/en/downloads/)$ gem install berkshelf$ vagrant plugin install berkshelf-vagrant$ berks init
  32. 32. Добавляем кукбук postgresql Berksfile site :opscode cookbook postgresql
  33. 33. Настраиваем provision VagrantfileVagrant.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 } } } endend
  34. 34. Запускаем бокс$ berks install$ vagrant provision
  35. 35. Что получаем?‣ никакого копирования‣ автоматическое подгрузка зависимостей‣ управление версиями
  36. 36. В итоге+ единое окружение у всех разработчиков/тестировщиков и в продакшене ★ окружение легко создать и настроить ★ окружение изолировано ★ окружение легко скопировать/перенести+ меньше время входа нового человека в проект+ быстрая адаптация к новым требованиям
  37. 37. Vagrant providers‣ VirtualBox‣ WMWare fusion‣ AWS (https://github.com/mitchellh/vagrant-aws)
  38. 38. Vagrant provisioners‣ Chef Solo‣ Chef Server‣ Puppet Standalone‣ Puppet Server‣ Shell
  39. 39. Полезные плагины‣ vagrant-vbguest (https://github.com/dotless-de/vagrant-vbguest) - следит за состоянием GuestAdditions‣ veewee (https://github.com/jedi4ever/veewee) -автоматизация создания Vagrant боксов
  40. 40. Примеры боксов для разработки‣ 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. 41. Полезные настройки Используем NFS для синхронизации каталоговVagrant.configure("2") do |config| ... config.vm.synced_folder "~/projects", "/projects", :nfs => trueend стандартный механизм медленный, так что используем NFS
  42. 42. Полезные настройки Форвардинг SSH ключейVagrant.configure("2") do |config| ... config.ssh.forward_agent = trueend
  43. 43. Полезные настройки Увеличиваем объем оперативной памятиVagrant.configure("2") do |config| ... config.vm.provider :virtualbox do |vb| vb.customize ["modifyvm", :id, "--memory", 1024] endend
  44. 44. Вопросы? anton.kalyaev@gmail.com github.com/akalyaev twitter.com/AntonKalyaev

×