DevOps с нуля до продакшена.
313 маленьких шагов на одном живом приложении. На выходе уровень mid и senior DevOps.
Спасибо, коллега. Вы в списке. Пришлём одно письмо, когда откроются первые фазы.
- 000-046 Ваш ноутбук Linux, сеть, Git, Python
- 047-058 Один VPS, руками systemd, nginx, TLS, бэкапы
- 059-099 Контейнеры и пайплайны Docker, GitHub Actions, деплой без простоя
- 100-123 Инфраструктура как код Ansible, Terraform, Packer
- 124-188 Kubernetes на вашем VPS k3s, Helm, Argo CD, наблюдаемость, безопасность
- 189-219 AWS, GCP, Azure EKS, GKE, AKS, по одному сеансу
- 220-312 Свои серверы и senior-работа надёжность, платформа, FinOps, консалтинг
Одно приложение на весь курс
Courier: небольшой SaaS для отслеживания посылок. Фичи писать не нужно. Ваша задача: доставлять его, масштабировать, спасать и удешевлять.
web
Node, Next.js
Страница трекинга и кабинет магазина
api
Python, FastAPI
REST API, авторизация, отправления. Postgres, Redis, RabbitMQ
worker
Go
Шлёт уведомления и обновляет статусы из очереди
carrier-mock
Go
Поддельный перевозчик, заваливает вебхуками, когда шагу это нужно
Встроенные рубильники поломок
Каждый сервис читает флаги, которые ломают его нарочно. Инциденты в курсе настоящие.
FAIL_RATE=0.2- 20% запросов отдают 500
LATENCY_MS=800- каждый запрос ждёт 800 мс
LEAK_MB_PER_MIN=50- память растёт до OOMKilled
SLOW_QUERY=1- запрос без индекса на списке отправлений
Программа: 313 шагов в 26 фазах
Каждый шаг добавляет одну идею и занимает 30-60 минут. Ни один шаг не ссылается на то, что вы ещё не прошли.
Шаги под экзамен
Ничего не нашлось. Попробуйте слово короче.
Основа
Linux, сеть, Git и скрипты на вашем ноутбуке.
000-046
P00 5 шагов
- 000 Что делает DevOps-инженер весь день Проследить один коммит от ноутбука до платящего клиента
- 001 Как устроен курс Освоить формат шагов, лестницу подсказок и скрипт проверки
- 002 Настройка ноутбука Поставить терминал, пакетный менеджер, редактор и Docker Desktop
- 003 Знакомство с Courier Разобрать архитектуру приложения, с которым идёт весь курс
- 004 Запуск Courier по-наивному Поднять все 4 сервиса руками и почувствовать боль
P01 18 шагов
- 005 Файлы, пути и приглашение shell Ходить по файловой системе через cd, ls, pwd и автодополнение LFCS
- 006 Чтение и правка файлов Менять конфиг через cat, less, head, tail и nano или vim LFCS
- 007 Пользователи, группы и sudo Создать пользователя, добавить в группу и выдать ограниченный sudo LFCS
- 008 Права и владельцы Читать биты rwx и чинить 403 из-за chmod и chown LFCS
- 009 Процессы и сигналы Найти процесс через ps и убить его нужным сигналом LFCS
- 010 Сервисы systemd Написать unit-файл и держать сервис живым после перезагрузки LFCS
- 011 Логи через journalctl Найти причину падения сервиса фильтрами journalctl LFCS
- 012 Пакеты и репозитории Ставить, фиксировать версии и удалять пакеты через apt LFCS
- 013 Диски, монтирование и место Найти, что забило диск, через df, du и lsblk LFCS
- 014 Переменные окружения Задать переменные для shell, сервиса и одной команды LFCS
- 015 Bash: первый скрипт Написать скрипт с аргументами и кодом выхода
- 016 Bash: условия и циклы Пройтись по серверам циклом и ветвиться по результату команд
- 017 Bash: функции и безопасные настройки Использовать set -euo pipefail, trap и функции
- 018 Текстовые утилиты: grep, sed, awk Достать числа из access-лога одним пайплайном LFCS
- 019 JSON и YAML в командной строке Читать и править JSON через jq, а YAML через yq
- 020 Задачи по расписанию Запустить скрипт бэкапа через cron и через systemd timer LFCS
- 021 Здоровье сервера за 60 секунд Прочитать load, память, диск и I/O через top, free, vmstat, iostat LFCS
- 022 Тренировка по поиску проблем в Linux Починить сломанный сервер по 3 симптомам с чек-листом LFCS
P02 11 шагов
- 023 IP-адреса и порты Читать вывод ip addr и ss и говорить, кто что слушает LFCS
- 024 TCP, UDP и рукопожатие Увидеть TCP-рукопожатие и таймаут в tcpdump
- 025 DNS изнутри Проследить запрос через dig от корня до ответа LFCS
- 026 HTTP руками Слать запросы через curl и читать статусы и заголовки
- 027 TLS и сертификаты Разобрать цепочку сертификатов через openssl и заметить просроченный
- 028 Подсети и CIDR Разбить /16 на подсети на бумаге и проверить через ipcalc
- 029 Маршрутизация и NAT Прочитать таблицу маршрутов и объяснить, как приватный IP выходит в интернет
- 030 Файрволы Открыть только 22, 80 и 443 через ufw и проверить nmap LFCS
- 031 Reverse proxy и балансировщики Объяснить балансировку L4 и L7 и где стоит nginx
- 032 SSH подробно Использовать ключи, ssh config, jump-хосты и проброс портов LFCS
- 033 Набор для отладки сети Разобрать медленный запрос через mtr, dig, curl -w и ss
P03 7 шагов
- 034 Основы Git Коммитить, смотреть историю и безопасно откатывать
- 035 Ветки и слияния Создать ветку, влить её и решить конфликт
- 036 Rebase и чистая история Сделать rebase ветки и склеить fixup-коммиты
- 037 Pull request и code review Открыть PR, проверить чужой и запросить правки
- 038 Стратегии ветвления Сравнить trunk-based и GitFlow и выбрать один для Courier
- 039 Версии и changelog Ставить теги релизов через semver и conventional commits
- 040 Pre-commit хуки Не пускать секреты и битый YAML в репозиторий
P04 6 шагов
- 041 Python для ops: первый скрипт Прочитать лог-файл и вывести сводку
- 042 Python: вызовы API Запросить GitHub API и обработать ошибки и повторы
- 043 Python: настоящий CLI Собрать CLI с аргументами, конфигом и тестами
- 044 Чтение кода на Go и Node Найти конфиг, порты и health-эндпоинт в незнакомом коде
- 045 Makefile как запускатель задач Обернуть сборку, тесты и запуск в цели make
- 046 Форматы конфигов и шаблоны Генерировать конфиги из шаблонов через envsubst и Jinja
Доставка
Живой сервер руками, потом контейнеры, CI и CD.
047-099
P05 12 шагов
- 047 Арендовать VPS и подключиться Создать VPS за 5 евро и войти по ключу
- 048 Укрепить сервер Отключить вход root и по паролю, добавить fail2ban и автообновления
- 049 Установить рантаймы Поставить на сервер Python, Node, Go и Postgres
- 050 Запуск Courier через systemd Запустить все сервисы как units с политиками перезапуска
- 051 nginx впереди Пустить web и API через один конфиг nginx
- 052 Домен и DNS-записи Направить домен на VPS записями A и CNAME
- 053 HTTPS через Let's Encrypt Получить сертификат через certbot и обновлять его автоматически
- 054 Логи и ротация Не дать логам забить диск с помощью logrotate
- 055 Бэкапы Postgres Дампить базу каждую ночь и доказать, что restore работает
- 056 Первая авария Поднять Courier после заполненного диска и записать, что случилось
- 057 Первый runbook Написать runbook, который нужен коллеге в 3 часа ночи
- 058 Посчитать ручную работу Перечислить все ручные шаги и оценить часы в месяц
P06 16 шагов
- 059 Зачем контейнеры Объяснить образы, контейнеры и namespaces на демо
- 060 docker run Запускать, осматривать, заходить внутрь и останавливать контейнеры CKAD
- 061 Образы и слои Читать слои через docker history и использовать кеш сборки CKAD
- 062 Dockerfile для Python API Написать Dockerfile и собрать образ API CKAD
- 063 Dockerfile для Node-приложения Упаковать веб-приложение и передать конфиг времени сборки CKAD
- 064 Multi-stage сборка для Go worker Выпустить образ worker на 15 МБ CKAD
- 065 Образы меньше и безопаснее Взять slim и distroless базы и запускать не от root CKS
- 066 Тома и данные Сохранить данные Postgres между перезапусками контейнера
- 067 Сеть контейнеров Соединить контейнеры в пользовательской сети по имени
- 068 Docker Compose для Courier Поднять весь стек через docker compose up
- 069 Конфиг и секреты в Compose Использовать env-файлы и секреты Compose без утечек
- 070 Healthcheck и порядок старта Заставить API ждать здоровую базу
- 071 Реестры и теги Пушить образы в GHCR с неизменяемой схемой тегов
- 072 Скан образов на уязвимости Найти и закрыть CVE через Trivy CKS
- 073 Compose на VPS Заменить настройку через systemd на Compose на сервере
- 074 Тренировка по отладке контейнеров Починить контейнер, который падает, не резолвит DNS и упирается в память CKAD
P07 15 шагов
- 075 Зачем нужен CI Объяснить, какой цикл обратной связи сокращает CI
- 076 Первый workflow в GitHub Actions Запускать job на каждый push
- 077 Проверки lint и формата Падать на ошибках lint в 3 языках
- 078 Unit-тесты в CI Гонять тесты Python, Node и Go в параллельных jobs
- 079 Matrix-сборки Тестировать на 2 версиях рантайма через matrix
- 080 Кеш зависимостей Сократить время пайплайна кешем зависимостей и слоёв Docker
- 081 Сборка и push образов в CI Публиковать образы в GHCR из пайплайна
- 082 Интеграционные тесты с сервисами Тестировать API на настоящем Postgres в CI
- 083 Защита веток и обязательные проверки Блокировать слияния, не прошедшие CI
- 084 Секреты в CI Хранить секреты безопасно и не пускать их в логи
- 085 OIDC вместо долгоживущих ключей Выдавать CI короткие креды без сохранённых ключей DOP
- 086 Переиспользуемые workflows Делить один пайплайн между 4 сервисами
- 087 Self-hosted раннеры Гонять jobs на своём VPS и знать риски
- 088 GitLab CI и Jenkins Перенести пайплайн в GitLab CI и прочитать Jenkinsfile
- 089 Скорость пайплайна Найти самую медленную стадию и вдвое сократить общее время
P08 10 шагов
- 090 Delivery и deployment Выбрать continuous delivery или deployment для каждого сервиса
- 091 Деплой из CI по SSH Выкатывать на VPS, когда main позеленел
- 092 Staging и production Держать два окружения с промоушеном между ними
- 093 Миграции БД при деплое Безопасно запускать миграции до старта нового кода
- 094 Rolling-деплой без простоя Менять контейнеры по одному за nginx
- 095 Blue/green на одном сервере Переключать трафик между двумя стеками и обратно
- 096 Откаты Откатить плохой релиз быстрее чем за 2 минуты
- 097 Автоматизация релизов Генерировать версии и changelog из коммитов
- 098 Feature flags Выкатить тёмный код и включить его для 10% пользователей
- 099 Метрики DORA Считать частоту деплоев, lead time, долю неудачных изменений и время восстановления DOP
Автоматизация
Серверы, кластеры и деплой существуют только как код после ревью.
100-158
P09 9 шагов
- 100 Зачем нужно управление конфигурацией Сравнить скрипты, Ansible и образы для настройки сервера
- 101 Inventory в Ansible и ad-hoc команды Запустить команду сразу на многих хостах
- 102 Первый playbook Поставить и настроить nginx через playbook
- 103 Идемпотентность Запустить playbook дважды и доказать, что второй раз ничего не изменилось
- 104 Переменные, шаблоны и handlers Шаблонизировать конфиг nginx и перезагружать только при изменении
- 105 Roles Разбить настройку на переиспользуемые роли
- 106 Ansible Vault Хранить секреты в репозитории зашифрованными
- 107 Пересобрать VPS с нуля Стереть сервер и восстановить Courier одной командой
- 108 Тестирование Ansible Тестировать роли через Molecule
P10 15 шагов
- 109 Зачем IaC Объяснить state, drift и plan перед apply TFA
- 110 Основы Terraform и OpenTofu Написать provider и один ресурс TFA
- 111 Plan, apply, destroy Создать и удалить VPS через Terraform TFA
- 112 Переменные и outputs Сделать конфиг переиспользуемым для разных окружений TFA
- 113 State и почему он важен Прочитать state и восстановиться после потери файла state TFA
- 114 Remote state и блокировки Хранить state в бакете с блокировкой TFA
- 115 Модули Написать модуль для сервера Courier TFA
- 116 Окружения Запускать staging и production из одной кодовой базы TFA
- 117 Импорт существующей инфраструктуры Взять созданный руками ресурс под управление Terraform TFA
- 118 Обнаружение drift Найти и исправить изменения, сделанные мимо Terraform TFA
- 119 Lint и политики для IaC Ловить плохой конфиг через tflint и Checkov в CI TFA
- 120 Тестирование инфраструктуры Протестировать модуль через terraform test
- 121 Terraform в CI Plan на pull request, apply при слиянии TFA
- 122 Образы машин с Packer Собрать укреплённый базовый образ
- 123 Pulumi и Crossplane в общих чертах Понимать, когда команда выбирает их вместо Terraform
P11 27 шагов
- 124 Зачем оркестрация Объяснить, что умеет Kubernetes и не умеет Compose CKA
- 125 Первый кластер Создать локальный кластер через kind и работать с kubectl CKA
- 126 Pod Запустить, осмотреть и удалить pod CKAD
- 127 Deployment и ReplicaSet Промасштабировать Deployment и увидеть самолечение CKAD
- 128 Services Достучаться до pod через ClusterIP и NodePort CKA
- 129 Labels и selectors Находить и группировать объекты по меткам CKAD
- 130 ConfigMap и Secret Вынести конфиг Courier из образов CKAD
- 131 Probes Добавить liveness, readiness и startup probes CKAD
- 132 Requests и limits Задать ресурсы и увидеть OOMKilled и троттлинг CKAD
- 133 Namespaces Разделить окружения и команды по namespace CKA
- 134 Ingress и Gateway API Направить домен на сервисы web и API CKA
- 135 Persistent volumes Дать stateful-приложению хранилище, переживающее перезапуски CKA
- 136 StatefulSet Запустить Postgres в кластере и понять, почему большинство команд так не делает CKA
- 137 Jobs и CronJobs Запускать миграции и ночные задачи в кластере CKAD
- 138 Rolling update и откаты Выкатить и отменить релиз через kubectl rollout CKAD
- 139 Horizontal Pod Autoscaler Масштабировать API по CPU и кастомным метрикам CKA
- 140 RBAC Выдать разработчику доступ только на чтение к одному namespace CKA
- 141 Network policies Разрешить с базой говорить только API CKS
- 142 Helm: готовые чарты Поставить ingress-nginx и Redis через Helm
- 143 Helm: свой чарт для Courier Упаковать все сервисы в один чарт
- 144 Kustomize Патчить базовые манифесты под каждое окружение CKAD
- 145 Отладка pod Починить pod в CrashLoopBackOff, ImagePullBackOff и Pending CKA
- 146 Отладка кластера Найти сломанную ноду, проблемы DNS и control plane CKA
- 147 k3s на VPS Перенести Courier с Compose на одноузловой k3s
- 148 cert-manager и external-dns Автоматизировать сертификаты и DNS-записи из кластера
- 149 Operators и CRD Поставить оператор Postgres и прочитать его custom resources CKA
- 150 Обновление кластера Обновить Kubernetes без простоя CKA
P12 8 шагов
- 151 Идея GitOps Объяснить pull-деплой и reconciliation
- 152 Argo CD Синхронизировать Courier из Git-репозитория в кластер
- 153 App of apps и окружения Промоутить релиз из staging в production через pull request
- 154 Секреты в GitOps Шифровать секреты через SOPS или Sealed Secrets
- 155 External Secrets Operator Подтягивать секреты из хранилища в кластер
- 156 Canary-релизы Отправить 10% трафика на новую версию через Argo Rollouts
- 157 Автоматический анализ Откатывать canary сам, когда растут ошибки
- 158 Flux в общих чертах Сравнить Flux с Argo CD
Эксплуатация
Видеть, защищать и держать Courier в 3 облаках и на своём железе.
159-241
P13 16 шагов
- 159 Мониторинг и observability Назвать 4 golden signals для каждого сервиса Courier PCDE
- 160 Prometheus Собирать метрики Courier и кластера
- 161 Инструментирование кода Добавить метрики запросов в API, web и worker
- 162 PromQL Писать запросы для rate, ошибок и перцентилей задержки
- 163 Дашборды Grafana Собрать по одному дашборду на сервис как код
- 164 Структурные логи Писать JSON-логи с request ID в 3 языках
- 165 Централизованные логи в Loki Искать логи всех pod в одном месте
- 166 Распределённый трейсинг с OpenTelemetry Проследить один запрос через web, API и worker PCDE
- 167 Пайплайны Collector Пустить метрики, логи и трейсы через OpenTelemetry Collector
- 168 SLI и SLO Задать цели по доступности и задержке для Courier PCDE
- 169 Error budget Решить, когда прекращать выпуск фич PCDE
- 170 Алерты через Alertmanager Слать алерты в Telegram и на почту с silences
- 171 Burn-rate алерты Алертить на сгорание SLO, а не на CPU PCDE
- 172 Синтетические проверки Пробовать Courier снаружи, как пользователь
- 173 Профилирование и eBPF Найти горячую функцию через continuous profiling и eBPF-инструменты
- 174 Гигиена алертов Вдвое сократить шум алертов и дать каждому ссылку на runbook
P14 14 шагов
- 175 Threat model пайплайна Перечислить, как атакующий дойдёт до прода через CI CKS
- 176 Минимальные привилегии везде Убрать админские права, которые никому не нужны CKS
- 177 Управление секретами в Vault Выдавать динамические креды к базе из Vault
- 178 Статический анализ в CI Запускать SAST и поиск секретов на каждом PR
- 179 Скан и обновление зависимостей Держать зависимости в актуальном состоянии через Renovate или Dependabot
- 180 SBOM Генерировать SBOM для каждого образа через Syft CKS
- 181 Подпись образов Подписывать и проверять образы через cosign CKS
- 182 Provenance и SLSA Прикреплять provenance сборки и проверять его перед деплоем CKS
- 183 Admission-политики Блокировать неподписанные образы и образы от root через Kyverno или OPA CKS
- 184 Pod Security Standards Включить профиль restricted на namespace CKS
- 185 Runtime-безопасность Поймать shell в контейнере через Falco CKS
- 186 CIS benchmarks Просканировать ноду и кластер через kube-bench CKS
- 187 Ритм патчей Задать ежемесячную пересборку и патчинг образов и нод
- 188 Основы compliance Сопоставить контроли с SOC 2, ISO 27001, GDPR и NIS2
P15 5 шагов
- 189 Что на самом деле продаёт облако Сопоставить compute, storage, сеть и managed-сервисы у разных провайдеров
- 190 Разделение ответственности Сказать, что защищает провайдер, а что своя зона
- 191 Модели цен Прочитать страницу цен и прикинуть месячный счёт
- 192 Бюджеты и алерты по счёту Поставить жёсткий алерт на расходы до создания чего-либо
- 193 Один Terraform-layout для многих облаков Спроектировать репозиторий под AWS, GCP, Azure и VPS
P16 17 шагов
- 194 Аккаунты AWS и Organizations Настроить management-аккаунт и sandbox-аккаунт SAA
- 195 IAM Написать политику с минимальными правами и проверить её SAA DOP
- 196 VPC Построить публичные и приватные подсети через Terraform SAA
- 197 EC2 Запустить инстанс из своего образа Packer SAA
- 198 S3 Хранить бэкапы с lifecycle-правилами и шифрованием SAA
- 199 RDS для Postgres Перенести базу в RDS с автоматическими бэкапами SAA
- 200 ECR Пушить образы Courier в приватный реестр DOP
- 201 Балансировщики и Route 53 Поставить перед Courier ALB и домен SAA
- 202 Сертификаты через ACM Выпустить TLS-сертификаты для ALB SAA
- 203 ECS на Fargate Запустить Courier без управления серверами DOP
- 204 EKS Создать кластер через Terraform и выкатить Helm-чарт DOP
- 205 Pod identity в EKS Дать pod права AWS без ключей DOP
- 206 CloudWatch Отправить логи и метрики и настроить alarm DOP
- 207 Secrets Manager и Parameter Store Подавать секреты в Courier из AWS SAA
- 208 Lambda и события Запустить небольшую событийную задачу рядом с Courier SAA
- 209 Разбор расходов AWS Найти 3 самые большие статьи расходов и урезать одну SAA
- 210 Чистый снос Удалить всё и убедиться, что счёт перестал расти
P17 9 шагов
- 211 Проекты GCP и IAM Настроить проект, service accounts и роли PCDE
- 212 GKE и Artifact Registry Запустить Courier в GKE PCDE
- 213 Cloud SQL и Workload Identity Подключить pod к managed-базе без ключей PCDE
- 214 Cloud Logging и Monitoring Читать логи и SLO Courier в Google Cloud PCDE
- 215 Подписки Azure и Entra ID Настроить resource group и идентичности AZ-400
- 216 AKS и ACR Запустить Courier в AKS AZ-400
- 217 Azure Database и managed identity Подключить pod к Postgres через managed identity AZ-400
- 218 Azure Monitor Читать логи и настраивать алерты в Azure AZ-400
- 219 Сравнить три облака Написать клиенту сравнение на одну страницу
P18 7 шагов
- 220 Когда self-host Выбрать между облаком и своими серверами по цифрам
- 221 Кластер k3s из 3 нод Собрать отказоустойчивый кластер на 3 VPS
- 222 Балансировка на bare metal Открыть сервисы наружу через MetalLB или floating IP
- 223 Хранилище на своих нодах Добавить реплицируемое хранилище на Longhorn
- 224 Приватный реестр Поднять Harbor со сканом образов
- 225 Приватная сеть Соединить облака и серверы через WireGuard
- 226 Air-gapped установка Установить Courier там, где интернет запрещён
P19 15 шагов
- 227 RTO и RPO Согласовать с бизнесом цели восстановления
- 228 Бэкапы, которые восстанавливаются Забэкапить кластер через Velero и восстановить в новый
- 229 Point-in-time recovery Восстановить Postgres на минуту раньше плохого запроса
- 230 Операции с базой Делать expand-and-contract миграции и connection pooling
- 231 Нагрузочные тесты с k6 Найти частоту запросов, на которой Courier ломается
- 232 Планирование мощностей Предсказать, когда понадобится больше нод
- 233 Событийное автомасштабирование Масштабировать worker по длине очереди через KEDA
- 234 Автомасштабирование нод Добавлять и убирать ноды через Cluster Autoscaler или Karpenter
- 235 Кеширование и CDN Поставить CDN перед статикой и измерить выигрыш
- 236 Очереди и backpressure Сохранить worker живым, когда очередь взрывается
- 237 Основы multi-region Держать warm standby во втором регионе
- 238 Chaos engineering Намеренно убивать pod и ноды через Chaos Mesh
- 239 Реагирование на инциденты Провести инцидент с ролями, каналом и таймлайном
- 240 Postmortem без поиска виноватых Написать postmortem с причинами и действиями
- 241 On-call, который можно пережить Спроектировать ротацию, эскалацию и передачу смены
Уровень senior
Платформа, деньги, AI, консалтинг, реальные аварии и поиск работы.
242-312
P20 8 шагов
- 242 От DevOps-команды к платформенной Объяснить team topologies и платформу как продукт
- 243 Golden paths Написать шаблон, создающий новый сервис с CI, чартом и дашбордами
- 244 Внутренний портал разработчика Поднять Backstage с каталогом сервисов
- 245 Self-service окружения Дать разработчику preview-окружение на каждый pull request
- 246 API инфраструктуры на Crossplane Дать командам заказывать базу YAML-файлом
- 247 Multi-tenancy Безопасно делить один кластер между командами
- 248 Метрики developer experience Измерять время онбординга и ожидания через DORA и SPACE
- 249 Docs as code Публиковать runbook и ADR из репозитория
P21 7 шагов
- 250 Видимость затрат Тегировать каждый ресурс и видеть стоимость по командам
- 251 Стоимость Kubernetes Мерить цену по namespace через OpenCost
- 252 Rightsizing Сжать избыточные pod и ноды по реальному использованию
- 253 Spot и preemptible мощности Безопасно запустить worker на spot-нодах
- 254 Обязательства Выбрать между savings plans, reservations и on-demand
- 255 Затраты на хранение и трафик Сократить расходы на передачу данных и хранилище
- 256 Unit economics Считать стоимость на клиента и на заказ
P22 6 шагов
- 257 Где AI помогает, а где вредит Составить список задач для агента и задач, которые оставить себе
- 258 Агенты пишут инфраструктуру Проверять Terraform от агента через plan и policy-гейты
- 259 AI в разборе инцидентов Сводить логи и алерты через LLM и проверять его утверждения
- 260 Ограждения для AI в пайплайнах Ограничить, что агент может запускать, читать и менять
- 261 MCP-серверы для ops Дать агенту доступ к кластеру только на чтение
- 262 Модель в Kubernetes Запустить небольшой inference-сервис с основами планирования GPU
P23 13 шагов
- 263 Оценка компании Провести интервью по зрелости DevOps из 10 вопросов
- 264 Value stream mapping Нарисовать путь от идеи до прода и найти самое долгое ожидание
- 265 Базовые метрики DORA Измерить 4 метрики по Git и данным об инцидентах
- 266 Найти toil Перечислить повторяющуюся ручную работу и её стоимость в месяц
- 267 ROI автоматизации Посчитать срок окупаемости одной автоматизации
- 268 Написать предложение Превратить находки в предложение с ценой, которое CTO подпишет
- 269 Роадмап на 90 дней Сначала быстрые победы, потом крупные ходы
- 270 Миграция legacy Поэтапно перенести монолит с одного сервера в контейнеры
- 271 Управление изменениями Склонить разработчиков и ops к новому способу работы
- 272 ADR и RFC Написать запись о решении, которая переживёт следующего сотрудника
- 273 Выбор вендоров Сравнить 3 инструмента по взвешенной матрице
- 274 Выступление перед руководством Объяснить риск, цену и скорость на 5 слайдах
- 275 DevOps-консалтинг: проект целиком Определить объём, назвать цену и закрыть проект с фиксированным scope
P24 26 шагов
- 276 GitLab 2017: удалена продовая база Восстановиться после rm -rf не на том хосте и найти мёртвые бэкапы
- 277 AWS S3 2017: одна опечатка в команде Ограничить радиус поражения ops-команды
- 278 Knight Capital 2012: недокаченный деплой Поймать деплой, дошедший до 7 серверов из 8
- 279 Cloudflare 2019: один regex съедает CPU Остановить изменение конфига, которое грузит все ядра
- 280 GitHub 2018: split brain за 43 секунды Восстановить кластер БД после сетевого разрыва
- 281 Facebook 2021: BGP выключает компанию Сохранить out-of-band доступ, когда своей сети нет
- 282 Fastly 2021: конфиг одного клиента Откатить глобальную раскатку конфига
- 283 Roblox 2021: 73 часа Consul Отладить координационный сервис под нагрузкой
- 284 Let's Encrypt 2021: истёк корневой сертификат Найти клиентов, которые ломаются при истечении корня
- 285 Atlassian 2022: удалено 883 сайта клиентов Восстановить много тенантов без инструмента массового restore
- 286 Datadog 2023: обновление ОС убивает сеть Раскатывать обновления ОС так, чтобы они не задели все ноды
- 287 CrowdStrike 2024: одно обновление контента Выкатывать конфиг с теми же гейтами, что и код
- 288 Google Cloud 2025: смена политики без флага Закрывать новые ветки кода флагами и безопасными дефолтами
- 289 AWS us-east-1 2025: гонка в DNS Найти race condition в автоматике, управляющей DNS
- 290 Cloudflare 2025: файл фич вырос вдвое Валидировать сгенерированный конфиг до выкатки
- 291 Leap second 2012: часы останавливают парк Тестировать крайние случаи времени в прод-системах
- 292 Просроченные сертификаты Поймать сертификат, который истекает в воскресенье
- 293 Ловушка DNS TTL Перенести домен без многочасового простоя
- 294 Диск полон в 3 часа ночи Восстановить ноду, где логи съели диск
- 295 Убежавший облачный счёт Остановить цикл, который за ночь тратит 5 000 долларов
- 296 left-pad 2016: пакет исчезает Фиксировать и зеркалировать зависимости
- 297 Codecov 2021: скомпрометированный скрипт в CI Заметить подменённый инструмент в пайплайне
- 298 xz-utils 2024: бэкдор в библиотеке Проверять, из чего собирается билд
- 299 tj-actions 2025: скомпрометированный GitHub Action Фиксировать actions по коммиту и сужать права токена
- 300 Утёкшие облачные ключи на GitHub Ротировать ключи и чистить историю меньше чем за час
- 301 etcd в Kubernetes без места Поднять control plane, который отказывается писать
P25 11 шагов
- 302 Как устроены собеседования DevOps и SRE Знать 5 типов интервью и как оценивается каждый
- 303 Интервью по поиску проблем в Linux Рассказать вслух разбор сломанного сервера
- 304 Интервью: live-отладка Kubernetes Починить сломанный кластер под давлением времени
- 305 Системный дизайн инфраструктуры Спроектировать CI/CD и хостинг для компании из 50 человек
- 306 Интервью по Terraform и облаку Ответить на вопросы про state, модули и IAM
- 307 Истории об инцидентах по STAR Рассказать 3 истории об инцидентах из заданий War Room
- 308 Портфолио Опубликовать Courier как открытое портфолио с диаграммами
- 309 CV и LinkedIn для DevOps Написать пункты с цифрами из работы на курсе
- 310 Какие сертификаты и когда Выбрать порядок сертификатов под нужные вакансии
- 311 Capstone: неделя on-call Вести Courier 7 дней с подброшенными инцидентами
- 312 Capstone: кейс консалтинга Провести аудит учебной компании и показать план на 90 дней
Сделано так, чтобы вы не застряли
Одна идея на шаг
Если шагу нужно больше 3 новых терминов, его режут на два.
Каждая команда проверена
Копируете, вставляете и сверяете с ожидаемым выводом под командой.
Работу проверяет скрипт
Зелёный значит готово. Красный показывает, какой пункт задания не прошёл.
Ошибки входят в урок
В каждом шаге что-то ломается нарочно, плюс 3 ошибки, на которых спотыкаются чаще всего.
Подсказки по одной ступени
5 ступеней от «куда смотреть» до полного решения, которое вы потом объясняете сами.
---
num: "062"
phase: P06
title: Dockerfile for the Python API
runs_on: laptop
time_min: 45
cost: "0"
certs: [CKAD]
---
# 062. Dockerfile for the Python API
## Goal & why
## Recall -> steps 059, 060, 061
## What's new -> 3 new terms, no more
## Do it -> commands + expected output
## Break it -> change one line, read the error
## Check -> bash checks/062.sh
## If you're stuck -> 3 real errors and fixes
## Trade-offs
## Hint ladder -> rungs 0 to 5
Сколько стоит практика
Примерно до 10 долларов в месяц. Облачный шаг начинается с бюджет-алерта и заканчивается удалением всего.
- 000-046 0 Только ноутбук. 16 GB памяти хватит на весь курс.
- 047-188 ~5 EUR / мес Один маленький VPS. На нём же k3s.
- 189-219 free tier Кредиты AWS, GCP и Azure. Каждый кластер живёт один сеанс.
- 220-226 1-2 недели Три маленьких VPS под свой кластер, потом удаляются.
War Room: 26 реальных аварий в миниатюре
Вы воспроизводите механику известных инцидентов на своём стеке, останавливаете её и пишете postmortem.
- GitLab 2017: удалена продовая база
- AWS S3 2017: одна опечатка в команде
- Knight Capital 2012: недокаченный деплой
- Cloudflare 2019: один regex съедает CPU
- GitHub 2018: split brain за 43 секунды
- Facebook 2021: BGP выключает компанию
- Fastly 2021: конфиг одного клиента
- Roblox 2021: 73 часа Consul
- Let's Encrypt 2021: истёк корневой сертификат
- Atlassian 2022: удалено 883 сайта клиентов
- Datadog 2023: обновление ОС убивает сеть
- CrowdStrike 2024: одно обновление контента
- Google Cloud 2025: смена политики без флага
- AWS us-east-1 2025: гонка в DNS
- Cloudflare 2025: файл фич вырос вдвое
- Leap second 2012: часы останавливают парк
- Просроченные сертификаты
- Ловушка DNS TTL
- Диск полон в 3 часа ночи
- Убежавший облачный счёт
- left-pad 2016: пакет исчезает
- Codecov 2021: скомпрометированный скрипт в CI
- xz-utils 2024: бэкдор в библиотеке
- tj-actions 2025: скомпрометированный GitHub Action
- Утёкшие облачные ключи на GitHub
- etcd в Kubernetes без места
Вопросы
Нужен ли опыт?
Нет. Шаг 005 начинается с cd и ls. Если умеете ставить программы на ноутбук, можно начинать.
Нужно ли сначала пройти LinuxPath?
Нет. В DevOpsPath свои фазы по Linux, сети и bash, ровно в объёме DevOps-работы. LinuxPath нужен, если хочется глубже.
Сколько это займёт?
Около 235 часов при 45 минутах на шаг. При 7 часах в неделю это примерно 8 месяцев.
Готовит ли курс к сертификатам?
У шагов есть метки экзаменов: LFCS, CKAD, CKA, CKS, Terraform Associate, 2 экзамена AWS, Google Cloud DevOps и Azure AZ-400. Перед записью на экзамен пройдите пробный.
Где здесь AI?
До уровня mid всё руками. Потом фаза P22: агенты для Terraform, разбора инцидентов и ревью, с ограничениями.
Я найду работу?
Этого никто не может обещать. На выходе у вас публичное портфолио на Courier, 26 разборов инцидентов и фаза подготовки к собеседованиям. Именно об этом спрашивают на найме.
Когда старт и сколько стоит?
Даты и цены пока нет. Лист ожидания узнает первым.
Получите первые фазы раньше всех
Одно письмо, когда откроются первые фазы. Без рассылки.
Спасибо, коллега. Вы в списке. Пришлём одно письмо, когда откроются первые фазы.