Last active
November 27, 2015 18:20
-
-
Save the-teacher/780fe44410a197745474 to your computer and use it in GitHub Desktop.
Конфа
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
0 | |
Vagrant И Chef. От Dev окружения до развертки Rails приложения. | |
1 | |
Зыкин Илья. | |
github.com/the-teacher | |
2 | |
Учитель информатики | |
В 2006 узнал о ruby | |
В 2008 сделал свой первый `rake db:migrate` | |
С 2011 пишу production код на Rails | |
3 | |
Специализация: | |
Frontend / CMS / ECommerce | |
4 | |
Я исповедую: | |
Простоту | |
Изоляцию | |
Управление сложностью | |
Business-driven development | |
5 | |
Для кого | |
Разработчик, который сидит под WIN 0_o | |
Фрилинсер, переключающийся между разнородными проектами | |
Тимлид/Техдир, которому нужно избежать пробелмы "MacOS обновился - ничего не работает. Вернусь к работе дня через 3" | |
Разработчик, который хочет получить окружение сходное с production для дебага | |
СисАдмин, который хочет разобраться с Chef | |
6 | |
Что делает Vagrant | |
1. Запускает процесс установки ОС (Debian Linux) в виртуальную машину (Virtual Box) | |
2. Устанавливает ssh соединение, прокидывает ключи | |
3. Устанавливает в ВМ софт по заданному сценарию (bash, chef, ansible ...) | |
4. Монтирует заданный каталог HOST машины в ВМ (GUEST) | |
5. Биндит порты между HOST и GUEST | |
7 | |
Итого | |
Запуск приложения в ВМ (полная изоляция) | |
Редактирование кода в родной среде | |
Просмотр результата в родной среде | |
Готовность к запуску APP через час | |
8 | |
Как этого добиться? | |
Установить VirtualBox | |
Установить Vagrant | |
Добавить в проект Vagrantfile + Cheffile | |
cd APP && vagrant up | |
9 | |
Анатомия Vagrantfile | |
Vagrant.configure("2") do |config| | |
config.vm.box = "ubuntu/trusty64" | |
config.vm.provider :virtualbox do |vb| | |
vb.customize ["modifyvm", :id, "--memory", "2048"] | |
vb.cpus = 2 | |
end | |
config.vm.network :forwarded_port, guest: 80, host: 3000 | |
config.vm.synced_folder '.', '/vagrant', nfs: true | |
# Your recipes | |
end | |
10 | |
Анатомия Cheffile | |
# encoding: utf-8 | |
site 'http://community.opscode.com/api/v1' | |
cookbook 'apt', '~> 2.8.2' | |
cookbook 'build-essential', '~> 2.2.3' | |
cookbook 'git', '~> 4.3.4' | |
cookbook 'rvm', '~> 0.9.4' | |
cookbook 'nodejs', '~> 2.4.2' | |
cookbook 'mysql', '~> 6.1.0' | |
cookbook 'current_project', | |
path: './cookbooks_addons/current_project' | |
11 | |
Использование | |
Vagrant.configure("2") do |config| | |
# your code | |
config.vm.provision :chef_solo do |chef| | |
chef.version = "11.18" | |
chef.cookbooks_path = ["cookbooks", "cookbooks_addons"] | |
chef.add_recipe 'apt' | |
chef.add_recipe 'build-essential' | |
chef.add_recipe 'git::source' | |
chef.json = { | |
git: { | |
version: '2.5.3', | |
url: 'https://nodeload.github.com/git/git/tar.gz/v2.5.3' | |
} | |
} | |
end | |
end | |
12 | |
Подробнее о структуре Chef рецептов я рассказывал в видео: | |
https://goo.gl/RpyTtC | |
13 | |
Отлаженные на локальной машине Chef рецепты можно использовать для поднятия реального сервера | |
14 | |
Chef | |
Cистема управления конфигурациями | |
Де-факто: | |
Поднять сервер | |
Установить софт | |
Сконфигурировать софт | |
Получить статус | |
15 | |
Сервера можно поднимать: | |
руками | |
автоматизированно скриптами | |
автоматизированно спец. средствами (chef, puppet, ansible etc.) | |
Инфраструктуры можно поднимать: | |
автоматизированно скриптами | |
автоматизированно спец. средствами (chef, puppet, ansible etc.) | |
16 | |
О практиках | |
1) Суровые сисадмины предпочитают bash-like scripting | |
2) Capistrano тоже могёт! | |
Если добавить в Cap шаблонизацию конфигов и написать ряд рецептов, | |
то Cap тоже может настраивать сервера. | |
17 | |
Чем отличается Chef от Capistrano | |
Cap подает много управляющих запросов (via shh) на сервер | |
Chef подает один управляющий запрос серверу | |
Cap рецепты хранятся на локальной машине | |
Chef рецепты хранятся на удаленной машине. Мы пишем их и загружаем в хранилище рецептов | |
Cap не имеет встроенной шаблонизации и системы управления параметрами | |
Chef имеет шаблонизацию из коробки и управление параметрами рецептов | |
18 | |
О терминах | |
chef - целый комплекс инструментов | |
knife - утилита управления на рабочей машине | |
chef-server (chef-solo, chef-zero) - хранилище инструкций | |
chef-client - утилита на сервере, выполняющая инструкции с chef-server | |
19 | |
Как работает Chef | |
1) Создать сервер и поставить на него chef-client | |
knife digital_ocean droplet create --bootstrap | |
=> 188.166.92.172 | |
knife bootstrap 188.123.92.111 --sudo -x admin -P Password | |
2) Загрузить кукбуки в хранилище | |
knife cookbook upload --all | |
3) Попросить шефа для данной ноды запустить chef-client | |
knife ssh "name:node_server_name" "chef-client -l info" -x root -G 188.123.92.111 | |
"name:node_server_name" -- имя набора инструкций и параметров к исполнению | |
20 | |
Вопросы на входе | |
1) Как установить chef? | |
2) Где взять сервак для экспериментов? | |
3) Как запустить chef-server? | |
4) Что нужно, что бы это все заработало? | |
21 | |
1) Как установить chef? | |
https://downloads.chef.io/chef-dk | |
2) Где взять сервак для экспериментов? | |
Например, DigitalOcean | |
3) Как запустить chef-server? | |
Не надо ничего запускать | |
Для пробы достаточно зарегистрироваться на сайте | |
До 5 серверов обслуживаются бесплатно | |
manage.chef.io | |
22 | |
Что нужно, что бы это все заработало? | |
Gemfile | |
``` | |
source "https://rubygems.org" | |
gem 'librarian-chef' | |
gem 'knife-digital_ocean' | |
``` | |
Cheffile | |
``` | |
site 'https://supermarket.getchef.com/api/v1' | |
cookbook 'git', '~> 4.3.4' | |
cookbook 'rvm', '~> 0.9.4' | |
cookbook 'nodejs', '~> 2.4.2' | |
``` | |
23 | |
Файлы из аккаутна chef.io | |
``` | |
.chef/project-validator.pem | |
.chef/project.pem | |
.chef/knife.rb | |
``` | |
24 | |
.chef/knife.rb | |
``` | |
current_dir = File.dirname(__FILE__) | |
log_level :info | |
log_location STDOUT | |
node_name "the_teacher" | |
client_key "#{current_dir}/the_teacher.pem" | |
validation_client_name "project-validator" | |
validation_key "#{current_dir}/project-validator.pem" | |
chef_server_url "https://api.chef.io/organizations/project" | |
cookbook_path ["#{current_dir}/../cookbooks"] | |
knife[:digital_ocean_access_token] = 'XXXXXXXXXXXXXXXXX' | |
``` | |
25 | |
knife digital_ocean sshkey create -n do_ssh_key -i ~/.ssh/id_rsa.pub | |
(librarian-chef update) && (knife cookbook upload --all) | |
knife digital_ocean droplet create \ | |
--server-name example.com \ | |
--image debian-8-x64 \ | |
--location ams3 \ | |
--size 512mb \ | |
--ssh-keys 1519722 \ | |
--run-list "recipe[project_recipe]" \ | |
--bootstrap | |
26 | |
Деплой | |
У chef есть свой DSL. | |
Набор процедур DEPLOY обеспечивает процесс деплоя аналогичный Capistrano | |
https://docs.chef.io/resource_deploy.html | |
ИТОГО | |
1) Ставим Vagrant для экспериментов в изолированной среде | |
2) Пробуем Chef, как инструмент развертки сервера на ВМ. Изучаем DSL. Учимся писать рецепты | |
3) Заводим себе аккаунт на chef.io и получаем там минимальный набор данных для старта | |
4) Заводим сервер на DO и пробуем наработать практику на боевой машине | |
... PROFIT! | |
27 | |
Заметки из жизни | |
1) Не мешайте свои Vagrant файлы c файлами приложения | |
поместите все что связано с Vagrant в отдельный каталог | |
смонтируйте ВМ не к `.` а к `../`. Держите свое приложение чистым | |
2) Не сходите с ума по chef если в проекте меньше 10-ка серверов | |
Автоматизацию на bash скриптах поймет и сможет поддерживать каждый сисадмин. | |
bash + ruby + chef DSL -- очень затратная связка, которой владеют намного меньше людей. | |
Они знают об этом. Они просят много больше денег. | |
3) Многие говорят об универсальности chef рецептов. Говорят, что хороший cookbook делает все как надо на 100500 версиях ОС. | |
В жизни мало кто решится на содержание зоопарка ОС внутри одной инфраструктуры. | |
На практике выбирают один образ ОС и пишут рецепты под него. | |
Но стоит ли овчинка выделки? Может стоит реализовать бОльший кусок конфигурации в bash стиле? | |
Поддержка bash скриптов в разы проще и дешевле. | |
4) Я отказался от Vagrant при ежедневной разработке | |
Жрет батарею. Греет мас. Сейчас у меня нет нужды поддерживать разнородные проекты. | |
28 | |
Думайте своей головой! | |
29 | |
Спасибо! |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment