136 lines
4.5 KiB
YAML
136 lines
4.5 KiB
YAML
x-runtime: &runtime
|
|
API_HOST: ${API_HOST:-0.0.0.0}
|
|
API_PORT: ${API_PORT:-8000}
|
|
API_QUEUE_MAX_SIZE: ${API_QUEUE_MAX_SIZE:-10000}
|
|
API_MAX_BODY_BYTES: ${API_MAX_BODY_BYTES:-65536}
|
|
API_READ_TIMEOUT_SECONDS: ${API_READ_TIMEOUT_SECONDS:-10}
|
|
SHUTDOWN_TIMEOUT_SECONDS: ${SHUTDOWN_TIMEOUT_SECONDS:-45}
|
|
WORKER_STATS_HOST: ${WORKER_STATS_HOST:-0.0.0.0}
|
|
WORKER_STATS_PORT: ${WORKER_STATS_PORT:-8001}
|
|
WORKER_STATS_URL: ${WORKER_STATS_URL:-http://worker:${WORKER_STATS_PORT:-8001}/internal/stats}
|
|
WORKER_INSTANCE: ${WORKER_INSTANCE:-worker-1}
|
|
KAFKA_BOOTSTRAP_SERVERS: ${KAFKA_BOOTSTRAP_SERVERS:-redpanda:29092}
|
|
KAFKA_RAW_TOPIC: ${KAFKA_RAW_TOPIC:-cdr.raw}
|
|
KAFKA_DLQ_TOPIC: ${KAFKA_DLQ_TOPIC:-cdr.raw.dlq}
|
|
KAFKA_CONSUMER_GROUP: ${KAFKA_CONSUMER_GROUP:-cdr-processing-group}
|
|
KAFKA_AUTO_OFFSET_RESET: ${KAFKA_AUTO_OFFSET_RESET:-earliest}
|
|
KAFKA_DELIVERY_TIMEOUT_SECONDS: ${KAFKA_DELIVERY_TIMEOUT_SECONDS:-10}
|
|
CLICKHOUSE_HOST: ${CLICKHOUSE_HOST:-clickhouse}
|
|
# CLICKHOUSE_PORT is the published host port; the server listens on 8123 internally.
|
|
CLICKHOUSE_PORT: 8123
|
|
CLICKHOUSE_USER: ${CLICKHOUSE_USER:-default}
|
|
CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD:-}
|
|
CLICKHOUSE_DATABASE: ${CLICKHOUSE_DATABASE:-telecom}
|
|
CLICKHOUSE_TABLE: ${CLICKHOUSE_TABLE:-cdr_records}
|
|
BATCH_SIZE: ${BATCH_SIZE:-1000}
|
|
BATCH_FLUSH_INTERVAL_SECONDS: ${BATCH_FLUSH_INTERVAL_SECONDS:-2}
|
|
CH_RETRY_MAX_ATTEMPTS: ${CH_RETRY_MAX_ATTEMPTS:-3}
|
|
CH_RETRY_INITIAL_DELAY_MS: ${CH_RETRY_INITIAL_DELAY_MS:-500}
|
|
CH_RETRY_BACKOFF_FACTOR: ${CH_RETRY_BACKOFF_FACTOR:-2}
|
|
LOG_LEVEL: ${LOG_LEVEL:-INFO}
|
|
|
|
services:
|
|
redpanda:
|
|
image: docker.redpanda.com/redpandadata/redpanda:v24.1.8
|
|
command:
|
|
- redpanda start
|
|
- --smp 1
|
|
- --memory 1G
|
|
- --reserve-memory 0M
|
|
- --overprovisioned
|
|
- --node-id 0
|
|
- --check=false
|
|
- --kafka-addr PLAINTEXT://0.0.0.0:29092,OUTSIDE://0.0.0.0:${KAFKA_PORT:-9092}
|
|
- --advertise-kafka-addr PLAINTEXT://redpanda:29092,OUTSIDE://${KAFKA_ADVERTISED_HOST:-localhost}:${KAFKA_PORT:-9092}
|
|
ports:
|
|
- "${KAFKA_PORT:-9092}:${KAFKA_PORT:-9092}"
|
|
- "${REDPANDA_ADMIN_PORT:-9644}:9644"
|
|
volumes:
|
|
- kafka-data:/var/lib/redpanda/data
|
|
healthcheck:
|
|
test: ["CMD", "rpk", "cluster", "health", "--exit-when-healthy"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 12
|
|
|
|
clickhouse:
|
|
image: clickhouse/clickhouse-server:24.3-alpine
|
|
environment:
|
|
CLICKHOUSE_USER: ${CLICKHOUSE_USER:-default}
|
|
CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD:-}
|
|
CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1
|
|
ports:
|
|
- "${CLICKHOUSE_PORT:-8123}:8123"
|
|
- "${CLICKHOUSE_NATIVE_PORT:-9000}:9000"
|
|
volumes:
|
|
- clickhouse-data:/var/lib/clickhouse
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "clickhouse-client --user \"$$CLICKHOUSE_USER\" --password \"$$CLICKHOUSE_PASSWORD\" --query 'SELECT 1'"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 12
|
|
|
|
init:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile.worker
|
|
command: ["python", "-m", "app.common.bootstrap"]
|
|
environment: *runtime
|
|
depends_on:
|
|
redpanda:
|
|
condition: service_healthy
|
|
clickhouse:
|
|
condition: service_healthy
|
|
healthcheck:
|
|
test: ["CMD", "python", "-c", "from app.common.bootstrap import SCHEMA; assert SCHEMA.is_file()"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 3
|
|
restart: "no"
|
|
|
|
api:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile.api
|
|
environment: *runtime
|
|
ports:
|
|
- "${API_PORT:-8000}:${API_PORT:-8000}"
|
|
stop_grace_period: 60s
|
|
depends_on:
|
|
redpanda:
|
|
condition: service_healthy
|
|
clickhouse:
|
|
condition: service_healthy
|
|
init:
|
|
condition: service_completed_successfully
|
|
healthcheck:
|
|
test: ["CMD", "python", "-c", "import os, urllib.request; urllib.request.urlopen('http://127.0.0.1:' + os.environ['API_PORT'] + '/health')"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 12
|
|
|
|
worker:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile.worker
|
|
environment: *runtime
|
|
ports:
|
|
- "${WORKER_STATS_PORT:-8001}:${WORKER_STATS_PORT:-8001}"
|
|
stop_grace_period: 60s
|
|
depends_on:
|
|
redpanda:
|
|
condition: service_healthy
|
|
clickhouse:
|
|
condition: service_healthy
|
|
init:
|
|
condition: service_completed_successfully
|
|
healthcheck:
|
|
test: ["CMD", "python", "-c", "import os, urllib.request; urllib.request.urlopen('http://127.0.0.1:' + os.environ['WORKER_STATS_PORT'] + '/health')"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 12
|
|
|
|
volumes:
|
|
kafka-data:
|
|
clickhouse-data:
|