Фреймворк для запуска ядра SBS: база данных, очереди, каркас API, мониторинг и CI/CD. Цель — чтобы команда могла поднять готовую среду декомандами и сразу приступить к разработке сервисов верхнего уровня.
Локальная среда разворачивается одной командой: стэк контейнеров поднимет БД, брокеры, API, worker и наблюдаемость.
docker-compose up -dПосле этого:
- PostgreSQL и Alembic миграции применяются автоматически (
entrypoint.pyв контейнере API ждёт базу и запускаетalembic upgrade head). - Temporal Server и тестовый worker регистрируются и готовы принимать workflow.
- Redis и NATS подключаются через ленивые клиенты, API проверяет их на старте.
- OpenTelemetry, Prometheus и Grafana включаются по умолчанию; метрики доступны на
http://localhost:8000/metrics, дашборд –http://localhost:3000(admin/admin).
Invoke-RestMethod http://localhost:8000/health
Invoke-RestMethod http://localhost:8000/version
Invoke-RestMethod http://localhost:8000/test-workflow -Method Post -Body '{"name":"Demo"}'
Invoke-RestMethod http://localhost:8000/nats/test -Method Post -Body '{"message":"ping"}'
Invoke-RestMethod http://localhost:8000/redis/test -Method Post -Body '{"key":"demo","value":"ok"}'- PostgreSQL 18 — основная БД платформы. Алебик инициализирует таблицу
system_settings. - Temporal Server + Admin Tools — оркестрация workflow. Worker использует очередь
test-task-queue. - Redis 7 — кеш/координация. Клиент
app/services/cache.pyдержит одну асинхронную сессию. - NATS 2.10 — шина событий.
app/services/nats_client.pyподписывает тестовый subject и даёт publish/flush. - SBS API — приложение FastAPI:
/healthпроверяет Temporal, NATS, Redis и делаетSELECT 1./versionотдаёт версию и билд (изAPP_BUILDили Git)./settings/<key>управляет таблицейsystem_settings./test-workflow,/nats/test,/redis/testдемонстрируют интеграции.- Middleware логирует запросы и пишет метрики.
- SBS Worker — async worker на Temporal SDK, обрабатывает учебный workflow
TestWorkflow. - Prometheus 2.52 + Grafana 10 — наблюдаемость. Скрейпинг API каждые 15 секунд, готовый дашборд
SBS Infrastructure.
entrypoint.py запускается внутри контейнера API перед uvicorn: ждёт доступность базы (wait_for_database) и выполняет command.upgrade Alembic. Миграции лежат в alembic/versions/.
app/telemetry.py регистрирует PrometheusMetricReader, а configure_telemetry(app) подключается в app/api/main.py. Все HTTP-запросы добавляются в счётчик и гистограмму; /metrics отдаёт экспозицию, которую собирает Prometheus.
.github/workflows/ci.yml:
pytest.- Buildx сборка Docker-образа и push в GHCR (кроме PR).
- SBOM через Anchore и сканирование Trivy.
- Подписание Cosign (для push в
main). deploy-test— Helm деплой в тестовый кластер (scripts/deploy_test.sh), если заданы секреты.
docker-compose.yml— локальное окружение.requirements.txt— зависимости Python (API/worker).entrypoint.py— ожидание БД и миграции (используется контейнером API).run_api.py,run_worker.py— точки запуска в dev/CI..github/workflows/ci.yml— pipeline CI/CD.README.md— текущий документ.
api/main.py— FastAPI-приложение: эндпоинты, middleware логирования, стартап/шатунинг хуки.database.py— конфигурация SQLAlchemy engine иSessionLocal.models/system.py— модельSystemSetting.services/cache.py— Redis-клиент с ленивым подключением и вспомогательными функциями.services/nats_client.py— NATS-клиент, очередь и publish/wait утилиты.temporal/client.py— функции подключения к Temporal (ленивый singleton, ожидание).temporal/worker.py— worker, регистрирующий workflow и activity.workflows/test_workflow.pyиactivities/test_activity.py— демонстрационный сценарий.telemetry.py— настройка OpenTelemetry и запись метрик.__init__.py— хранит версию приложения.
env.py,script.py.mako,versions/...— стандартная структура Alembic.20251107000000_initial.py— создаётsystem_settings.
deploy/helm/sbs— основной Helm-чарт (API, worker) и вложенные чарты (charts/postgresql,charts/temporal,charts/redis,charts/nats).values.yamlзадаёт образы и параметры.scripts/start_api.sh,scripts/start_worker.sh— entrypoint-скрипты внутри контейнеров.scripts/deploy_test.sh— Helm деплой для CI (принимает ссылку на образ).monitoring/prometheus/prometheus.yml— scrape-конфигурация.monitoring/grafana/...— провиженинг datasources и дашборда.infrastructure/terraform— модулиnetwork,kubernetes_cluster,virtual_machineи окружениеenvironments/test.infrastructure/ansible— роли (common,docker,postgresql,temporal,redis,nats,sbs_api) и playbooksite.yml.
tests/test_sanity.py— минимальный sanity-тест (расширяется при развитии функциональности).
Все контейнеры используют значения по умолчанию, поэтому для локальных запусков ничего настраивать не требуется. При необходимости можно переопределить:
| Переменная | Назначение | Значение по умолчанию |
|---|---|---|
DATABASE_URL или DATABASE_* |
Подключение к PostgreSQL | postgresql+psycopg://postgres:secret@db:5432/app_db |
TEMPORAL_HOST / PORT / NAMESPACE |
Temporal SDK | temporal:7233, default |
REDIS_URL |
Redis | redis://redis:6379/0 |
NATS_URL / NATS_SUBJECT |
NATS | nats://nats:4222, backup.test |
APP_BUILD |
Строка build-id | вычисляется из Git |
OTEL_SERVICE_NAME |
Имя сервиса в метриках | sbs-api |
- build-scan:
- checkout → установка Python 3.12 →
pip install -r requirements.txt pytestdocker/build-push-action(push, если событие не PR)anchore/sbom-action→actions/upload-artifactaquasecurity/trivy-action(фейлит job при найденных уязвимостях)cosign signи выгрузка.sig/.att(для веткиmain)
- checkout → установка Python 3.12 →
- deploy-test:
scripts/deploy_test.sh <IMAGE_REF>helm dependency buildиhelm upgrade --install
Для окружений за пределами docker-compose:
- Helm-чарт служит эталонной спецификацией Kubernetes.
- Terraform описывает сетевую инфраструктуру, EKS и вспомогательные ВМ.
- Ansible автоматизирует bare-metal поставку: установка Docker и развёртывание контейнеров из образов.
| Действие | Ожидаемый результат |
|---|---|
Invoke-RestMethod http://localhost:8000/health |
{"status":"healthy"} |
Invoke-RestMethod http://localhost:8000/version |
JSON с version и build |
Invoke-RestMethod http://localhost:8000/test-workflow |
Возвращает workflow_id и run_id, в Temporal admin-tools видна завершённая задача |
Invoke-RestMethod http://localhost:8000/nats/test |
Получаем эхо-сообщение |
Invoke-RestMethod http://localhost:8000/redis/test |
Возвращает записанное значение |
Invoke-RestMethod http://localhost:8000/settings/core.version |
Запись из таблицы system_settings |
Invoke-RestMethod http://localhost:8000/metrics |
Prometheus-совместные метрики |
Grafana → SBS Infrastructure |
Графики RPS, latency, 5xx, нагрузка |
С текущим состоянием кодовая база готова к финальному прогону CI/CD и выкладке в тестовый или продуктивный кластер. Одной командой docker-compose up -d вы получаете полностью рабочий контур для разработки и демонстрации.