SlideShare a Scribd company logo
1 of 35
Как приручить
проектное окружение
PHP User Group, Минск, Июнь’2014
Александр Курило, EPAM
«Приручить»?
Насколько окружение вам
подконтрольно?
Что будет, если сеть пропадет?
Что будет, если сервер исчезнет?
Что будет, если винчестер на рабочей
машине сдохнет?
Грустная история
Жил-был проект.
Жил-был сервер.
Всё было хорошо.
Пока не понадобился ещё один сервер.
Ещё один сервер?
2 часа!
alex@workstation:~$ ssh root@newserver
Linux EVBYMINSD234A 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Jun 17 14:39:08 2014 from workstation
root@newserver:~# apt-get install nginx-light php5-fpm php5-curl mysql-server
sudo
Reading package lists... Done
Building dependency tree
Reading state information... Done
sudo is already the newest version.
The following extra packages will be installed:
libaio1 libdbd-mysql-perl libdbi-perl libhtml-template-perl
libmysqlclient18 libnet-daemon-perl libonig2 libplrpc-perl libqdbm14 mysql-
client-5.5 mysql-common mysql-server-5.5 mysql-server-core-5.5 nginx-common
php5-common
The following NEW packages will be installed:
libaio1 libdbd-mysql-perl libdbi-perl libhtml-template-perl
libmysqlclient18 libnet-daemon-perl libonig2 libplrpc-perl libqdbm14 mysql-
client-5.5 mysql-common mysql-server mysql-server-5.5 mysql-server-core-5.5
nginx-common
nginx-light php5-common php5-curl php5-fpm
0 upgraded, 19 newly installed, 0 to remove and 0 not upgraded.
Need to get 13.7 MB of archives.
After this operation, 108 MB of additional disk space will be used.
Поехали!
Приехали :(
PHP Fatal error:
Call to undefined function ldap_bind()
Тоже мне проблема
apt-get install php5-ldap
Поехали!
Бдыщь :(
PHP Fatal error:
Class 'SplEnum' not found
Class 'MarkdownDocument' not found
Что-то не так
Написать инструкцию?
Написать инструкцию?
Скрипт?
Скрипт?
Использовать мудрость поколений
Использовать мудрость поколений
Provisioning
«Подготовка к работе, инициализация»
Управление конфигурацией
Как это выглядит?
1. Playbook
$ cat ansible/env.yml
---
- hosts: all
roles:
- repo-mirror
- repo-update-cache
- packages-ansible
- repo-dotdeb
- packages-system-base
< … >
Как это выглядит?
2. Roles (tasks, handlers, files, templates, vars)
$ tree ansible/roles/repo-mirror
ansible/roles/repo-mirror
├── defaults
│ └── main.yml
├── handlers
│ ├── main.yml
│ └── update_cache.yml
├── tasks
│ └── main.yml
└── templates
└── etc
└── apt
└── sources.list.j2
$ cat ansible/roles/repo-mirror/tasks/main.yml
---
- name: Set sources.list
sudo: yes
template: src=etc/apt/sources.list.j2 dest=/etc/apt/sources.list
register: repo_mirror
- include: ../handlers/main.yml
when: repo_mirror.changed
Как это выглядит?
3. Inventory
$ cat ansible/inventory/dev
[api-dev]
myproject-api.dev api_hostname=myproject-api.example.org
Как это выглядит?
Всё вместе:
alex@workstation:~/projects/sample$ ansible-playbook -i qa env.yml
PLAY [all]
********************************************************************
GATHERING FACTS
***************************************************************
ok: [default]
TASK: [repo-mirror | Set sources.list]
****************************************
ok: [default]
TASK: [repo-mirror | Update apt cache]
****************************************
skipping: [default]
TASK: [repo-update-cache | Update apt cache]
**********************************
ok: [default]
SSH? apt-get? Нет, спасибо
Поход по SSH на сервер и установка
пакетов вручную (и тем более сборка
из исходников) — антипаттерн!
Возпроизводимое окружение
Версионированное окружение
Состояние окружения синхронизировано с
состоянием проекта
Ещё один сервер?
10 минут!
А можно так прямо у меня?
Конечно! Можно поднять виртуалку.
А если в команде больше одного
человека?
А если нужно проверить всё под новой
версией ОС?
Vagrant
$ vagrant up
Box — это готовая, минимально
конфигурируемая виртуалка. Свой box
сделать тоже несложно!
Немного магии
config.vm.provision "ansible" do |ansible|
ansible.playbook = "ansible/dev.yml"
ansible.groups = {
"dev" => ["default"],
}
end
$ ansible-playbook -i qa env.yml$ vagrant provision
Итого
У каждого разработчика свое окружение
Управляется двумя командами:
$ vagrant up
$ vagrant provision
QA, staging, production etc — под тем же
провиженингом
Переустановил винду?
10 минут!
Нет сети?
Пофиг
Поменял винду на мак?
10 минут
Спасибо
Майклу Дехану за ansible
Митчеллу Хашимото за Vagrant
Вам за внимание :-)
kamazee
alex@kurilo.me

More Related Content

What's hot

DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)Ontico
 
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptСтажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptSmartTools
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...rit2011
 
Управление большим количеством физических серверов, Александр Берсенев, Инст...
 Управление большим количеством физических серверов, Александр Берсенев, Инст... Управление большим количеством физических серверов, Александр Берсенев, Инст...
Управление большим количеством физических серверов, Александр Берсенев, Инст...it-people
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Ontico
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ciАлександр Сигачев
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Ontico
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон ТурецкийCodeFest
 
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupBadoo Development
 
Загрузка, обработка, хранение и отдача статики
Загрузка, обработка, хранение и отдача статикиЗагрузка, обработка, хранение и отдача статики
Загрузка, обработка, хранение и отдача статикиKirill Mokevnin
 
Страх и ненависть в Event Bus
Страх и ненависть в Event BusСтрах и ненависть в Event Bus
Страх и ненависть в Event Bus0leGG
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»DevDay
 
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)Александр Сигачев
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_rumcroitor
 
Fabric для управления серверами
Fabric для управления серверамиFabric для управления серверами
Fabric для управления серверамиMaxim Kulsha
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Ontico
 

What's hot (20)

DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
 
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptСтажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
 
Введение в Docker
Введение в DockerВведение в Docker
Введение в Docker
 
Управление большим количеством физических серверов, Александр Берсенев, Инст...
 Управление большим количеством физических серверов, Александр Берсенев, Инст... Управление большим количеством физических серверов, Александр Берсенев, Инст...
Управление большим количеством физических серверов, Александр Берсенев, Инст...
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 
Mysql Replication
Mysql ReplicationMysql Replication
Mysql Replication
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон Турецкий
 
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
 
Загрузка, обработка, хранение и отдача статики
Загрузка, обработка, хранение и отдача статикиЗагрузка, обработка, хранение и отдача статики
Загрузка, обработка, хранение и отдача статики
 
Страх и ненависть в Event Bus
Страх и ненависть в Event BusСтрах и ненависть в Event Bus
Страх и ненависть в Event Bus
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»
 
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
 
Chef
ChefChef
Chef
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_ru
 
Continuousdelivery
ContinuousdeliveryContinuousdelivery
Continuousdelivery
 
Fabric для управления серверами
Fabric для управления серверамиFabric для управления серверами
Fabric для управления серверами
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
 

Viewers also liked

Citaten over onderwijs
Citaten over onderwijsCitaten over onderwijs
Citaten over onderwijsBijlesHuis
 
ความรู้เรื่อง Blogger
ความรู้เรื่อง Bloggerความรู้เรื่อง Blogger
ความรู้เรื่อง BloggerKanjanaporn Wiangwong
 
Networkingslideshare 131030124523-phpapp01
Networkingslideshare 131030124523-phpapp01Networkingslideshare 131030124523-phpapp01
Networkingslideshare 131030124523-phpapp01Marjorie Gray
 
Know the reason behind choosing bootstrap as css framework
Know the reason behind choosing bootstrap as css frameworkKnow the reason behind choosing bootstrap as css framework
Know the reason behind choosing bootstrap as css frameworkOmkarsoft Bangalore
 
Google plus collections by fromdev
Google plus collections by fromdevGoogle plus collections by fromdev
Google plus collections by fromdevSachin FromDev
 
Sizmek honours :: Data
Sizmek honours :: DataSizmek honours :: Data
Sizmek honours :: DataCarlosSizmek
 
Food Forward Trends Report - 2014 Australia
Food Forward Trends Report - 2014 AustraliaFood Forward Trends Report - 2014 Australia
Food Forward Trends Report - 2014 Australiawsaustralia
 
Food Forward Trends Report 2015 - Asia Pacific
Food Forward Trends Report 2015 - Asia PacificFood Forward Trends Report 2015 - Asia Pacific
Food Forward Trends Report 2015 - Asia Pacificwsaustralia
 

Viewers also liked (14)

001 eng o-net
001 eng o-net001 eng o-net
001 eng o-net
 
БИЗНЕС УСЛУГИ
БИЗНЕС УСЛУГИБИЗНЕС УСЛУГИ
БИЗНЕС УСЛУГИ
 
Internet
InternetInternet
Internet
 
Citaten over onderwijs
Citaten over onderwijsCitaten over onderwijs
Citaten over onderwijs
 
БИЗНЕС УСЛУГИ
БИЗНЕС УСЛУГИБИЗНЕС УСЛУГИ
БИЗНЕС УСЛУГИ
 
Pima
PimaPima
Pima
 
ความรู้เรื่อง Blogger
ความรู้เรื่อง Bloggerความรู้เรื่อง Blogger
ความรู้เรื่อง Blogger
 
Networkingslideshare 131030124523-phpapp01
Networkingslideshare 131030124523-phpapp01Networkingslideshare 131030124523-phpapp01
Networkingslideshare 131030124523-phpapp01
 
Know the reason behind choosing bootstrap as css framework
Know the reason behind choosing bootstrap as css frameworkKnow the reason behind choosing bootstrap as css framework
Know the reason behind choosing bootstrap as css framework
 
Google plus collections by fromdev
Google plus collections by fromdevGoogle plus collections by fromdev
Google plus collections by fromdev
 
Sizmek honours :: Data
Sizmek honours :: DataSizmek honours :: Data
Sizmek honours :: Data
 
Annual Report 2013
Annual Report 2013Annual Report 2013
Annual Report 2013
 
Food Forward Trends Report - 2014 Australia
Food Forward Trends Report - 2014 AustraliaFood Forward Trends Report - 2014 Australia
Food Forward Trends Report - 2014 Australia
 
Food Forward Trends Report 2015 - Asia Pacific
Food Forward Trends Report 2015 - Asia PacificFood Forward Trends Report 2015 - Asia Pacific
Food Forward Trends Report 2015 - Asia Pacific
 

Similar to Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeIosif Itkin
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 
Работа высоконагруженного DNS-сервера
Работа высоконагруженного DNS-сервераРабота высоконагруженного DNS-сервера
Работа высоконагруженного DNS-сервераudmlug
 
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковОпенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковYandex
 
Петр Леменков - Как облачные технологии меняют Linux-дистрибутивы
Петр Леменков - Как облачные технологии меняют Linux-дистрибутивы Петр Леменков - Как облачные технологии меняют Linux-дистрибутивы
Петр Леменков - Как облачные технологии меняют Linux-дистрибутивы Yandex
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Vadim Kruchkov
 
Проникновение в Docker с примерами
Проникновение в Docker с примерамиПроникновение в Docker с примерами
Проникновение в Docker с примерамиДмитрий Столяров
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментовVitalii Morvaniuk
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр КолесеньIT Share
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к AnsibleIvan Grishaev
 
Пакетирование для Debian/Ubuntu
Пакетирование для Debian/UbuntuПакетирование для Debian/Ubuntu
Пакетирование для Debian/Ubuntusamsolutionsby
 
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»WrikeTechClub
 

Similar to Как приручить проектное окружение. PHP UG Minsk, июнь'2014 (20)

Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Работа высоконагруженного DNS-сервера
Работа высоконагруженного DNS-сервераРабота высоконагруженного DNS-сервера
Работа высоконагруженного DNS-сервера
 
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковОпенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
 
Петр Леменков - Как облачные технологии меняют Linux-дистрибутивы
Петр Леменков - Как облачные технологии меняют Linux-дистрибутивы Петр Леменков - Как облачные технологии меняют Linux-дистрибутивы
Петр Леменков - Как облачные технологии меняют Linux-дистрибутивы
 
Применяем Ansible
Применяем AnsibleПрименяем Ansible
Применяем Ansible
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
 
Docker 1.9
Docker 1.9Docker 1.9
Docker 1.9
 
Instalarea DSpace
Instalarea DSpaceInstalarea DSpace
Instalarea DSpace
 
Docker penetration
Docker penetrationDocker penetration
Docker penetration
 
Проникновение в Docker с примерами
Проникновение в Docker с примерамиПроникновение в Docker с примерами
Проникновение в Docker с примерами
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментов
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень
 
Масштабируемый DevOps
Масштабируемый DevOpsМасштабируемый DevOps
Масштабируемый DevOps
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
 
Пакетирование для Debian/Ubuntu
Пакетирование для Debian/UbuntuПакетирование для Debian/Ubuntu
Пакетирование для Debian/Ubuntu
 
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»
 

Как приручить проектное окружение. PHP UG Minsk, июнь'2014

Editor's Notes

  1. Типичные варианты работы с окружением: 1) веб-сервер на локальной машине и куча проектов на нем; 2) удаленный dev-сервер, настроенный одним человеком. И это печально. Подчинить — значит контролировать окружение. Ну и, по возможности, самому диктовать правила, а не полагаться на него. Если у вас есть ответ на перечисленные вопросы, то … →
  2. Если нет — я расскажу историю одного проекта. Грустноватую.
  3. Жил был проект. На нем работало около четырех разработчиков. Все работали на одном сервере, заботливо настроенном первым тимлидом. Сервер этот располагался в корпоративном облаке, папка с проектом монтировалась по sshfs или самбе → медленные операции IO, сетевые задержки (датацентр). Задержки обычно до 1 мс, жить, в принципе, можно. Едем дальше. Жил-был сервер. На том же самом сервере крутилось приложение для QA. И вот, как-то раз, как ни странно, понадобилось вывести приложение за пределы ограниченного круга разработчиков-тестировщиков. Конечно, можно было просто создать еще один виртуальный хост, настроить еще одну базу данных, еще один сет индексов и источников данных для sphinx, бла-бла-бла. Однако это не особо-то решало проблему, потому что всем понятно, что разумеется, когда-то нужен будет и совершенно отдельный сервер. Сделовательно, с этим нужно было покончить. Окей, поехали.
  4. Ветеран devops’а ехидно ухмыльнется, откроет терминал и уверит в том, что новый сервер поднимет за пару часов от силы.
  5. Поставить пакеты, запилить конфиги — как-то так, в обшем.
  6. Ну, и через пару часов бодро отрапортует о том, что мол, окружение готово. Заливайтесь, мол, и пользуйтесь на здоровье. Залились. Открываем главную страницу.
  7. На ней пустота. И только где-то сверху, черным по белому (Fatal Error)
  8. Подумаешь, LDAP-расширения нету!
  9. Еще разок.
  10. Что-то как-то легче не стало.
  11. Сколько еще левых расширений использует этот код? Сколько там еще подводных камней? Никто не знает. Что с этим сделать?
  12. Ну, например, инструкцию написать. Это решает проблему только отчасти: всё-таки выполнение инструкции и добавление в нее шагов кроме памяти и совести разработчика никто не форсирует.
  13. Плохо!
  14. Написать скрипт?
  15. В общем, те, кто хоть раз пытался более-менее качественно автоматизировать установку проектного окружения шелл-скриптом наверняка поймут выражения фасада животного на слайде. Куча времени и тонны неподдерживаемого кода.
  16. Почти всё уже сделано до нас. Очень много кода, который управляет установкой и конфигурацией софта уже написано.
  17. Да-да, то, что нужно. Всё это — системы провиженинга.
  18. Описание состояния сервера Провиженеры могут требовать агента на управляемом сервере. Пара слов об Ansible без читки мануалов: 1. Не требует от сервера почти ничего, кроме ssh (разве что Python, который и так там, скорее всего, есть вместе с системой) и нескольких питоновский модулей, который в большинстве случаев просто поставить сам. 2. Всё примерно так, как вы себе представляете. Он сам ходит на сервер, ставит пакеты и пишет конфиги. 3. Немного подробнее о применяемых там терминах.
  19. Playbook — собственно, описание окружения. Последовательность задач, которую нужно выполнить на серверах, чтобы там было всё, что нужно приложению.
  20. Роль — объединение задач, переменных для исполнения и handler’ов (хуков) для какой-то конкретной цели. Например, заставить сервер использовать определенное зеркало, добавить сторонний репозиторий или установит веб-сервер.
  21. Перечень серверов, которые входят в окружение для одного экземпляра приложения (возможно со значениями переменных для этого конкретного хоста)
  22. Всё вместе — ansible выполняет таски и отчитывается.
  23. Когда-то года два с половиной назад на Хабре появилась статья — 5 основных антипаттернов системного администрирования. Там было четко и недвусмысленно сказано: настройка сервера по ssh руками — антипаттерн. Тогда я косо посмотрел на нее и прошел мимо. http://habrahabr.ru/post/136323/
  24. А сейчас вот прихожу ровно к тому же: делать этого не стóит, потому что изменения эти локальны. Конфиги провиженинга же при правильном подходе сразу прорастут на всех окружениях, где это будет нужно.
  25. В целом, использование системы провиженинга и хранение рецептов провиженера вместе с проектом дает следующие преимущества
  26. С серверами разобрались. Что делать разработчикам?