Перейти к содержанию

Инфраструктура

Руководство по развертыванию полной инфраструктуры Р13.Орбита с использованием Docker Compose.

Docker Compose Stack

Р13.Орбита предоставляет готовую инфраструктуру в docker_dev/docker-compose.yml.

Запуск инфраструктуры

cd docker_dev
docker-compose up -d

Это запустит:

  • PostgreSQL (метаданные Р13.Орбита) - порт 5433
  • PostgreSQL (Keycloak) - порт 5432
  • ClickHouse (аналитические данные) - порты 8123, 9000
  • Redis (кэш, rate limiting) - порт 6379
  • Keycloak (SSO аутентификация) - порт 8080
  • Jaeger (distributed tracing) - порт 16686
  • OTEL Collector (OpenTelemetry) - порты 4317, 4318
  • Prometheus (метрики) - порт 9090
  • Grafana (дашборды) - порт 3000
  • Loki (логи) - порт 3100
  • Promtail (сборщик логов) - -

Проверка статуса

docker-compose ps

Все сервисы должны быть в статусе Up.


Компоненты инфраструктуры

PostgreSQL (Метаданные)

Порт: 5433 База данных: orbita

Подключение:

psql -h localhost -p 5433 -U orbita_user -d orbita

Для Р13.Орбита в .env:

METADATA_DB_URL=postgresql://orbita_user:password@localhost:5433/orbita


ClickHouse (Аналитические данные)

Порт HTTP: 8123 Порт Native: 9000

Проверка:

curl http://localhost:8123
# Ok.

clickhouse-client

Для Р13.Орбита в .env:

CLICKHOUSE_HOST=localhost
CLICKHOUSE_PORT=8123
CLICKHOUSE_DATABASE=default


Redis (Кэш)

Порт: 6379

Проверка:

redis-cli ping
# PONG

Для Р13.Орбита в .env:

REDIS_URL=redis://localhost:6379/0


Keycloak (SSO)

Порт: 8080 Admin UI: http://localhost:8080 Credentials: admin / admin

Настройка realm:

  1. Войдите в админку: http://localhost:8080
  2. Создайте realm orbita
  3. Создайте client orbita-api
  4. Скопируйте client_secret

Для Р13.Орбита в .env:

AUTH_ENABLED=true
KEYCLOAK_SERVER_URL=http://localhost:8080
KEYCLOAK_REALM=orbita
KEYCLOAK_CLIENT_ID=orbita-api
KEYCLOAK_CLIENT_SECRET=your-secret-here


Jaeger (Трейсинг)

UI: http://localhost:16686

Просмотр распределенных трейсов запросов Р13.Орбита.

Для Р13.Орбита в .env:

JAEGER_ENDPOINT=http://localhost:14268/api/traces


Prometheus (Метрики)

UI: http://localhost:9090

Сбор метрик: количество запросов, латентность, использование токенов LLM.


Grafana (Дашборды)

UI: http://localhost:3000 Credentials: admin / admin

Визуализация метрик из Prometheus и логов из Loki.

Импорт дашбордов:

  1. Войдите в Grafana
  2. Import → Upload JSON
  3. Используйте дашборды из docker_dev/grafana/dashboards/

Профили Docker Compose

Только инфраструктура (по умолчанию)

docker-compose up -d

Запускает все сервисы кроме Р13.Орбита API (API запускается локально для разработки).


С Р13.Орбита API в Docker

docker-compose --profile with-api up -d

Включает сервис orbita-api на порту 3001.


Volumes и персистентность

Данные сохраняются в Docker volumes:

docker volume ls | grep orbita
  • orbita_postgres_data - БД метаданных
  • orbita_clickhouse_data - ClickHouse данные
  • orbita_redis_data - Redis персистентность
  • orbita_grafana_data - Grafana настройки

Удаление всех данных:

docker-compose down -v


Мониторинг и алерты

Prometheus Metrics

Р13.Орбита экспортирует метрики:

  • llm_requests_total - количество запросов к LLM
  • llm_tokens_used_total - использованные токены
  • sql_queries_total - SQL запросы
  • api_request_duration_seconds - латентность API

Просмотр в Prometheus:

http://localhost:9090/graph

Пример запроса:

rate(llm_requests_total[5m])


Grafana Dashboards

Готовые дашборды в docker_dev/grafana/dashboards/:

  • Р13.Орбита Overview - общая статистика
  • LLM Usage - использование LLM
  • Database Performance - производительность БД
  • API Metrics - метрики API

Jaeger Traces

Просмотр трейсов выполнения запросов:

  1. Откройте http://localhost:16686
  2. Service → orbita-api
  3. Найдите операцию (например, POST /api/query)
  4. Просмотрите детали выполнения

Logs (Loki + Promtail)

Просмотр логов в Grafana

  1. Откройте Grafana → Explore
  2. Data source → Loki
  3. Query:
    {container_name="orbita-api"}
    

Фильтрация по уровню

{container_name="orbita-api"} |= "ERROR"

Резервное копирование

ClickHouse

# Backup
docker exec clickhouse clickhouse-client --query "BACKUP DATABASE default TO Disk('backups', 'backup_$(date +%Y%m%d).zip')"

# Restore
docker exec clickhouse clickhouse-client --query "RESTORE DATABASE default FROM Disk('backups', 'backup_20240315.zip')"

PostgreSQL

# Backup
docker exec postgres-metadata pg_dump -U orbita_user orbita > backup.sql

# Restore
docker exec -i postgres-metadata psql -U orbita_user orbita < backup.sql

Production Development

Для production используйте:

  • Kubernetes вместо Docker Compose
  • Managed PostgreSQL (AWS RDS, Azure Database)
  • ClickHouse Cluster (не standalone)
  • Redis Cluster или Sentinel
  • External LoadBalancer (Nginx, Traefik)
  • Secrets management (Vault, AWS Secrets Manager)

Следующие шаги