From 120fb1f33fdaad2d5b6b2794b90b50ac2473b905 Mon Sep 17 00:00:00 2001 From: DoDiODev Date: Mon, 28 Sep 2026 16:57:04 +0200 Subject: [PATCH] build(compose): make grafana port, root URL and datasource configurable Follow-up to #9090, same `${VAR:-default}` pattern. The grafana service in `docker-compose-dev-{mysql,postgresql}.yml` hard-codes its host port, its public root URL and the database it reads from, so running both stacks side by side, putting Grafana behind a different proxy URL, or pointing the dashboards at an existing database requires editing tracked files. - `GRAFANA_HOST_PORT` (default 3001 / 3002) for the published port. - `GRAFANA_ROOT_URL` for `GF_SERVER_ROOT_URL`. - `GRAFANA_DATABASE_{TYPE,HOST,PORT,NAME,USER,PASSWORD}` for the `DATABASE_*` variables read by `grafana/scripts/entrypoint.sh`. - The legacy `MYSQL_*` / `POSTGRES_*` variables are derived from the same values so dashboard images that predate the `DATABASE_*` entrypoint (e.g. an older tag pulled via `DEVLAKE_IMAGE_REGISTRY`) get a consistent datasource. The current entrypoint overwrites them from `DATABASE_*`, so they are inert there. - `env.example` documents the variables, commented out like `DEVLAKE_IMAGE_REGISTRY`, because the services read `.env` via `env_file`. With none of the variables set, `docker compose config` renders the same values as before; the only addition is the four legacy variables. Signed-off-by: DoDiODev --- docker-compose-dev-mysql.yml | 21 +++++++++++++-------- docker-compose-dev-postgresql.yml | 21 +++++++++++++-------- env.example | 14 ++++++++++++++ 3 files changed, 40 insertions(+), 16 deletions(-) diff --git a/docker-compose-dev-mysql.yml b/docker-compose-dev-mysql.yml index ea760937f9c..8f654b533b0 100644 --- a/docker-compose-dev-mysql.yml +++ b/docker-compose-dev-mysql.yml @@ -38,19 +38,24 @@ services: build: context: grafana/ ports: - - 3001:3000 + - ${GRAFANA_HOST_PORT:-3001}:3000 volumes: - grafana-storage:/var/lib/grafana - ./grafana/dashboards/mysql:/etc/grafana/dashboards:ro environment: - GF_SERVER_ROOT_URL: "http://localhost:4001/grafana" + GF_SERVER_ROOT_URL: "${GRAFANA_ROOT_URL:-http://localhost:4001/grafana}" GF_USERS_DEFAULT_THEME: "light" - DATABASE_TYPE: mysql - DATABASE_HOST: mysql - DATABASE_PORT: 3306 - DATABASE_NAME: lake - DATABASE_USER: merico - DATABASE_PASSWORD: merico + DATABASE_TYPE: "${GRAFANA_DATABASE_TYPE:-mysql}" + DATABASE_HOST: "${GRAFANA_DATABASE_HOST:-mysql}" + DATABASE_PORT: "${GRAFANA_DATABASE_PORT:-3306}" + DATABASE_NAME: "${GRAFANA_DATABASE_NAME:-lake}" + DATABASE_USER: "${GRAFANA_DATABASE_USER:-merico}" + DATABASE_PASSWORD: "${GRAFANA_DATABASE_PASSWORD:-merico}" + # Legacy vars for older dashboard images; kept in sync with generic vars above. + MYSQL_URL: "${GRAFANA_DATABASE_HOST:-mysql}:${GRAFANA_DATABASE_PORT:-3306}" + MYSQL_DATABASE: "${GRAFANA_DATABASE_NAME:-lake}" + MYSQL_USER: "${GRAFANA_DATABASE_USER:-merico}" + MYSQL_PASSWORD: "${GRAFANA_DATABASE_PASSWORD:-merico}" TZ: UTC restart: always depends_on: diff --git a/docker-compose-dev-postgresql.yml b/docker-compose-dev-postgresql.yml index 17af7a422c8..2a3826f2369 100644 --- a/docker-compose-dev-postgresql.yml +++ b/docker-compose-dev-postgresql.yml @@ -34,19 +34,24 @@ services: build: context: grafana/ ports: - - 3002:3000 + - ${GRAFANA_HOST_PORT:-3002}:3000 volumes: - grafana-storage:/var/lib/grafana - ./grafana/dashboards/postgresql:/etc/grafana/dashboards:ro environment: - GF_SERVER_ROOT_URL: "http://localhost:4000/grafana" + GF_SERVER_ROOT_URL: "${GRAFANA_ROOT_URL:-http://localhost:4000/grafana}" GF_USERS_DEFAULT_THEME: "light" - DATABASE_TYPE: postgresql - DATABASE_HOST: postgres - DATABASE_PORT: 5432 - DATABASE_NAME: lake - DATABASE_USER: merico - DATABASE_PASSWORD: merico + DATABASE_TYPE: "${GRAFANA_DATABASE_TYPE:-postgresql}" + DATABASE_HOST: "${GRAFANA_DATABASE_HOST:-postgres}" + DATABASE_PORT: "${GRAFANA_DATABASE_PORT:-5432}" + DATABASE_NAME: "${GRAFANA_DATABASE_NAME:-lake}" + DATABASE_USER: "${GRAFANA_DATABASE_USER:-merico}" + DATABASE_PASSWORD: "${GRAFANA_DATABASE_PASSWORD:-merico}" + # Legacy vars for older dashboard images; kept in sync with generic vars above. + POSTGRES_URL: "${GRAFANA_DATABASE_HOST:-postgres}:${GRAFANA_DATABASE_PORT:-5432}" + POSTGRES_DATABASE: "${GRAFANA_DATABASE_NAME:-lake}" + POSTGRES_USER: "${GRAFANA_DATABASE_USER:-merico}" + POSTGRES_PASSWORD: "${GRAFANA_DATABASE_PASSWORD:-merico}" TZ: UTC restart: always depends_on: diff --git a/env.example b/env.example index 292f127983c..cdb296821cb 100755 --- a/env.example +++ b/env.example @@ -27,6 +27,20 @@ # Uncomment and set it (e.g. docker.io) to pull directly from Docker Hub. # DEVLAKE_IMAGE_REGISTRY=devlake.docker.scarf.sh +# Grafana overrides for the docker-compose-dev-*.yml files. Same pattern as +# above: the defaults live in the compose files, keep these commented out +# unless you need them. The GRAFANA_DATABASE_* values point the dashboards at +# a different database than the bundled one. Values shown are the MySQL +# defaults (PostgreSQL: port 3002/4000, type postgresql, host postgres, 5432). +# GRAFANA_HOST_PORT=3001 +# GRAFANA_ROOT_URL=http://localhost:4001/grafana +# GRAFANA_DATABASE_TYPE=mysql +# GRAFANA_DATABASE_HOST=mysql +# GRAFANA_DATABASE_PORT=3306 +# GRAFANA_DATABASE_NAME=lake +# GRAFANA_DATABASE_USER=merico +# GRAFANA_DATABASE_PASSWORD=merico + # Lake plugin dir, absolute path or relative path PLUGIN_DIR=bin/plugins REMOTE_PLUGIN_DIR=python/plugins