| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307 |
- services:
- clickhouse:
- image: clickhouse/clickhouse-server:26.8.1.2041
- container_name: clickhouse
- restart: unless-stopped
- mem_limit: 2g
- environment:
- - TZ=Europe/Tallinn
- - CLICKHOUSE_USER=default
- - CLICKHOUSE_PASSWORD=dev_clickhouse_2026
- - CLICKHOUSE_DB=default
- - CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1
- ports:
- - "100.87.1.24:8125:8123" # ClickHouse HTTP (ainult Tailscale)
- - "100.87.1.24:9004:9000" # native TCP (ainult Tailscale)
- volumes:
- - ./data/clickhouse:/var/lib/clickhouse
- - ./config:/etc/clickhouse-server/config.d
- - /etc/localtime:/etc/localtime:ro
- - /usr/share/zoneinfo:/usr/share/zoneinfo:ro
- ulimits:
- nofile:
- soft: 262144
- hard: 262144
- # Healthcheck native TCP 9000 vastu (collector kasutab just seda, mitte HTTP 8123).
- healthcheck:
- test: ["CMD-SHELL", "clickhouse-client --password \"$$CLICKHOUSE_PASSWORD\" --query 'SELECT 1'"]
- interval: 10s
- timeout: 5s
- retries: 12
- start_period: 30s
- networks:
- - main_ai_network
- # Zigbee andurite koguja: tellib valvuri MQTT-d ja kirjutab tunniaegregaadid ClickHouse'i.
- # Töötab püsivalt; tunniaegregaat arvutatakse mälus ja flush'itakse iga täistunni järel.
- zigbee-collector:
- build: ./zigbee-collector
- container_name: zigbee-collector
- restart: unless-stopped
- mem_limit: 128m
- env_file:
- - .env
- environment:
- - TZ=Europe/Tallinn
- - MQTT_HOST=${MQTT_HOST:-100.80.254.54}
- - MQTT_PORT=${MQTT_PORT:-1883}
- - MQTT_TOPIC=${MQTT_TOPIC:-zigbee2mqtt/Temperatuur}
- - DOOR_TOPICS=${DOOR_TOPICS:-}
- - CH_URL=${CH_URL:-http://clickhouse:8123}
- - CH_DB=${CH_DB:-uus67}
- - CH_TABLE=${CH_TABLE:-temperatuur}
- - CH_DOOR_TABLE=${CH_DOOR_TABLE:-ukseandur}
- - CH_FAULT_TABLE=${CH_FAULT_TABLE:-vead}
- - OTEL_SERVICE_NAME=zigbee-collector
- - OTEL_TRACES_EXPORTER=otlp
- - OTEL_METRICS_EXPORTER=none
- - OTEL_LOGS_EXPORTER=none
- - OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
- - OTEL_EXPORTER_OTLP_PROTOCOL=grpc
- - OTEL_RESOURCE_ATTRIBUTES=deployment.environment.name=ohmu
- depends_on:
- - clickhouse
- networks:
- - main_ai_network
- # Välistemperatuuri koguja (Open-Meteo): backfill + tunnipoll -> uus67.valisilm.
- weather-collector:
- build: ./weather-collector
- container_name: weather-collector
- restart: unless-stopped
- mem_limit: 128m
- env_file:
- - .env
- environment:
- - TZ=Europe/Tallinn
- - CH_URL=${CH_URL:-http://clickhouse:8123}
- - CH_DB=${CH_DB:-uus67}
- - CH_USER=${CH_USER:-zigbee}
- - CH_WEATHER_TABLE=${CH_WEATHER_TABLE:-valisilm}
- - BACKFILL_FROM=${BACKFILL_FROM:-2026-09-17}
- - OTEL_SERVICE_NAME=weather-collector
- - OTEL_TRACES_EXPORTER=otlp
- - OTEL_METRICS_EXPORTER=none
- - OTEL_LOGS_EXPORTER=none
- - OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
- - OTEL_EXPORTER_OTLP_PROTOCOL=grpc
- - OTEL_RESOURCE_ATTRIBUTES=deployment.environment.name=ohmu
- depends_on:
- - clickhouse
- networks:
- - main_ai_network
- # Nutikodu veebiliides: uus67 zigbee andmete interaktiivne ajatelg (FastAPI + ECharts).
- # Ligipääs ainult Tailscale'ist: http://100.87.1.24:8095
- nutikodu-web:
- build: ./nutikodu-web
- container_name: nutikodu-web
- restart: unless-stopped
- mem_limit: 512m
- env_file:
- - .env
- environment:
- - TZ=Europe/Tallinn
- - CH_URL=${CH_URL:-http://clickhouse:8123}
- - CH_DB=${CH_DB:-uus67}
- - CH_USER=${CH_USER:-zigbee}
- - WEB_ACCESS_TOKEN=${WEB_ACCESS_TOKEN:-}
- - OTEL_SERVICE_NAME=nutikodu-web
- - OTEL_TRACES_EXPORTER=otlp
- - OTEL_METRICS_EXPORTER=none
- - OTEL_LOGS_EXPORTER=none
- - OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
- - OTEL_EXPORTER_OTLP_PROTOCOL=grpc
- - OTEL_RESOURCE_ATTRIBUTES=deployment.environment.name=ohmu
- ports:
- - "100.87.1.24:8095:8095"
- depends_on:
- - clickhouse
- networks:
- - main_ai_network
- - prod_net
- # ClickStack (ametlik "Docker Compose" arhitektuur): HyperDX app-only + eraldi Mongo.
- # (Varem: all-in-one, mis dubleeris ClickHouse'i + Mongo.) NB: hostil port 8123 = Home Assistant,
- # ClickHouse HTTP = 8125 (vt LOEMIND). UI = 18080.
- clickstack:
- image: docker.hyperdx.io/hyperdx/hyperdx:2.37.0
- container_name: clickstack
- restart: unless-stopped
- environment:
- - TZ=Europe/Tallinn
- - FRONTEND_URL=http://100.87.1.24:18080
- - SERVER_URL=http://127.0.0.1:8000
- - HYPERDX_APP_URL=http://100.87.1.24:18080
- - HYPERDX_APP_PORT=8080
- - HYPERDX_API_PORT=8000
- - HYPERDX_API_KEY=02a19ecf-f62e-4e17-819f-3ee1498d69f3
- - MONGO_URI=mongodb://clickstack-db:27017/hyperdx
- - OPAMP_PORT=4320
- - OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318
- - OTEL_SERVICE_NAME=hdx-oss-app
- - NEXT_PUBLIC_IS_LOCAL_MODE=false
- # Brauseri (session replay) collector-URL peab olema kliendist kättesaadav (mitte localhost).
- - NEXT_PUBLIC_OTEL_EXPORTER_OTLP_ENDPOINT=http://100.87.1.24:4318
- - EXPRESS_SESSION_SECRET=dev_session_secret_2026
- - 'DEFAULT_CONNECTIONS=[{"name":"Local ClickHouse","host":"http://clickhouse:8123","username":"default","password":"dev_clickhouse_2026"}]'
- ports:
- - "127.0.0.1:18080:8080"
- - "100.87.1.24:18080:8080" # HyperDX UI
- volumes:
- - ./patches/4719-70b065addcfc053d.js:/app/packages/app/packages/app/.next/static/chunks/4719-70b065addcfc053d.js:ro
- - ./patches/pages/clickhouse-46029ebbad38b40a.js:/app/packages/app/packages/app/.next/static/chunks/pages/clickhouse-46029ebbad38b40a.js:ro
- - ./patches/4751-53b929fca5a575a9.js:/app/packages/app/packages/app/.next/static/chunks/4751-53b929fca5a575a9.js:ro
- - ./patches/1021-40ca2f669b13138d.js:/app/packages/app/packages/app/.next/static/chunks/1021-40ca2f669b13138d.js:ro
- # ClickHouse peab olema terve (native 9000), muidu collector'i seed ebaõnnestub.
- depends_on:
- clickstack-db:
- condition: service_started
- clickhouse:
- condition: service_healthy
- networks:
- - main_ai_network
- # Mongo: HyperDX rakenduse olek (sources/dashboards/alerts/users). Migreeritud all-in-one'ist.
- clickstack-db:
- image: mongo:5.0.32-focal
- container_name: clickstack-db
- restart: unless-stopped
- mem_limit: 512m
- environment:
- - TZ=Europe/Tallinn
- volumes:
- - ./data/mongo:/data/db
- networks:
- - main_ai_network
- # Reverse-proxy pordil 8124: /clickstack/ -> 302 -> :18080 (ühtlustatud UI),
- # backendi teed ('/api/', /__ENV.js) -> HyperDX app, kõik muu -> ClickHouse (8124 jääb DBeaver-ile).
- clickstack-proxy:
- image: nginx:alpine
- container_name: clickstack-proxy
- restart: unless-stopped
- ports:
- - "127.0.0.1:8124:8124"
- - "100.87.1.24:8124:8124"
- volumes:
- - ./config/clickstack-proxy/nginx.conf:/etc/nginx/conf.d/clickstack.conf:ro
- depends_on:
- - clickhouse
- - clickstack
- networks:
- - main_ai_network
- # Hosti metrikad (node-exporter) — Prometheus endpoint :9100
- node-exporter:
- image: prom/node-exporter:latest
- container_name: node-exporter
- restart: unless-stopped
- mem_limit: 128m
- command:
- - "--path.rootfs=/host"
- - "--path.procfs=/host/proc"
- - "--path.sysfs=/host/sys"
- volumes:
- - /proc:/host/proc:ro
- - /sys:/host/sys:ro
- - /:/host:ro,rslave
- networks:
- - main_ai_network
- # Konteinerite metrikad (cadvisor) — Prometheus endpoint :8080
- cadvisor:
- image: gcr.io/cadvisor/cadvisor:latest
- container_name: cadvisor
- restart: unless-stopped
- mem_limit: 256m
- privileged: true
- command:
- - "--docker_only=true"
- - "--disable_metrics=advtcp,cpu_topology,cpuset,hugetlb,memory_numa,process,referenced_memory,resctrl,sched,tcp,udp,percpu"
- devices:
- - /dev/kmsg
- volumes:
- - /:/rootfs:ro
- - /var/run:/var/run:ro
- - /sys:/sys:ro
- - /var/lib/docker/:/var/lib/docker:ro
- - /dev/disk/:/dev/disk:ro
- networks:
- - main_ai_network
- # ClickStack ametlik OTel-collector (OpAMP -> clickstack app). Base config app'ist (skeem/rollupid);
- # custom.config.yaml lisab hosti-meetrikad (node/cadvisor/llamacpp) + konteinerilogid.
- otel-collector:
- image: docker.clickhouse.com/clickhouse/clickstack-otel-collector:2
- container_name: otel-collector
- restart: unless-stopped
- mem_limit: 512m
- user: "0:0" # root: vaja lugeda /var/lib/docker/containers/*-json.log (710 root:root)
- environment:
- - TZ=Europe/Tallinn
- - CLICKHOUSE_ENDPOINT=tcp://clickhouse:9000?dial_timeout=10s
- - CLICKHOUSE_USER=default
- - CLICKHOUSE_PASSWORD=dev_clickhouse_2026
- - HYPERDX_OTEL_EXPORTER_CLICKHOUSE_DATABASE=default
- - OPAMP_SERVER_URL=http://clickstack:4320
- - CUSTOM_OTELCOL_CONFIG_FILE=/etc/otelcol-contrib/custom.config.yaml
- extra_hosts:
- - "host.docker.internal:host-gateway"
- volumes:
- - ./config/otel-collector/custom.config.yaml:/etc/otelcol-contrib/custom.config.yaml:ro
- - /var/lib/docker/containers:/var/lib/docker/containers:ro
- ports:
- - "127.0.0.1:4317:4317"
- - "100.87.1.24:4317:4317"
- - "127.0.0.1:4318:4318"
- - "100.87.1.24:4318:4318"
- depends_on:
- - clickstack
- - clickhouse
- - node-exporter
- - cadvisor
- networks:
- - main_ai_network
- # HyperDX alert-webhook → Telegram relay (generic webhook vastuvõtja)
- alert-relay:
- image: python:3.12-slim
- container_name: alert-relay
- restart: unless-stopped
- mem_limit: 64m
- command: ["python", "/app/alert_relay.py"]
- environment:
- - TZ=Europe/Tallinn
- - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
- - TELEGRAM_CHAT_ID=5036685258
- volumes:
- - ./config/alert-relay/alert_relay.py:/app/alert_relay.py:ro
- networks:
- - main_ai_network
- # Rate-limiter HyperDX OTLP ingest'ile (otel.odamus.com). Edge Caddy -> see -> otel-collector:4318.
- # nginx limit_req (Caddy standardbuildis rate_limit plugin't pole).
- otel-ratelimit:
- image: nginx:alpine
- container_name: otel-ratelimit
- restart: unless-stopped
- mem_limit: 32m
- environment:
- - TZ=Europe/Tallinn
- volumes:
- - ./config/otel-ratelimit/nginx.conf:/etc/nginx/nginx.conf:ro
- ports:
- - "100.87.1.24:4319:4319"
- depends_on:
- - otel-collector
- networks:
- - main_ai_network
- networks:
- main_ai_network:
- external: true
- name: main_ai_network
- prod_net:
- external: true
- name: prod_net
|