Приведу простой
пример из практики Git in Sky. К нам обратилась компания, которая занимается разработками веб-сервисов, с просьбой создать автоматизированную систему управления развертывания серверов. На тот момент у них не было системного инженера, и они решили передать эту работу нам.
Задача для нас была вполне типовая: создать виртуальную машину на базе Linux Debian 8, развернуть на ней около 16 системных программ. Мы должны были написать скрипты на Ansible, которые будут разворачивать каждый из этих программных компонентов и обеспечивать их настройку. Затем, по команде пользователя, в эту подготовленную среду должно «деплоиться» (развертываться) пользовательское приложение из указанных репозиториев с кодом.
Через специальный веб-интерфейс, предоставленный заказчиком, происходит разворачивание программы из репозитория, и дальше она тестируется в необходимых по условию задачи режимах. Для нас эта работа на 7 дней (на самом деле меньше, но на непредвиденные случаи мы всегда берем срок с запасом).
Кроме того, наш клиент попросил
обеспечить разворачивание своих программ на 6 production серверах:
- Web (nginx, php7-fpm, Cache (Redis));
- MasterDatabase (PostgreSQL 9.4, PostGis);
- Slave Database (PostgreSQL 9.4, PostGis);
- Sphinx search engine (+Cache (Redis));
- Mail server (smtp) (+Cache (Redis));
- Мониторинг (Zabbix/Nagios/Cacti).
При этом должен осуществляться постоянный мониторинг, автоматический откат системы при сбое с сохранением данных и прочие моменты, которые необходимы для обеспечения безопасности проекта. В заключение нас попросили написать регламент эксплуатации созданного проекта.
Составление технического задания фактически происходило по методике DevOps, когда с нашей стороны в нем участвовали системные инженеры, а со стороны клиента — программисты. На выходе мы получили сбалансированный проект, который учитывал и возможность оперативного обновления, и высокую отказоустойчивость.