name: bcai-router services: bcai-router: image: bcai-router build: . expose: - "3000" env_file: - .env.local environment: DATABASE_URL: ${DATABASE_URL:?set DATABASE_URL in .env (see .env.example)} REDIS_URL: redis://redis:6379 # Ollama runs on the Docker host, not inside the bcai-router container. # host.docker.internal resolves to the host on Docker Desktop / Linux 20.10+. OLLAMA_BASE_URL: http://host.docker.internal:11434 extra_hosts: - "host.docker.internal:host-gateway" depends_on: postgres: condition: service_healthy redis: condition: service_healthy volumes: - bcai-router-data:/app/data - ./exam-images:/app/exam-images:ro healthcheck: test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:3000/api/health || exit 1"] interval: 10s timeout: 5s retries: 5 start_period: 40s caddy: image: caddy:2-alpine ports: - "3334:80" volumes: - ./caddy-docker.Caddyfile:/etc/caddy/Caddyfile:ro depends_on: bcai-router: condition: service_healthy restart: unless-stopped postgres: image: pgvector/pgvector:pg17 ports: - "5434:5432" environment: POSTGRES_USER: bcai POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD in .env (see .env.example)} POSTGRES_DB: bcairouter command: - "postgres" - "-c" - "shared_buffers=256MB" - "-c" - "work_mem=16MB" - "-c" - "effective_cache_size=2GB" - "-c" - "max_wal_size=2GB" - "-c" - "random_page_cost=1.1" - "-c" - "shared_preload_libraries=pg_stat_statements" volumes: - bcai-router-pg:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U bcai -d bcairouter"] interval: 5s timeout: 3s retries: 10 redis: image: valkey/valkey:8-alpine ports: - "6382:6379" command: - valkey-server - --maxmemory - 1gb - --maxmemory-policy - allkeys-lru - --save - "" - --appendonly - "no" - --tcp-backlog - "2048" - --timeout - "0" - --tcp-keepalive - "60" volumes: - bcai-router-redis:/data healthcheck: test: ["CMD", "valkey-cli", "ping"] interval: 5s timeout: 3s retries: 10 volumes: bcai-router-data: bcai-router-pg: bcai-router-redis: