# Shoal local development / evaluation stack. # # Services: # minio S3-compatible object storage (durable source of truth) # minio-init one-shot bucket creation # api Shoal API server (query serving, writes, cache) # worker Shoal background worker (indexing, compaction) # app example semantic/hybrid search web app (port 8000) # # Usage, from the repository root: # docker compose -f deploy/docker/docker-compose.yml up --build # # Then: # API: http://localhost:8080 (API key: dev-root-key) # Example app: http://localhost:8000 # MinIO console: http://localhost:9001 (shoaladmin / shoalsecret) name: shoal services: minio: image: minio/minio:latest command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: shoaladmin MINIO_ROOT_PASSWORD: shoalsecret ports: - "9000:9000" - "9001:9001" volumes: - minio-data:/data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 5s timeout: 3s retries: 12 minio-init: image: minio/mc:latest depends_on: minio: condition: service_healthy entrypoint: > /bin/sh -c " mc alias set local http://minio:9000 shoaladmin shoalsecret && mc mb --ignore-existing local/shoal && echo 'bucket ready' " api: build: context: ../.. dockerfile: deploy/docker/Dockerfile image: shoal/shoal:dev depends_on: minio: condition: service_healthy minio-init: condition: service_completed_successfully environment: SHOAL_LISTEN_ADDR: 0.0.0.0:8080 SHOAL_STORAGE_BACKEND: s3 SHOAL_S3_ENDPOINT: http://minio:9000 SHOAL_S3_BUCKET: shoal SHOAL_S3_REGION: us-east-1 SHOAL_S3_FORCE_PATH_STYLE: "true" AWS_ACCESS_KEY_ID: shoaladmin AWS_SECRET_ACCESS_KEY: shoalsecret SHOAL_ROOT_API_KEY: dev-root-key SHOAL_CACHE_DIR: /var/cache/shoal SHOAL_CACHE_DISK_BYTES: "2147483648" SHOAL_CACHE_MEMORY_BYTES: "268435456" SHOAL_LOG: info ports: - "8080:8080" volumes: - api-cache:/var/cache/shoal healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/healthz"] interval: 5s timeout: 3s retries: 24 worker: image: shoal/shoal:dev entrypoint: ["shoal-worker"] depends_on: api: condition: service_healthy environment: SHOAL_STORAGE_BACKEND: s3 SHOAL_S3_ENDPOINT: http://minio:9000 SHOAL_S3_BUCKET: shoal SHOAL_S3_REGION: us-east-1 SHOAL_S3_FORCE_PATH_STYLE: "true" AWS_ACCESS_KEY_ID: shoaladmin AWS_SECRET_ACCESS_KEY: shoalsecret SHOAL_CACHE_DIR: /var/cache/shoal SHOAL_CACHE_DISK_BYTES: "2147483648" SHOAL_CACHE_MEMORY_BYTES: "268435456" SHOAL_LOG: info volumes: - worker-cache:/var/cache/shoal app: build: context: ../.. dockerfile: examples/compose-app/Dockerfile depends_on: api: condition: service_healthy environment: SHOAL_URL: http://api:8080 SHOAL_API_KEY: dev-root-key APP_LISTEN_PORT: "8000" ports: - "8000:8000" volumes: minio-data: api-cache: worker-cache: