docker-compose.yml.bak.1791388966 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. services:
  2. clickhouse:
  3. image: clickhouse/clickhouse-server:26.8.1.2041
  4. container_name: clickhouse
  5. restart: unless-stopped
  6. mem_limit: 2g
  7. environment:
  8. - TZ=Europe/Tallinn
  9. - CLICKHOUSE_USER=default
  10. - CLICKHOUSE_PASSWORD=dev_clickhouse_2026
  11. - CLICKHOUSE_DB=default
  12. - CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1
  13. ports:
  14. - "100.87.1.24:8125:8123" # ClickHouse HTTP (ainult Tailscale)
  15. - "100.87.1.24:9004:9000" # native TCP (ainult Tailscale)
  16. volumes:
  17. - ./data/clickhouse:/var/lib/clickhouse
  18. - ./config:/etc/clickhouse-server/config.d
  19. - /etc/localtime:/etc/localtime:ro
  20. - /usr/share/zoneinfo:/usr/share/zoneinfo:ro
  21. ulimits:
  22. nofile:
  23. soft: 262144
  24. hard: 262144
  25. # Healthcheck native TCP 9000 vastu (collector kasutab just seda, mitte HTTP 8123).
  26. healthcheck:
  27. test: ["CMD-SHELL", "clickhouse-client --password \"$$CLICKHOUSE_PASSWORD\" --query 'SELECT 1'"]
  28. interval: 10s
  29. timeout: 5s
  30. retries: 12
  31. start_period: 30s
  32. networks:
  33. - main_ai_network
  34. # Zigbee andurite koguja: tellib valvuri MQTT-d ja kirjutab tunniaegregaadid ClickHouse'i.
  35. # Töötab püsivalt; tunniaegregaat arvutatakse mälus ja flush'itakse iga täistunni järel.
  36. zigbee-collector:
  37. build: ./zigbee-collector
  38. container_name: zigbee-collector
  39. restart: unless-stopped
  40. mem_limit: 128m
  41. env_file:
  42. - .env
  43. environment:
  44. - TZ=Europe/Tallinn
  45. - MQTT_HOST=${MQTT_HOST:-100.80.254.54}
  46. - MQTT_PORT=${MQTT_PORT:-1883}
  47. - MQTT_TOPIC=${MQTT_TOPIC:-zigbee2mqtt/Temperatuur}
  48. - DOOR_TOPICS=${DOOR_TOPICS:-}
  49. - CH_URL=${CH_URL:-http://clickhouse:8123}
  50. - CH_DB=${CH_DB:-uus67}
  51. - CH_TABLE=${CH_TABLE:-temperatuur}
  52. - CH_DOOR_TABLE=${CH_DOOR_TABLE:-ukseandur}
  53. - CH_FAULT_TABLE=${CH_FAULT_TABLE:-vead}
  54. - OTEL_SERVICE_NAME=zigbee-collector
  55. - OTEL_TRACES_EXPORTER=otlp
  56. - OTEL_METRICS_EXPORTER=none
  57. - OTEL_LOGS_EXPORTER=none
  58. - OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
  59. - OTEL_EXPORTER_OTLP_PROTOCOL=grpc
  60. - OTEL_RESOURCE_ATTRIBUTES=deployment.environment.name=ohmu
  61. depends_on:
  62. - clickhouse
  63. networks:
  64. - main_ai_network
  65. # Välistemperatuuri koguja (Open-Meteo): backfill + tunnipoll -> uus67.valisilm.
  66. weather-collector:
  67. build: ./weather-collector
  68. container_name: weather-collector
  69. restart: unless-stopped
  70. mem_limit: 128m
  71. env_file:
  72. - .env
  73. environment:
  74. - TZ=Europe/Tallinn
  75. - CH_URL=${CH_URL:-http://clickhouse:8123}
  76. - CH_DB=${CH_DB:-uus67}
  77. - CH_USER=${CH_USER:-zigbee}
  78. - CH_WEATHER_TABLE=${CH_WEATHER_TABLE:-valisilm}
  79. - BACKFILL_FROM=${BACKFILL_FROM:-2026-09-17}
  80. - OTEL_SERVICE_NAME=weather-collector
  81. - OTEL_TRACES_EXPORTER=otlp
  82. - OTEL_METRICS_EXPORTER=none
  83. - OTEL_LOGS_EXPORTER=none
  84. - OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
  85. - OTEL_EXPORTER_OTLP_PROTOCOL=grpc
  86. - OTEL_RESOURCE_ATTRIBUTES=deployment.environment.name=ohmu
  87. depends_on:
  88. - clickhouse
  89. networks:
  90. - main_ai_network
  91. # Nutikodu veebiliides: uus67 zigbee andmete interaktiivne ajatelg (FastAPI + ECharts).
  92. # Ligipääs ainult Tailscale'ist: http://100.87.1.24:8095
  93. nutikodu-web:
  94. build: ./nutikodu-web
  95. container_name: nutikodu-web
  96. restart: unless-stopped
  97. mem_limit: 512m
  98. env_file:
  99. - .env
  100. environment:
  101. - TZ=Europe/Tallinn
  102. - CH_URL=${CH_URL:-http://clickhouse:8123}
  103. - CH_DB=${CH_DB:-uus67}
  104. - CH_USER=${CH_USER:-zigbee}
  105. - WEB_ACCESS_TOKEN=${WEB_ACCESS_TOKEN:-}
  106. - OTEL_SERVICE_NAME=nutikodu-web
  107. - OTEL_TRACES_EXPORTER=otlp
  108. - OTEL_METRICS_EXPORTER=none
  109. - OTEL_LOGS_EXPORTER=none
  110. - OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
  111. - OTEL_EXPORTER_OTLP_PROTOCOL=grpc
  112. - OTEL_RESOURCE_ATTRIBUTES=deployment.environment.name=ohmu
  113. ports:
  114. - "100.87.1.24:8095:8095"
  115. depends_on:
  116. - clickhouse
  117. networks:
  118. - main_ai_network
  119. - prod_net
  120. # ClickStack (ametlik "Docker Compose" arhitektuur): HyperDX app-only + eraldi Mongo.
  121. # (Varem: all-in-one, mis dubleeris ClickHouse'i + Mongo.) NB: hostil port 8123 = Home Assistant,
  122. # ClickHouse HTTP = 8125 (vt LOEMIND). UI = 18080.
  123. clickstack:
  124. image: docker.hyperdx.io/hyperdx/hyperdx:2.37.0
  125. container_name: clickstack
  126. restart: unless-stopped
  127. environment:
  128. - TZ=Europe/Tallinn
  129. - FRONTEND_URL=http://100.87.1.24:18080
  130. - SERVER_URL=http://127.0.0.1:8000
  131. - HYPERDX_APP_URL=http://100.87.1.24:18080
  132. - HYPERDX_APP_PORT=8080
  133. - HYPERDX_API_PORT=8000
  134. - HYPERDX_API_KEY=02a19ecf-f62e-4e17-819f-3ee1498d69f3
  135. - MONGO_URI=mongodb://clickstack-db:27017/hyperdx
  136. - OPAMP_PORT=4320
  137. - OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318
  138. - OTEL_SERVICE_NAME=hdx-oss-app
  139. - NEXT_PUBLIC_IS_LOCAL_MODE=false
  140. # Brauseri (session replay) collector-URL peab olema kliendist kättesaadav (mitte localhost).
  141. - NEXT_PUBLIC_OTEL_EXPORTER_OTLP_ENDPOINT=http://100.87.1.24:4318
  142. - EXPRESS_SESSION_SECRET=dev_session_secret_2026
  143. - 'DEFAULT_CONNECTIONS=[{"name":"Local ClickHouse","host":"http://clickhouse:8123","username":"default","password":"dev_clickhouse_2026"}]'
  144. ports:
  145. - "127.0.0.1:18080:8080"
  146. - "100.87.1.24:18080:8080" # HyperDX UI
  147. volumes:
  148. - ./patches/4719-70b065addcfc053d.js:/app/packages/app/packages/app/.next/static/chunks/4719-70b065addcfc053d.js:ro
  149. - ./patches/pages/clickhouse-46029ebbad38b40a.js:/app/packages/app/packages/app/.next/static/chunks/pages/clickhouse-46029ebbad38b40a.js:ro
  150. - ./patches/4751-53b929fca5a575a9.js:/app/packages/app/packages/app/.next/static/chunks/4751-53b929fca5a575a9.js:ro
  151. - ./patches/1021-40ca2f669b13138d.js:/app/packages/app/packages/app/.next/static/chunks/1021-40ca2f669b13138d.js:ro
  152. # ClickHouse peab olema terve (native 9000), muidu collector'i seed ebaõnnestub.
  153. depends_on:
  154. clickstack-db:
  155. condition: service_started
  156. clickhouse:
  157. condition: service_healthy
  158. networks:
  159. - main_ai_network
  160. # Mongo: HyperDX rakenduse olek (sources/dashboards/alerts/users). Migreeritud all-in-one'ist.
  161. clickstack-db:
  162. image: mongo:5.0.32-focal
  163. container_name: clickstack-db
  164. restart: unless-stopped
  165. mem_limit: 512m
  166. environment:
  167. - TZ=Europe/Tallinn
  168. volumes:
  169. - ./data/mongo:/data/db
  170. networks:
  171. - main_ai_network
  172. # Reverse-proxy pordil 8124: /clickstack/ -> 302 -> :18080 (ühtlustatud UI),
  173. # backendi teed ('/api/', /__ENV.js) -> HyperDX app, kõik muu -> ClickHouse (8124 jääb DBeaver-ile).
  174. clickstack-proxy:
  175. image: nginx:alpine
  176. container_name: clickstack-proxy
  177. restart: unless-stopped
  178. ports:
  179. - "127.0.0.1:8124:8124"
  180. - "100.87.1.24:8124:8124"
  181. volumes:
  182. - ./config/clickstack-proxy/nginx.conf:/etc/nginx/conf.d/clickstack.conf:ro
  183. depends_on:
  184. - clickhouse
  185. - clickstack
  186. networks:
  187. - main_ai_network
  188. # Hosti metrikad (node-exporter) — Prometheus endpoint :9100
  189. node-exporter:
  190. image: prom/node-exporter:latest
  191. container_name: node-exporter
  192. restart: unless-stopped
  193. mem_limit: 128m
  194. command:
  195. - "--path.rootfs=/host"
  196. - "--path.procfs=/host/proc"
  197. - "--path.sysfs=/host/sys"
  198. volumes:
  199. - /proc:/host/proc:ro
  200. - /sys:/host/sys:ro
  201. - /:/host:ro,rslave
  202. networks:
  203. - main_ai_network
  204. # Konteinerite metrikad (cadvisor) — Prometheus endpoint :8080
  205. cadvisor:
  206. image: gcr.io/cadvisor/cadvisor:latest
  207. container_name: cadvisor
  208. restart: unless-stopped
  209. mem_limit: 256m
  210. privileged: true
  211. command:
  212. - "--docker_only=true"
  213. - "--disable_metrics=advtcp,cpu_topology,cpuset,hugetlb,memory_numa,process,referenced_memory,resctrl,sched,tcp,udp,percpu"
  214. devices:
  215. - /dev/kmsg
  216. volumes:
  217. - /:/rootfs:ro
  218. - /var/run:/var/run:ro
  219. - /sys:/sys:ro
  220. - /var/lib/docker/:/var/lib/docker:ro
  221. - /dev/disk/:/dev/disk:ro
  222. networks:
  223. - main_ai_network
  224. # ClickStack ametlik OTel-collector (OpAMP -> clickstack app). Base config app'ist (skeem/rollupid);
  225. # custom.config.yaml lisab hosti-meetrikad (node/cadvisor/llamacpp) + konteinerilogid.
  226. otel-collector:
  227. image: docker.clickhouse.com/clickhouse/clickstack-otel-collector:2
  228. container_name: otel-collector
  229. restart: unless-stopped
  230. mem_limit: 512m
  231. user: "0:0" # root: vaja lugeda /var/lib/docker/containers/*-json.log (710 root:root)
  232. environment:
  233. - TZ=Europe/Tallinn
  234. - CLICKHOUSE_ENDPOINT=tcp://clickhouse:9000?dial_timeout=10s
  235. - CLICKHOUSE_USER=default
  236. - CLICKHOUSE_PASSWORD=dev_clickhouse_2026
  237. - HYPERDX_OTEL_EXPORTER_CLICKHOUSE_DATABASE=default
  238. - OPAMP_SERVER_URL=http://clickstack:4320
  239. - CUSTOM_OTELCOL_CONFIG_FILE=/etc/otelcol-contrib/custom.config.yaml
  240. extra_hosts:
  241. - "host.docker.internal:host-gateway"
  242. volumes:
  243. - ./config/otel-collector/custom.config.yaml:/etc/otelcol-contrib/custom.config.yaml:ro
  244. - /var/lib/docker/containers:/var/lib/docker/containers:ro
  245. ports:
  246. - "127.0.0.1:4317:4317"
  247. - "100.87.1.24:4317:4317"
  248. - "127.0.0.1:4318:4318"
  249. - "100.87.1.24:4318:4318"
  250. depends_on:
  251. - clickstack
  252. - clickhouse
  253. - node-exporter
  254. - cadvisor
  255. networks:
  256. - main_ai_network
  257. # HyperDX alert-webhook → Telegram relay (generic webhook vastuvõtja)
  258. alert-relay:
  259. image: python:3.12-slim
  260. container_name: alert-relay
  261. restart: unless-stopped
  262. mem_limit: 64m
  263. command: ["python", "/app/alert_relay.py"]
  264. environment:
  265. - TZ=Europe/Tallinn
  266. - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
  267. - TELEGRAM_CHAT_ID=5036685258
  268. volumes:
  269. - ./config/alert-relay/alert_relay.py:/app/alert_relay.py:ro
  270. networks:
  271. - main_ai_network
  272. # Rate-limiter HyperDX OTLP ingest'ile (otel.odamus.com). Edge Caddy -> see -> otel-collector:4318.
  273. # nginx limit_req (Caddy standardbuildis rate_limit plugin't pole).
  274. otel-ratelimit:
  275. image: nginx:alpine
  276. container_name: otel-ratelimit
  277. restart: unless-stopped
  278. mem_limit: 32m
  279. environment:
  280. - TZ=Europe/Tallinn
  281. volumes:
  282. - ./config/otel-ratelimit/nginx.conf:/etc/nginx/nginx.conf:ro
  283. ports:
  284. - "100.87.1.24:4319:4319"
  285. depends_on:
  286. - otel-collector
  287. networks:
  288. - main_ai_network
  289. networks:
  290. main_ai_network:
  291. external: true
  292. name: main_ai_network
  293. prod_net:
  294. external: true
  295. name: prod_net