From 415222561b63e851daba9d5b701372805b621378 Mon Sep 17 00:00:00 2001 From: Nawaz Dhandala Date: Mon, 16 Feb 2026 14:34:26 +0000 Subject: [PATCH] feat: add health checks and common dependencies for services in Docker Compose files --- docker-compose.base.yml | 24 +++++++-- docker-compose.dev.yml | 106 +++++++++++++++++++++++++++++----------- docker-compose.yml | 65 +++++++++++++++++++----- 3 files changed, 151 insertions(+), 44 deletions(-) diff --git a/docker-compose.base.yml b/docker-compose.base.yml index b0a38e0bee..c032e280f0 100644 --- a/docker-compose.base.yml +++ b/docker-compose.base.yml @@ -167,8 +167,14 @@ services: networks: - oneuptime command: redis-server --requirepass "${REDIS_PASSWORD}" --save "" --appendonly no - environment: + environment: REDIS_PASSWORD: ${REDIS_PASSWORD} + healthcheck: + test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 10s logging: driver: "local" options: @@ -186,6 +192,12 @@ services: - oneuptime volumes: - clickhouse:/var/lib/clickhouse/ + healthcheck: + test: ["CMD-SHELL", "clickhouse-client --query 'SELECT 1'"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 15s logging: driver: "local" options: @@ -194,14 +206,20 @@ services: postgres: image: postgres:15 restart: always - environment: + environment: POSTGRES_USER: ${DATABASE_USERNAME} POSTGRES_PASSWORD: ${DATABASE_PASSWORD} POSTGRES_DB: ${DATABASE_NAME} networks: - oneuptime - volumes: + volumes: - postgres:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 15s logging: driver: "local" options: diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 472d9af77f..6255386ce5 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -1,27 +1,35 @@ +x-common-depends-on: &common-depends-on + postgres: + condition: service_healthy + redis: + condition: service_healthy + clickhouse: + condition: service_healthy + services: - + redis: - ports: + ports: - '6310:6379' extends: file: ./docker-compose.base.yml service: redis clickhouse: - ports: + ports: - '9034:9000' - '8189:8123' extends: file: ./docker-compose.base.yml service: clickhouse - volumes: + volumes: - ./Clickhouse/config.xml:/etc/clickhouse-server/config.xml postgres: - ports: + ports: - '5400:5432' extends: file: ./docker-compose.base.yml @@ -38,11 +46,13 @@ services: dockerfile: ./OTelCollector/Dockerfile accounts: - ports: + ports: - '${ACCOUNTS_PORT}:${ACCOUNTS_PORT}' extends: file: ./docker-compose.base.yml service: accounts + depends_on: + <<: *common-depends-on volumes: - ./Accounts:/usr/src/app:cached # Use node modules of the container and not host system. @@ -53,19 +63,21 @@ services: - /usr/src/Common/node_modules/ - + build: network: host context: . dockerfile: ./Accounts/Dockerfile - + dashboard: - ports: + ports: - '${DASHBOARD_PORT}:${DASHBOARD_PORT}' extends: file: ./docker-compose.base.yml service: dashboard + depends_on: + <<: *common-depends-on volumes: - ./Dashboard:/usr/src/app:cached # Use node modules of the container and not host system. @@ -76,20 +88,22 @@ services: - /usr/src/Common/node_modules/ - + build: network: host context: . dockerfile: ./Dashboard/Dockerfile - - + + admin-dashboard: - ports: + ports: - '${ADMIN_DASHBOARD_PORT}:${ADMIN_DASHBOARD_PORT}' extends: file: ./docker-compose.base.yml service: admin-dashboard + depends_on: + <<: *common-depends-on volumes: - ./AdminDashboard:/usr/src/app:cached # Use node modules of the container and not host system. @@ -100,7 +114,7 @@ services: - /usr/src/Common/node_modules/ - + build: network: host context: . @@ -108,11 +122,13 @@ services: status-page: - ports: + ports: - '${STATUS_PAGE_PORT}:${STATUS_PAGE_PORT}' extends: file: ./docker-compose.base.yml service: status-page + depends_on: + <<: *common-depends-on volumes: - ./StatusPage:/usr/src/app:cached # Use node modules of the container and not host system. @@ -123,13 +139,13 @@ services: - /usr/src/Common/node_modules/ - + build: network: host context: . dockerfile: ./StatusPage/Dockerfile - - + + test-server: volumes: - ./TestServer:/usr/src/app:cached @@ -140,10 +156,12 @@ services: - /usr/src/Common/node_modules/ - + extends: file: ./docker-compose.base.yml service: test-server + depends_on: + <<: *common-depends-on ports: - '9141:9229' # Debugging port. - '3800:3800' @@ -164,6 +182,8 @@ services: extends: file: ./docker-compose.base.yml service: home + depends_on: + <<: *common-depends-on ports: - '9212:9229' # Debugging port. build: @@ -182,6 +202,8 @@ services: extends: file: ./docker-compose.base.yml service: worker + depends_on: + <<: *common-depends-on ports: - '8734:9229' # Debugging port. build: @@ -201,6 +223,8 @@ services: extends: file: ./docker-compose.base.yml service: workflow + depends_on: + <<: *common-depends-on ports: - '8735:9229' # Debugging port. build: @@ -219,6 +243,8 @@ services: extends: file: ./docker-compose.base.yml service: api-reference + depends_on: + <<: *common-depends-on ports: - '8737:9229' # Debugging port. build: @@ -237,6 +263,8 @@ services: extends: file: ./docker-compose.base.yml service: docs + depends_on: + <<: *common-depends-on ports: - '8738:9229' # Debugging port. build: @@ -255,15 +283,17 @@ services: extends: file: ./docker-compose.base.yml service: app + depends_on: + <<: *common-depends-on ports: - '9232:9229' # Debugging port. build: network: host context: . dockerfile: ./App/Dockerfile - - probe-1: + + probe-1: volumes: - ./Probe:/usr/src/app:cached # Use node modules of the container and not host system. @@ -273,10 +303,12 @@ services: - /usr/src/Common/node_modules/ - + extends: file: ./docker-compose.base.yml service: probe-1 + depends_on: + <<: *common-depends-on build: network: host context: . @@ -296,6 +328,8 @@ services: extends: file: ./docker-compose.base.yml service: probe-2 + depends_on: + <<: *common-depends-on build: network: host context: . @@ -315,6 +349,8 @@ services: extends: file: ./docker-compose.base.yml service: ai-agent + depends_on: + <<: *common-depends-on build: network: host context: . @@ -330,7 +366,7 @@ services: - /usr/src/Common/node_modules/ - + ports: - '9974:9229' # Debugging port. extends: @@ -340,7 +376,7 @@ services: network: host context: . dockerfile: ./IsolatedVM/Dockerfile - + probe-ingest: volumes: - ./ProbeIngest:/usr/src/app:cached @@ -354,6 +390,8 @@ services: extends: file: ./docker-compose.base.yml service: probe-ingest + depends_on: + <<: *common-depends-on build: network: host context: . @@ -372,6 +410,8 @@ services: extends: file: ./docker-compose.base.yml service: server-monitor-ingest + depends_on: + <<: *common-depends-on build: network: host context: . @@ -390,6 +430,8 @@ services: extends: file: ./docker-compose.base.yml service: telemetry + depends_on: + <<: *common-depends-on build: network: host context: . @@ -408,6 +450,8 @@ services: extends: file: ./docker-compose.base.yml service: incoming-request-ingest + depends_on: + <<: *common-depends-on build: network: host context: . @@ -426,13 +470,15 @@ services: extends: file: ./docker-compose.base.yml service: mcp + depends_on: + <<: *common-depends-on build: network: host context: . dockerfile: ./MCP/Dockerfile # Fluentd. Required only for development. In production its the responsibility of the customer to run fluentd and pipe logs to OneUptime. - # We run this container just for development, to see if logs are piped. + # We run this container just for development, to see if logs are piped. fluentd: ports: @@ -450,7 +496,7 @@ services: context: ./Fluentd dockerfile: ./Dockerfile - fluent-bit: + fluent-bit: ports: - 24225:24224 - 24285:24284 @@ -474,6 +520,8 @@ services: extends: file: ./docker-compose.base.yml service: ingress + depends_on: + <<: *common-depends-on # e2e tests e2e: @@ -491,7 +539,7 @@ services: volumes: postgres: clickhouse: - + networks: - oneuptime: - driver: bridge \ No newline at end of file + oneuptime: + driver: bridge diff --git a/docker-compose.yml b/docker-compose.yml index c657319712..100513d7c5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,14 @@ # Images are pushed to both Docker Hub and Github Container Registry. If you're using Github Container Registry, you can change the image tag to use the Github Container Registry. # For example, if you want to use the image from Github Container Registry, you can change the image tag from oneuptime/dashboard:latest to ghcr.io/oneuptime/dashboard:latest +x-common-depends-on: &common-depends-on + postgres: + condition: service_healthy + redis: + condition: service_healthy + clickhouse: + condition: service_healthy + services: redis: @@ -20,111 +28,140 @@ services: file: ./docker-compose.base.yml service: postgres - + otel-collector: image: oneuptime/otel-collector:${APP_TAG} extends: file: ./docker-compose.base.yml service: otel-collector - + accounts: image: oneuptime/accounts:${APP_TAG} extends: file: ./docker-compose.base.yml service: accounts - + depends_on: + <<: *common-depends-on dashboard: image: oneuptime/dashboard:${APP_TAG} extends: file: ./docker-compose.base.yml service: dashboard - + depends_on: + <<: *common-depends-on + admin-dashboard: image: oneuptime/admin-dashboard:${APP_TAG} extends: file: ./docker-compose.base.yml service: admin-dashboard + depends_on: + <<: *common-depends-on status-page: image: oneuptime/status-page:${APP_TAG} extends: file: ./docker-compose.base.yml service: status-page - - + depends_on: + <<: *common-depends-on app: image: oneuptime/app:${APP_TAG} extends: file: ./docker-compose.base.yml service: app - + depends_on: + <<: *common-depends-on + worker: image: oneuptime/worker:${APP_TAG} extends: file: ./docker-compose.base.yml service: worker + depends_on: + <<: *common-depends-on docs: image: oneuptime/docs:${APP_TAG} extends: file: ./docker-compose.base.yml service: docs + depends_on: + <<: *common-depends-on api-reference: image: oneuptime/api-reference:${APP_TAG} extends: file: ./docker-compose.base.yml service: api-reference + depends_on: + <<: *common-depends-on workflow: image: oneuptime/workflow:${APP_TAG} extends: file: ./docker-compose.base.yml service: workflow + depends_on: + <<: *common-depends-on home: image: oneuptime/home:${APP_TAG} extends: file: ./docker-compose.base.yml service: home + depends_on: + <<: *common-depends-on - probe-1: + probe-1: image: oneuptime/probe:${APP_TAG} extends: file: ./docker-compose.base.yml service: probe-1 - + depends_on: + <<: *common-depends-on + probe-2: - image: oneuptime/probe:${APP_TAG} + image: oneuptime/probe:${APP_TAG} extends: file: ./docker-compose.base.yml service: probe-2 + depends_on: + <<: *common-depends-on probe-ingest: image: oneuptime/probe-ingest:${APP_TAG} extends: file: ./docker-compose.base.yml service: probe-ingest + depends_on: + <<: *common-depends-on server-monitor-ingest: image: oneuptime/server-monitor-ingest:${APP_TAG} extends: file: ./docker-compose.base.yml service: server-monitor-ingest + depends_on: + <<: *common-depends-on telemetry: image: oneuptime/telemetry:${APP_TAG} extends: file: ./docker-compose.base.yml service: telemetry - - incoming-request-ingest: + depends_on: + <<: *common-depends-on + + incoming-request-ingest: image: oneuptime/incoming-request-ingest:${APP_TAG} extends: file: ./docker-compose.base.yml service: incoming-request-ingest + depends_on: + <<: *common-depends-on isolated-vm: image: oneuptime/isolated-vm:${APP_TAG} @@ -137,12 +174,16 @@ services: extends: file: ./docker-compose.base.yml service: mcp + depends_on: + <<: *common-depends-on ingress: image: oneuptime/nginx:${APP_TAG} extends: file: ./docker-compose.base.yml service: ingress + depends_on: + <<: *common-depends-on volumes: postgres: