Skip to content
yaigorianPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bookstore — сквозной учебный проект «DevOps путь»

Учебный интернет-магазин книг. Бизнес-логики минимум, а компоненты подобраны так, чтобы на каждом отрабатывать свой класс эксплуатационных проблем. Проект растёт вместе с курсом: от ручного запуска на одной ВМ (v0) до Kubernetes с GitOps и мониторингом (v10).

Версия v0: что внутри

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.

API

Метод и путь Что делает
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.

Важно

Код написан «разработчиками» и содержит ошибки, которые ты будешь искать в лабах, как на реальном дежурстве. Не читай код в поисках багов заранее: сначала симптомы и диагностика, потом причина.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages