services: frontend: build: context: ./frontend args: REACT_APP_API_BASE: ${REACT_APP_API_BASE:-http://localhost:8000} REACT_APP_BACKEND_URL: ${REACT_APP_BACKEND_URL:-http://localhost:5001} container_name: frontend ports: - 8080:8080 backend: build: ./backend container_name: backend volumes: - ./output:/home/node/app/output environment: - CORS_ORIGIN=http://localhost:8080 - LLM=${LLM:-ollamaService} - LLM_URL=${LLM_URL:-http://host.docker.internal:11434/api/generate} - MODEL_NAME=${MODEL_NAME:-gemma3:1b} - PORT=5001 - OPENAI_API_KEY=${OPENAI_API_KEY:-} ports: - 5001:5001 extra_hosts: - "host.docker.internal:host-gateway" postgres: image: postgres:16 container_name: postgres environment: POSTGRES_USER: appuser POSTGRES_PASSWORD: apppass POSTGRES_DB: app_db ports: - 5432:5432 volumes: - pgdata:/var/lib/postgresql/data - ./docker/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U appuser -d app_db"] interval: 3s timeout: 3s retries: 10 kanban_api: build: ./kanban_api container_name: kanban_api environment: CORS_ORIGIN: http://localhost:8080 DATABASE_URL: postgresql+psycopg2://appuser:apppass@postgres:5432/app_db AI_PROVIDER: ${AI_PROVIDER:-ollama} MODEL_NAME: ${MODEL_NAME:-gemma3:1b} # Local Ollama (used when AI_PROVIDER=ollama) OLLAMA_BASE_URL: ${OLLAMA_BASE_URL:-http://host.docker.internal:11434} # Ollama Cloud (used when AI_PROVIDER=ollama_cloud) OLLAMA_API_KEY: ${OLLAMA_API_KEY:-} OLLAMA_CLOUD_BASE_URL: ${OLLAMA_CLOUD_BASE_URL:-https://ollama.com/v1} # OpenAI-compatible (used when AI_PROVIDER=openai) OPENAI_BASE_URL: ${OPENAI_BASE_URL:-} OPENAI_API_KEY: ${OPENAI_API_KEY:-} ports: - 8000:8000 depends_on: postgres: condition: service_healthy extra_hosts: - "host.docker.internal:host-gateway" volumes: pgdata: