From bcc432a5243e3f9cb7411ba43f80b3151084d4dd Mon Sep 17 00:00:00 2001 From: Jeremie Fraeys Date: Tue, 24 Feb 2026 11:53:19 -0500 Subject: [PATCH] fix(deployments): use relative paths instead of FETCHML_REPO_ROOT with wrong fallback Replace all .. with proper relative paths: - Build context: Use '.' (current directory = project root when using --project-directory) - Volume mounts: Use './data/...' instead of '../data/...' - Config mounts: Use './configs/...' instead of '../configs/...' The '..' fallback was incorrect - when --project-directory is set to repo root, '..' would point to parent of repo instead of repo itself. Using '.' or './path' correctly resolves relative to project root. Environment variables for data directories (SMOKE_TEST_DATA_DIR, PROD_DATA_DIR, HOMELAB_DATA_DIR, LOCAL_DATA_DIR) are preserved for runtime customization. --- deployments/docker-compose.dev.yml | 38 +++++++++--------- deployments/docker-compose.homelab-secure.yml | 40 +++++++++---------- deployments/docker-compose.prod.smoke.yml | 22 +++++----- deployments/docker-compose.prod.yml | 26 ++++++------ 4 files changed, 63 insertions(+), 63 deletions(-) diff --git a/deployments/docker-compose.dev.yml b/deployments/docker-compose.dev.yml index 5f10a33..70b82d3 100644 --- a/deployments/docker-compose.dev.yml +++ b/deployments/docker-compose.dev.yml @@ -10,9 +10,9 @@ services: - "8080:80" - "8443:443" volumes: - - ${FETCHML_REPO_ROOT:-..}/deployments/Caddyfile.dev:/etc/caddy/Caddyfile:ro - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/dev}/caddy/data:/data - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/dev}/caddy/config:/config + - ./deployments/Caddyfile.dev:/etc/caddy/Caddyfile:ro + - ${SMOKE_TEST_DATA_DIR:-./data/dev}/caddy/data:/data + - ${SMOKE_TEST_DATA_DIR:-./data/dev}/caddy/config:/config depends_on: api-server: condition: service_healthy @@ -33,7 +33,7 @@ services: retries: 3 api-server: build: - context: ${FETCHML_REPO_ROOT:-..} + context: . dockerfile: build/docker/simple.Dockerfile container_name: ml-experiments-api user: "0:0" @@ -42,12 +42,12 @@ services: expose: - "9101" # API and health endpoints (internal; external access via Caddy) volumes: - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/dev}/logs:/logs - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/dev}/experiments:/data/experiments - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/dev}/active:/data/active - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/dev}/workspaces:/data/active/workspaces:delegated - - ${FETCHML_REPO_ROOT:-..}/configs/api/dev.yaml:/app/configs/api/dev.yaml - - ${FETCHML_REPO_ROOT:-..}/ssl:/app/ssl + - ${SMOKE_TEST_DATA_DIR:-./data/dev}/logs:/logs + - ${SMOKE_TEST_DATA_DIR:-./data/dev}/experiments:/data/experiments + - ${SMOKE_TEST_DATA_DIR:-./data/dev}/active:/data/active + - ${SMOKE_TEST_DATA_DIR:-./data/dev}/workspaces:/data/active/workspaces:delegated + - ./configs/api/dev.yaml:/app/configs/api/dev.yaml + - ./ssl:/app/ssl depends_on: - redis restart: unless-stopped @@ -71,7 +71,7 @@ services: - "9000:9000" - "9001:9001" volumes: - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/dev}/minio:/data + - ${SMOKE_TEST_DATA_DIR:-./data/dev}/minio:/data environment: - MINIO_ROOT_USER=minioadmin - MINIO_ROOT_PASSWORD=minioadmin123 @@ -126,18 +126,18 @@ services: restart: "no" worker: build: - context: ${FETCHML_REPO_ROOT:-..} + context: . dockerfile: build/docker/simple.Dockerfile container_name: ml-experiments-worker user: "0:0" ports: - "8888:8888" volumes: - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/dev}/logs:/logs - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/dev}/active:/data/active - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/dev}/experiments:/data/experiments - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/dev}/workspaces:/data/active/workspaces:delegated - - ${FETCHML_REPO_ROOT:-..}/configs/workers/docker-dev.yaml:/app/configs/worker.yaml + - ${SMOKE_TEST_DATA_DIR:-./data/dev}/logs:/logs + - ${SMOKE_TEST_DATA_DIR:-./data/dev}/active:/data/active + - ${SMOKE_TEST_DATA_DIR:-./data/dev}/experiments:/data/experiments + - ${SMOKE_TEST_DATA_DIR:-./data/dev}/workspaces:/data/active/workspaces:delegated + - ./configs/workers/docker-dev.yaml:/app/configs/worker.yaml - /sys/fs/cgroup:/sys/fs/cgroup:rw depends_on: redis: @@ -209,8 +209,8 @@ services: image: grafana/promtail:latest container_name: ml-experiments-promtail volumes: - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/monitoring}/promtail-config.yml:/etc/promtail/config.yml - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/dev}/logs:/var/log/app + - ${SMOKE_TEST_DATA_DIR:-./monitoring}/promtail-config.yml:/etc/promtail/config.yml + - ${SMOKE_TEST_DATA_DIR:-./data/dev}/logs:/var/log/app - /var/lib/docker/containers:/var/lib/docker/containers:ro - /var/run/docker.sock:/var/run/docker.sock command: -config.file=/etc/promtail/config.yml diff --git a/deployments/docker-compose.homelab-secure.yml b/deployments/docker-compose.homelab-secure.yml index 1d6cc08..ab72f8b 100644 --- a/deployments/docker-compose.homelab-secure.yml +++ b/deployments/docker-compose.homelab-secure.yml @@ -4,18 +4,18 @@ services: api-server: build: - context: ${FETCHML_REPO_ROOT:-..} - dockerfile: ${FETCHML_REPO_ROOT:-..}/build/docker/simple.Dockerfile + context: . + dockerfile: ./build/docker/simple.Dockerfile container_name: ml-experiments-api ports: - "9101:9101" - "9100:9100" # Prometheus metrics endpoint volumes: - - ${HOMELAB_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/homelab}/experiments:/data/experiments - - ${HOMELAB_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/homelab}/active:/data/active - - ${HOMELAB_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/homelab}/logs:/logs - - ${FETCHML_REPO_ROOT:-..}/ssl:/app/ssl:ro - - ${FETCHML_REPO_ROOT:-..}/configs/api/homelab-secure.yaml:/app/configs/api/prod.yaml:ro + - ${HOMELAB_DATA_DIR:-./data/homelab}/experiments:/data/experiments + - ${HOMELAB_DATA_DIR:-./data/homelab}/active:/data/active + - ${HOMELAB_DATA_DIR:-./data/homelab}/logs:/logs + - ./ssl:/app/ssl:ro + - ./configs/api/homelab-secure.yaml:/app/configs/api/prod.yaml:ro - ${FETCHML_REPO_ROOT:-..}/.env.secure:/app/.env.secure:ro depends_on: redis: @@ -47,7 +47,7 @@ services: - "9000:9000" - "9001:9001" volumes: - - ${HOMELAB_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/homelab}/minio:/data + - ${HOMELAB_DATA_DIR:-./data/homelab}/minio:/data environment: - MINIO_ROOT_USER=${MINIO_ROOT_USER:-minioadmin} - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD:-minioadmin123} @@ -80,14 +80,14 @@ services: worker: build: - context: ${FETCHML_REPO_ROOT:-..} - dockerfile: ${FETCHML_REPO_ROOT:-..}/build/docker/simple.Dockerfile + context: . + dockerfile: ./build/docker/simple.Dockerfile container_name: ml-experiments-worker volumes: - - ${HOMELAB_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/homelab}/experiments:/app/data/experiments - - ${HOMELAB_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/homelab}/active:/data/active - - ${HOMELAB_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/homelab}/logs:/logs - - ${FETCHML_REPO_ROOT:-..}/configs/workers/homelab-secure.yaml:/app/configs/worker.yaml + - ${HOMELAB_DATA_DIR:-./data/homelab}/experiments:/app/data/experiments + - ${HOMELAB_DATA_DIR:-./data/homelab}/active:/data/active + - ${HOMELAB_DATA_DIR:-./data/homelab}/logs:/logs + - ./configs/workers/homelab-secure.yaml:/app/configs/worker.yaml depends_on: redis: condition: service_healthy @@ -114,10 +114,10 @@ services: - "80:80" - "443:443" volumes: - - ${FETCHML_REPO_ROOT:-..}/deployments/Caddyfile.homelab-secure:/etc/caddy/Caddyfile:ro - - ${FETCHML_REPO_ROOT:-..}/ssl:/etc/caddy/ssl:ro - - ${HOMELAB_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/homelab}/caddy/data:/data - - ${HOMELAB_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/homelab}/caddy/config:/config + - ./deployments/Caddyfile.homelab-secure:/etc/caddy/Caddyfile:ro + - ./ssl:/etc/caddy/ssl:ro + - ${HOMELAB_DATA_DIR:-./data/homelab}/caddy/data:/data + - ${HOMELAB_DATA_DIR:-./data/homelab}/caddy/config:/config environment: - FETCHML_DOMAIN=${FETCHML_DOMAIN:-ml.local} depends_on: @@ -134,8 +134,8 @@ services: ports: - "127.0.0.1:6379:6379" # Bind to localhost only volumes: - - ${HOMELAB_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/homelab}/redis:/data - - ${FETCHML_REPO_ROOT:-..}/redis/redis-secure.conf:/usr/local/etc/redis/redis.conf:ro + - ${HOMELAB_DATA_DIR:-./data/homelab}/redis:/data + - ./redis/redis-secure.conf:/usr/local/etc/redis/redis.conf:ro restart: unless-stopped command: redis-server /usr/local/etc/redis/redis.conf --requirepass ${REDIS_PASSWORD} healthcheck: diff --git a/deployments/docker-compose.prod.smoke.yml b/deployments/docker-compose.prod.smoke.yml index 4c0d4f6..db7a96c 100644 --- a/deployments/docker-compose.prod.smoke.yml +++ b/deployments/docker-compose.prod.smoke.yml @@ -7,9 +7,9 @@ services: ports: - "8080:80" volumes: - - ${FETCHML_REPO_ROOT:-..}/deployments/Caddyfile.prod.smoke:/etc/caddy/Caddyfile:ro - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/prod-smoke}/caddy/data:/data - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/prod-smoke}/caddy/config:/config + - ./deployments/Caddyfile.prod.smoke:/etc/caddy/Caddyfile:ro + - ${SMOKE_TEST_DATA_DIR:-./data/prod-smoke}/caddy/data:/data + - ${SMOKE_TEST_DATA_DIR:-./data/prod-smoke}/caddy/config:/config networks: - default depends_on: @@ -22,7 +22,7 @@ services: expose: - "6379" volumes: - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/prod-smoke}/redis:/data + - ${SMOKE_TEST_DATA_DIR:-./data/prod-smoke}/redis:/data command: redis-server --appendonly yes healthcheck: test: [ "CMD", "redis-cli", "ping" ] @@ -32,7 +32,7 @@ services: api-server: build: - context: ${FETCHML_REPO_ROOT:-..} + context: . dockerfile: build/docker/simple.Dockerfile user: "0:0" restart: unless-stopped @@ -42,10 +42,10 @@ services: redis: condition: service_healthy volumes: - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/prod-smoke}/experiments:/data/experiments - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/prod-smoke}/active:/data/active - - ${SMOKE_TEST_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/prod-smoke}/logs:/logs - - ${FETCHML_REPO_ROOT:-..}/configs/api/dev.yaml:/app/configs/api/dev.yaml:ro + - ${SMOKE_TEST_DATA_DIR:-./data/prod-smoke}/experiments:/data/experiments + - ${SMOKE_TEST_DATA_DIR:-./data/prod-smoke}/active:/data/active + - ${SMOKE_TEST_DATA_DIR:-./data/prod-smoke}/logs:/logs + - ./configs/api/dev.yaml:/app/configs/api/dev.yaml:ro command: ["/bin/sh", "-c", "mkdir -p /data/experiments /data/active/datasets /data/active/snapshots && exec /usr/local/bin/api-server -config /app/configs/api/dev.yaml"] environment: - LOG_LEVEL=info @@ -66,9 +66,9 @@ services: - USER_NAME=test - PASSWORD_ACCESS=false volumes: - - ${FETCHML_REPO_ROOT:-..}/deployments/test_keys:/tmp:ro + - ./deployments/test_keys:/tmp:ro - ${FETCHML_REPO_ROOT:-..}/bin/tui-linux:/usr/local/bin/tui:ro - - ${FETCHML_REPO_ROOT:-..}/deployments/tui-test-config.toml:/config/.ml/config.toml:ro + - ./deployments/tui-test-config.toml:/config/.ml/config.toml:ro ports: - "2222:2222" networks: diff --git a/deployments/docker-compose.prod.yml b/deployments/docker-compose.prod.yml index f4c96c8..7461766 100644 --- a/deployments/docker-compose.prod.yml +++ b/deployments/docker-compose.prod.yml @@ -7,7 +7,7 @@ services: expose: - "6379" volumes: - - ${PROD_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/prod}/redis:/data + - ${PROD_DATA_DIR:-./data/prod}/redis:/data restart: unless-stopped command: redis-server --appendonly yes healthcheck: @@ -18,17 +18,17 @@ services: api-server: build: - context: ${FETCHML_REPO_ROOT:-..} - dockerfile: ${FETCHML_REPO_ROOT:-..}/build/docker/secure-prod.Dockerfile + context: . + dockerfile: ./build/docker/secure-prod.Dockerfile container_name: ml-prod-api expose: - "9101" - "2222" volumes: - - ${PROD_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/prod}/experiments:/app/data/experiments - - ${PROD_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/prod}/active:/data/active - - ${PROD_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/prod}/logs:/logs - - ${FETCHML_REPO_ROOT:-..}/configs/api/multi-user.yaml:/app/configs/api/prod.yaml + - ${PROD_DATA_DIR:-./data/prod}/experiments:/app/data/experiments + - ${PROD_DATA_DIR:-./data/prod}/active:/data/active + - ${PROD_DATA_DIR:-./data/prod}/logs:/logs + - ./configs/api/multi-user.yaml:/app/configs/api/prod.yaml depends_on: redis: condition: service_healthy @@ -55,14 +55,14 @@ services: worker: build: - context: ${FETCHML_REPO_ROOT:-..} - dockerfile: ${FETCHML_REPO_ROOT:-..}/build/docker/simple.Dockerfile + context: . + dockerfile: ./build/docker/simple.Dockerfile container_name: ml-prod-worker volumes: - - ${PROD_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/prod}/experiments:/app/data/experiments - - ${PROD_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/prod}/active:/data/active - - ${PROD_DATA_DIR:-${FETCHML_REPO_ROOT:-..}/data/prod}/logs:/logs - - ${FETCHML_REPO_ROOT:-..}/configs/workers/docker-prod.yaml:/app/configs/worker.yaml + - ${PROD_DATA_DIR:-./data/prod}/experiments:/app/data/experiments + - ${PROD_DATA_DIR:-./data/prod}/active:/data/active + - ${PROD_DATA_DIR:-./data/prod}/logs:/logs + - ./configs/workers/docker-prod.yaml:/app/configs/worker.yaml depends_on: redis: condition: service_healthy