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.
This commit is contained in:
Jeremie Fraeys 2026-02-24 11:53:19 -05:00
parent cebcb6115f
commit bcc432a524
No known key found for this signature in database
4 changed files with 63 additions and 63 deletions

View file

@ -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

View file

@ -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:

View file

@ -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:

View file

@ -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