Trektik
Документация

Развёртывание On-Premise

Как запустить Trektik на своих серверах. On-premise доступен на тарифе Enterprise. Развёртывание через Helm на Kubernetes.

Что нужно

Trektik состоит из следующих сервисов:

  • PostgreSQL 16 — метаданные (пользователи, проекты, настройки)
  • ClickHouse 24.3 — хранение событий аналитики
  • Redis 7 — кеш и очереди
  • Redpanda / Kafka — потоковая обработка событий
  • MinIO — S3-совместимое хранилище (реплеи, экспорты, бекапы)
  • SMTP-сервер — для отправки email-уведомлений

Переменные окружения

Переменные настраиваются через Helm values или напрямую в окружении контейнеров.

Основные

ПеременнаяПо умолчаниюОписание
SERVICE_NAMEtrektikИмя сервиса
PORT3000Порт API сервера
LOG_LEVELinfoУровень логирования
CORS_ORIGINShttp://localhost:3001Разрешённые origin (через запятую)
APP_URLhttp://localhost:3001URL приложения (для ссылок в email)

PostgreSQL

ПеременнаяПо умолчанию
POSTGRES_DSNpostgresql://trektik:trektik_dev_secret@localhost:15432/trektik_meta?sslmode=disable

ClickHouse

ПеременнаяПо умолчанию
CLICKHOUSE_HOSTlocalhost
CLICKHOUSE_PORT19000
CLICKHOUSE_DBtrektik_analytics
CLICKHOUSE_USERtrektik
CLICKHOUSE_PASSWORDtrektik_dev_secret

Redis

ПеременнаяПо умолчанию
REDIS_URLredis://:trektik_dev_secret@localhost:16379/0
CACHE_TTL300

Kafka

ПеременнаяПо умолчанию
KAFKA_BROKERSlocalhost:19092
KAFKA_TOPIC_RAWevents.raw
KAFKA_TOPIC_PROCESSEDevents.processed
KAFKA_CONSUMER_GROUPtrektik-processor

Авторизация и уведомления

ПеременнаяПо умолчаниюОписание
JWT_SECRETdev-jwt-secret-change-in-productionСекрет для JWT токенов
SMTP_HOSTlocalhostSMTP сервер
SMTP_PORT1025SMTP порт
QUERY_ENGINE_URLhttp://localhost:3200URL Query Engine
TELEGRAM_BOT_TOKEN(пусто)Токен Telegram-бота для алертов
SLACK_BOT_TOKEN(пусто)Токен Slack-бота для алертов
WEBHOOK_SIGNING_SECRET(пусто)HMAC-SHA256 секрет для вебхуков
SCHEMA_REGISTRY_URL(пусто)URL Schema Registry (Confluent)
Для продакшена обязательно смените: JWT_SECRET (минимум 32 символа), все пароли (POSTGRES_PASSWORD, CLICKHOUSE_PASSWORD, REDIS_PASSWORD, MINIO_ROOT_PASSWORD), CORS_ORIGINS и APP_URL.

Helm (Kubernetes)

Helm-чарт доступен как OCI-артефакт в GitHub Container Registry. Версия чарта: 0.1.0, appVersion: 0.12.0.

Установка

# Авторизация в реестре (токен выдаётся вместе с Enterprise-лицензией)
helm registry login ghcr.io -u your-username

# Установка
helm install trektik oci://ghcr.io/aleksandrklyasyuk/charts/trektik \
  --version 0.1.0 \
  -f my-values.yaml \
  -n trektik --create-namespace

Компоненты чарта

Чарт разворачивает 5 микросервисов:

КомпонентОбразПортРеплики
APIghcr.io/aleksandrklyasyuk/trektik-api80802
Collectorghcr.io/aleksandrklyasyuk/trektik-collector80812
Processorghcr.io/aleksandrklyasyuk/trektik-processor-2
Query Engineghcr.io/aleksandrklyasyuk/trektik-query-engine80822
Workerghcr.io/aleksandrklyasyuk/trektik-worker-1

Пример values.yaml

# ── API Server ──
api:
  replicas: 2
  image:
    repository: ghcr.io/aleksandrklyasyuk/trektik-api
    tag: ""        # по умолчанию appVersion (0.12.0)
    pullPolicy: IfNotPresent
  resources:
    requests: { cpu: 250m, memory: 256Mi }
    limits:   { cpu: "1", memory: 512Mi }
  port: 8080
  env: {}
  #  LOG_LEVEL: info
  #  CORS_ORIGINS: "*"

# ── Collector (приём событий) ──
collector:
  replicas: 2
  image:
    repository: ghcr.io/aleksandrklyasyuk/trektik-collector
  resources:
    requests: { cpu: 250m, memory: 256Mi }
    limits:   { cpu: "1", memory: 512Mi }
  port: 8081

# ── Processor (Kafka consumer) ──
processor:
  replicas: 2
  image:
    repository: ghcr.io/aleksandrklyasyuk/trektik-processor
  resources:
    requests: { cpu: 500m, memory: 512Mi }
    limits:   { cpu: "2", memory: 1Gi }

# ── Query Engine ──
queryEngine:
  replicas: 2
  image:
    repository: ghcr.io/aleksandrklyasyuk/trektik-query-engine
  resources:
    requests: { cpu: 500m, memory: 512Mi }
    limits:   { cpu: "2", memory: 1Gi }
  port: 8082

# ── Worker (фоновые задачи) ──
worker:
  replicas: 1
  image:
    repository: ghcr.io/aleksandrklyasyuk/trektik-worker
  resources:
    requests: { cpu: 250m, memory: 256Mi }
    limits:   { cpu: "1", memory: 512Mi }

# ── Ingress ──
ingress:
  enabled: false
  className: nginx
  host: analytics.example.com
  tls:
    enabled: false
    secretName: trektik-tls

# ── Внешние сервисы (укажите свои) ──
postgresql:
  external:
    host: "pg.example.com"
    port: 5432
    user: trektik
    password: "ваш-пароль"
    database: trektik

clickhouse:
  external:
    host: "ch.example.com"
    port: 9000
    database: trektik
    user: default
    password: "ваш-пароль"

redis:
  external:
    url: "redis://redis.example.com:6379"

kafka:
  external:
    brokers: "kafka1:9092,kafka2:9092"
    topicRaw: trektik-events-raw
    topicProcessed: trektik-events-processed

minio:
  external:
    endpoint: "https://s3.example.com"
    accessKey: "ваш-ключ"
    secretKey: "ваш-секрет"
    bucket: trektik

# ── Или встроенные сервисы (для тестов) ──
# postgresql:
#   internal:
#     enabled: true
#     storage: 10Gi
# clickhouse:
#   internal:
#     enabled: true
#     storage: 50Gi
# redis:
#   internal:
#     enabled: true
#     storage: 2Gi
# kafka:
#   internal:
#     enabled: true
#     storage: 20Gi
# minio:
#   internal:
#     enabled: true
#     storage: 20Gi

# ── Автоскейлинг (HPA) ──
autoscaling:
  enabled: false
  api:
    minReplicas: 2
    maxReplicas: 10
    targetCPU: 70
    targetMemory: 80
  collector:
    minReplicas: 2
    maxReplicas: 20
    targetCPU: 65
    targetMemory: 75
  queryEngine:
    minReplicas: 2
    maxReplicas: 8
    targetCPU: 70
    targetMemory: 80

# ── Мониторинг ──
monitoring:
  prometheus:
    enabled: false
    serviceMonitor: true
  grafana:
    enabled: false

ConfigMap (что генерируется)

Helm автоматически создаёт ConfigMap с переменными окружения для всех подов:

# Генерируется из values.yaml:
LOG_LEVEL: "info"
API_PORT: "8080"
COLLECTOR_PORT: "8081"
QUERY_ENGINE_PORT: "8082"
QUERY_ENGINE_URL: "http://trektik-query-engine:8082"
POSTGRES_HOST: "pg.example.com"
POSTGRES_PORT: "5432"
POSTGRES_DB: "trektik"
POSTGRES_USER: "trektik"
CLICKHOUSE_HOST: "ch.example.com"
CLICKHOUSE_PORT: "9000"
CLICKHOUSE_DB: "trektik"
CLICKHOUSE_USER: "default"
REDIS_URL: "redis://redis.example.com:6379"
KAFKA_BROKERS: "kafka1:9092,kafka2:9092"
KAFKA_TOPIC_RAW: "trektik-events-raw"
KAFKA_TOPIC_PROCESSED: "trektik-events-processed"
S3_ENDPOINT: "https://s3.example.com"
S3_BUCKET: "trektik"

Быстрый старт (3 команды)

# 1. Авторизоваться в реестре
helm registry login ghcr.io -u your-username

# 2. Создать файл настроек (values.yaml)
cat > my-values.yaml <<EOF
api:
  replicas: 2
postgresql:
  external:
    host: "db.example.com"
    password: "your-secure-password"
clickhouse:
  external:
    host: "ch.example.com"
ingress:
  enabled: true
  host: analytics.your-company.com
  tls:
    enabled: true
EOF

# 3. Установить
helm install trektik oci://ghcr.io/aleksandrklyasyuk/charts/trektik \
  --version 0.1.0 \
  --namespace trektik --create-namespace \
  -f my-values.yaml

# Готово! Откройте https://analytics.your-company.com
Helm-чарт сам создаст все сервисы (API, Collector, Processor, Query Engine), применит миграции и настроит Ingress. Исходный код не нужен — всё упаковано в Docker-образы.
ДокументацияМиграция