Развёртывание 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_NAME | trektik | Имя сервиса |
| PORT | 3000 | Порт API сервера |
| LOG_LEVEL | info | Уровень логирования |
| CORS_ORIGINS | http://localhost:3001 | Разрешённые origin (через запятую) |
| APP_URL | http://localhost:3001 | URL приложения (для ссылок в email) |
PostgreSQL
| Переменная | По умолчанию |
|---|---|
| POSTGRES_DSN | postgresql://trektik:trektik_dev_secret@localhost:15432/trektik_meta?sslmode=disable |
ClickHouse
| Переменная | По умолчанию |
|---|---|
| CLICKHOUSE_HOST | localhost |
| CLICKHOUSE_PORT | 19000 |
| CLICKHOUSE_DB | trektik_analytics |
| CLICKHOUSE_USER | trektik |
| CLICKHOUSE_PASSWORD | trektik_dev_secret |
Redis
| Переменная | По умолчанию |
|---|---|
| REDIS_URL | redis://:trektik_dev_secret@localhost:16379/0 |
| CACHE_TTL | 300 |
Kafka
| Переменная | По умолчанию |
|---|---|
| KAFKA_BROKERS | localhost:19092 |
| KAFKA_TOPIC_RAW | events.raw |
| KAFKA_TOPIC_PROCESSED | events.processed |
| KAFKA_CONSUMER_GROUP | trektik-processor |
Авторизация и уведомления
| Переменная | По умолчанию | Описание |
|---|---|---|
| JWT_SECRET | dev-jwt-secret-change-in-production | Секрет для JWT токенов |
| SMTP_HOST | localhost | SMTP сервер |
| SMTP_PORT | 1025 | SMTP порт |
| QUERY_ENGINE_URL | http://localhost:3200 | URL 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 микросервисов:
| Компонент | Образ | Порт | Реплики |
|---|---|---|---|
| API | ghcr.io/aleksandrklyasyuk/trektik-api | 8080 | 2 |
| Collector | ghcr.io/aleksandrklyasyuk/trektik-collector | 8081 | 2 |
| Processor | ghcr.io/aleksandrklyasyuk/trektik-processor | - | 2 |
| Query Engine | ghcr.io/aleksandrklyasyuk/trektik-query-engine | 8082 | 2 |
| Worker | ghcr.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: falseConfigMap (что генерируется)
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.comHelm-чарт сам создаст все сервисы (API, Collector, Processor, Query Engine), применит миграции и настроит Ingress. Исходный код не нужен — всё упаковано в Docker-образы.