Учебный интернет-магазин книг. Бизнес-логики минимум, а компоненты подобраны так, чтобы на каждом отрабатывать свой класс эксплуатационных проблем. Проект растёт вместе с курсом: от ручного запуска на одной ВМ (v0) до Kubernetes с GitOps и мониторингом (v10).
bookstore/
├── api/
│ ├── app.py # REST API на FastAPI: каталог, заказы, выгрузка, склад
│ └── requirements.txt
├── worker/
│ ├── worker.py # фоновый обработчик заказов, понимает сигналы
│ └── worker.conf # настройки worker, перечитываются по SIGHUP
├── scripts/ # нагрузка и учебные «аварии»
│ ├── load.sh # обычный поток заказов
│ ├── latency.sh # замер задержки API
│ ├── report.py # тяжёлый «ночной отчёт» (грузит CPU)
│ ├── zombie.py # родитель, который плодит зомби
│ ├── monday.sh # сценарий инцидента A
│ ├── accounting.sh # сценарий инцидента B
│ └── colleague.sh # сценарий инцидента C
├── labs/
│ ├── lecture-1.2-lab.md # лаба к лекции 1.2
│ ├── notes-1.2.md # шаблон твоих ответов
│ ├── postmortem-template.md
│ └── SOLUTIONS-1.2.md # разборы — открывать только после попытки
├── postmortems/ # твои постмортемы учебных инцидентов
└── CHANGELOG.md # как проект менялся от версии к версии
База — SQLite в data/bookstore.db, создаётся при первом запуске api. Заказ проходит статусы new → processing → done.
| Метод и путь | Что делает |
|---|---|
GET /health |
статус и PID процесса, который ответил |
GET /api/books |
каталог с остатками на складе |
POST /api/orders |
новый заказ: {"book_id": 1, "qty": 2} |
GET /api/orders?status=new |
последние заказы, можно фильтровать по статусу |
GET /api/orders/{id} |
один заказ |
GET /api/export |
выгрузка заказов в CSV для бухгалтерии |
POST /api/admin/restock |
поступление на склад, нужен заголовок X-Admin-Token |
| Переменная | По умолчанию | Зачем |
|---|---|---|
BOOKSTORE_DB |
data/bookstore.db |
путь к базе (api и worker) |
BOOKSTORE_EXPORT_DIR |
data/exports |
куда api пишет выгрузки |
BOOKSTORE_ADMIN_TOKEN |
пусто | токен для /api/admin/*; пустой токен закрывает админку |
BOOKSTORE_WORKER_CONF |
worker/worker.conf |
конфиг worker |
| Где | Что там |
|---|---|
| Mac, рабочая копия репозитория | правки кода, заметки к лабам, постмортемы; отсюда коммиты и push |
| GitHub | единственный источник правды: что не в репозитории, того не существует |
ВМ, /opt/bookstore |
«прод»: сюда выкладывается код и отсюда он работает |
Каждая версия проекта заканчивается тегом (v0, v1, …) и записью в CHANGELOG.md.
Код написан «разработчиками» и содержит ошибки, которые ты будешь искать в лабах, как на реальном дежурстве. Не читай код в поисках багов заранее: сначала симптомы и диагностика, потом причина.