• A
  • A
  • A
  • АБB
  • АБB
  • АБB
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта
Бакалавриат 2026/2027

Программная инфраструктура

Когда читается: 3-й курс, 1, 2 модуль
Охват аудитории: для своего кампуса
Язык: русский
Кредиты: 4
Контактные часы: 56

Программа дисциплины

Аннотация

Курс посвящён инфраструктурной стороне разработки программных систем. Студенты проходят путь приложения от локального запуска до автоматизированного развёртывания и безопасного выпуска новой версии. Практика строится вокруг одного сквозного учебного сервиса. Студенты работают с Make, Linux, nginx, Ansible, контейнерами и CI/CD, затем подключают логи, метрики, dashboard, алерты и runbooks. Всего в курсе девять домашних заданий, каждое продолжает предыдущий этап. В качестве зависимостей приложения используются PostgreSQL и MinIO. Студенты самостоятельно разворачивают приложение, его зависимости и nginx на одной учебной виртуальной машине; затем переводят развёртывание в контейнерную модель с Docker Compose и Ansible. Курс формирует разработчика, который понимает жизненный цикл сервиса, умеет автоматизировать повторяемые операции и последовательно диагностировать типовые проблемы.
Цель освоения дисциплины

Цель освоения дисциплины

  • Понимать путь сервиса от кода до работающего приложения: сборка, конфигурация, доставка, запуск, сеть и зависимости
  • Организовывать воспроизводимое локальное окружение с помощью Make, переменных окружения и документации
  • Использовать Linux как среду исполнения и диагностировать проблемы процессов, systemd, ресурсов, DNS, TCP, TLS и reverse proxy
  • Различать provisioning и configuration management и автоматизировать конфигурацию виртуальной машины с помощью Ansible
  • Собирать и публиковать контейнерные образы, описывать сервис через Docker Compose и понимать задачи Kubernetes как среды исполнения
  • Развивать CI/CD: проверки, сборка, публикация, деплой, smoke checks, release gates и rollback
  • Использовать логи и метрики для диагностики, строить dashboard и настраивать алерты с понятной критичностью
  • Готовить runbooks, расследовать инцидент и обосновывать стратегию безопасного релиза
Планируемые результаты обучения

Планируемые результаты обучения

  • Понимает путь сервиса от кода до работающего приложения: сборка, конфигурация, доставка, запуск, сеть и зависимости.
  • Организует воспроизводимое локальное окружение с помощью Make, переменных окружения и документации.
  • Использует Linux как среду исполнения и диагностировать проблемы процессов, systemd, ресурсов, DNS, TCP, TLS и reverse proxy.
  • Различает provisioning и configuration management и автоматизировать конфигурацию виртуальной машины с помощью Ansible.
  • Собирает и публикует контейнерные образы, описывает сервис через Docker Compose и понимает задачи Kubernetes как среды исполнения.
  • Развивает CI/CD: проверки, сборка, публикация, деплой, smoke checks, release gates и rollback
  • Использует логи и метрики для диагностики, строит dashboard и настраивает алерты с понятной критичностью
  • Готовит runbooks, расследует инцидент и обосновывает стратегию безопасного релиза
Содержание учебной дисциплины

Содержание учебной дисциплины

  • Программная инфраструктура глазами разработчика. Путь приложения от исходного кода до работающего сервиса. Окружение, зависимости, конфигурация, артефакты и документация. Интерфейс проекта для разработчика. Назначение Make.
  • Подготовка учебного приложения. Создание README, .env.example и Makefile с командами help, init, run, test, lint, clean.
  • Linux как среда исполнения приложения. Процессы, пользователи, группы, права доступа, файловая система, переменные окружения, сигналы, CPU, память и дисковое пространство. Systemd, journald и жизненный цикл службы.
  • Ручное развёртывание приложения на виртуальной машине. Создание системного пользователя и systemd-unit. Работа с systemctl, journalctl, ps, top, free, df, du, lsof и ss.
  • Минимальный сетевой набор инженера. IP-адреса, CIDR, маршруты, порты, TCP, DNS, HTTP, reverse proxy, TLS, сертификаты и центры сертификации. Путь запроса от пользователя до приложения.
  • Настройка nginx. Работа с ip, ss, curl, dig, traceroute и openssl s_client.
  • Основы CI/CD. Pipeline как исполняемое описание процесса проверки и доставки. Стадии, jobs, runner, переменные, секреты, кэш и артефакты. Связь коммита, версии приложения и результата сборки.
  • Создание первого pipeline: lint, тесты и сборка приложения. Настройка переменных CI. Разбор неуспешного pipeline.
  • Infrastructure as Code и введение в Ansible. Provisioning и configuration management. Terraform и Ansible:в чем разница?. Inventory, ad-hoc commands, модули, playbook, роли и идемпотентность.
  • Работа в готовой структуре Ansible-проекта. Группа service, первый playbook-оркестратор и первая роль. Установка пакетов, пользователи, каталоги, файлы и службы. Проверка повторного запуска.
  • Ansible для воспроизводимого деплоя. Переменные, facts, group_vars, Jinja2, conditions, loops, handlers, secrets и организация ролей.
  • Полный автоматизированный деплой приложения и nginx на виртуальную машину. Конфигурация через шаблоны, smoke-проверка и доказательство идемпотентности.
  • Контейнеры, артефакты и registry. OCI-образ, контейнер, Dockerfile, слои, build context, tag, digest и registry. Пользователь контейнера, PID 1, сигналы, environment и файловая система контейнера.
  • Создание Dockerfile и multi-stage build. Запуск приложения от непривилегированного пользователя. Сборка образа в CI/CD и публикация образа в registry.
  • Docker Compose как способ декларативного описания и запуска многокомпонентного приложения на одном хосте. Ограничения модели одного хоста и задачи платформ оркестрации. Обзор Kubernetes и его основных абстракций
  • Создание Compose-сервисов и запуск приложения через Docker Compose. Подготовка Ansible-роли для установки Docker и деплой Compose-проекта на виртуальную машину. Проверка поведения при недоступности зависимости.
  • Логи - расследуем ошибку пользователя. Как расследовать конкретную проблему пользователя. Structured logging. Request ID / correlation ID / import ID. Уровни логирования. Ошибка для пользователя vs ошибка для поддержки vs ошибка для разработчика
  • Добавление structured logs на примере ошибки invalid CSV. Настройка доставки логов в Sage. Поиск конкретной ошибки пользователя в Sage и log viewer. Проверка достаточности контекста для расследования.
  • Метрики: как понять, что сервису плохо. Отличие метрик от логов. Системные и прикладные метрики. Counter, gauge и histogram. Трафик, ошибки, задержка, насыщение ресурсов и состояние внешней зависимости.
  • Подключение системного экспортера и endpoint /metrics. Настройка scraping. Построение запросов по трафику, ошибкам, задержке, CPU, памяти и диску. Анализ контролируемого ухудшения состояния сервиса.
  • Grafana и подходы к построению dashboard. Обзорные и диагностические dashboard. Golden Signals, выбор панелей, переменные, единицы, легенды, пороги, аннотации и типовые ошибки
  • Построение dashboard по Golden Signals. Подготовка обзорного и диагностического уровней. Настройка переменных, единиц и легенд. Проверка dashboard на контролируемом сценарии.
  • Алерты, критичность и runbooks: когда и как реагировать. Симптом и причина, пороги, окна, задержка срабатывания, firing и recovery. Критичность, приоритет реакции, actionable alert и эскалация.
  • Настройка правил алертинга. Назначение критичности. Проверка firing и recovery. Подготовка runbooks. Диагностика контролируемого сбоя и подтверждение восстановления сервиса.
  • Безопасный релиз и стратегии деплоя. Почему deploy ломает production. Release и deploy. Risk-based release. Rolling, recreate, blue/green, canary и shadow deploy. Smoke checks, release gates и rollback. Почему «задеплоилось» не означает «релиз успешен».
  • Выкатка новой версии сервиса. Добавление smoke checks после deploy. Контролируемая поломка релиза, поиск деградации по dashboard и alerts, rollback. Сравнение rolling, canary и blue/green.
Элементы контроля

Элементы контроля

  • неблокирующий Домашнее задание 1
    Тема: Локальный запуск с Makefile В рамках выполнения дз необходимо: подготовить README; создать .env.example; оформить Makefile; добавить команды help, init, run, test, lint, clean; проверить запуск проекта в чистом окружении.
  • неблокирующий Домашнее задание 2
    Тема: Ручной деплой приложения и компонентов В рамках выполнения дз необходимо: создать системного пользователя приложения; подготовить каталоги и настроить права доступа; развернуть приложение как systemd-службу; развернуть PostgreSQL и MinIO ; развернуть и настроить nginx для публикации приложения; вынести конфигурацию приложения из исходного кода; настроить запуск служб после перезагрузки; проверить журналы приложения и компонентов; проверить пользовательский HTTP-сценарий; продемонстрировать состояние процессов и открытых портов; локализовать предложенную базовую неисправность; подтвердить вывод командами и журналами.
  • неблокирующий Домашнее задание 3
    Тема: Деплой из CI/CD с помощью Ansible В рамках выполнения дз необходимо: подготовить inventory с целевой группой service; написать роли для: деплоя приложения установки и настройки PostgreSQL установки и настройки MinIO установки и настройки nginx для каждой роли: автоматизировать подготовку операционной системы; автоматизировать установку необходимых пакетов; автоматизировать создание пользователей и каталогов; вынести изменяемую конфигурацию в переменные; формировать конфигурационные файлы из шаблонов; применять handlers только при изменении конфигурации; корректно передавать переменные и секреты; завершать job ошибкой при неуспешном деплое; выполнять smoke-проверку после деплоя; проверить повторный запуск на идемпотентность; в CI/CD: запуск линтов запуск тестов запуск Ansible-деплоя запуск smoke проверок
  • неблокирующий Домашнее задание 4
    Тема: Контейнеризация и контейнерный деплой В рамках выполнения дз необходимо: подготовить multistage Dockerfile приложения; обеспечить сборку образа; передавать конфигурацию приложению вне образа; публиковать образ в registry; связать версию образа с коммитом или тегом репозитория; подготовить Compose-конфигурацию; описать Compose-сервисы приложения, PostgreSQL, MinIO и nginx, а также необходимые связи; подготовить Ansible-роль установки Docker на VM; установить Docker Compose plugin через Ansible; развернуть Compose-проект через Ansible; передавать в деплой конкретную версию образа; обновлять контейнерную версию сервиса; выполнять smoke-проверку после деплоя.
  • неблокирующий Домашнее задание 5
    Тема: Доставка логов в Sage В рамках выполнения дз необходимо: убедиться в наличии структурированных логов у приложения; настроить доставку прикладных логов в Sage; настроить доставку необходимых инфраструктурных логов в Sage; найти логи конкретного запроса; подтвердить поступление логов запросом в Sage.
  • неблокирующий Домашнее задание 6
    Тема: Доставка метрик в Sage В рамках выполнения дз необходимо: предоставить endpoint’ы с прикладными и системными метриками; настроить vmagent и node exporter для сбора прикладных и системных метрик; настроить отправку собранных vmagent метрик в Sage; добавить необходимые labels; подтвердить поступление метрик запросами в Sage.
  • неблокирующий Домашнее задание 7
    Тема: Grafana и Golden Signals В рамках выполнения дз необходимо: определить применимые к сервису Golden Signals; подготовить запросы для оценки трафика; подготовить запросы для оценки ошибок; подготовить запросы для оценки задержки; подготовить запросы для оценки утилизации ресурсов; добавить отображение состояния внешней зависимости; собрать dashboard из подготовленных запросов; настроить названия, единицы измерения и легенды; объяснить изменение состояния сервиса по данным dashboard.
  • неблокирующий Домашнее задание 8
    Тема: Алертинг и runbooks В рамках выполнения дз необходимо: определить значимые условия отказа или деградации; подготовить правила алертинга; настроить задержку срабатывания там, где она необходима; добавить понятные summary и description; проверить переход алертов в состояние firing; проверить восстановление алертов; подготовить runbook для каждого основного алерта; связать runbook с логами, метриками и проверками; провести диагностику по собственному runbook; подтвердить восстановление пользовательского сценария.
  • неблокирующий Домашнее задание 9
    Тема: Безопасный релиз и стратегия деплоя ( В рамках выполнения ДЗ необходимо: выбрать одну стратегию деплоя по варианту; доработать текущий процесс деплоя под выбранную стратегию; добавить smoke checks после deploy; добавить release gate; обеспечить возможность rollback; провести контролируемый неуспешный релиз; обнаружить деградацию по dashboard или alerts; выполнить rollback и подтвердить восстановление сервиса; кратко описать ограничения выбранной стратегии. Допустимые стратегии: recreate, rolling, blue/green, canary.
Промежуточная аттестация

Промежуточная аттестация

  • 2026/2027 2nd module
    Каждое ДЗ оценивается в первичных баллах согласно таблице: Форма контроля - Тема - Первичные баллы ДЗ 1 - Локальный запуск с Makefile - 5; ДЗ 2 - Ручной деплой и systemd - 10; ДЗ 3 - CI/CD и Ansible-деплой - 20; ДЗ 4 - Контейнеризация и деплой - 20; ДЗ 5 - Доставка логов в Sage - 9; ДЗ 6 - Сбор метрик в Sage - 9; ДЗ 7 - Grafana и Golden Signals - 8; ДЗ 8 - Алертинг и runbooks - 9; ДЗ 9 - Безопасный релиз - 10; Итого - 100 Зачтённый балл за работу рассчитывается по формуле: P_i = B_i * K_i где: B_i -первичный балл за ДЗ; K_i - коэффициент срока первой содержательной сдачи. Коэффициенты: в срок - 1,0; просрочка на 1 день - 0,9; просрочка на 3 дня - 0,8; более 14 дней до конца семестра - 0,4. Накопленный балл: S = P_1 + P_2 + P_3 + P_4 + P_5 + P_6 + P_7+ P_8+ P_9 Максимальное значение S равно 100. S округляется до сотых и переводится в итоговую оценку: Первичные баллы - Оценка 0-19,99 - 1; 20-34,99 - 2; 35-49,99 - 3; 50-59,99 - 4; 60-69,99 - 5; 70-77,99 - 6; 78-84,99 - 7; 85-90,99 - 8; 91-96,99 - 9; 97-100 - 10. Для оценки 8, 9 или 10 должны быть сданы все девять ДЗ. ДЗ считается сданным, если представлен результат и получено не менее 25% первичных баллов. Если расчётная оценка не ниже 8, но хотя бы одно ДЗ не сдано, итоговая оценка ограничивается значением 7. Домашнее задание, сданное в срок, можно один раз доработать в течение семи дней после обратной связи. Коэффициент фиксируется по дате первой сдачи. При уважительной причине преподаватель может установить индивидуальный срок без понижающего коэффициента. Доработки принимаются в течение курса в установленные окна.
Список литературы

Список литературы

Рекомендуемая основная литература

  • Humble, J., & Farley, D. (2011). Continuous Delivery : Reliable Software Releases Through Build, Test, and Deployment Automation. Upper Saddle River, NJ: Addison-Wesley Professional. Retrieved from http://search.ebscohost.com/login.aspx?direct=true&site=eds-live&db=edsebk&AN=1599336
  • Nigel Poulton. (2020). Docker Deep Dive : Harness the Full Potential of Your Applications with Docker. Packt Publishing.

Рекомендуемая дополнительная литература

  • Site Reliability Engineering. Надежность и безотказность как в Google - 978-5-4461-0976-0 - Бетси Бейер, Крис Джоунс, Дженнифер Петофф, Нейл Ричард Мёрфи - 2019 - Санкт-Петербург: Питер - https://ibooks.ru/products/358168 - 358168 - iBOOKS

Авторы

  • Солдатова Татьяна Владимировна
  • Шовкович Елена Геннадьевна