# ────────────────────────────────────────────────────────────────── # Agent Alpha — Compose Stack # # Usage (Docker): # docker compose up -d # start everything # docker compose up -d --build # rebuild & start # docker compose down # stop & remove # # Usage (Podman): # podman compose up -d # start everything # podman compose up -d --build # rebuild & start # podman compose down # stop & remove # # The Makefile auto-detects the available runtime. Either works. # # Requires: # - Docker or Podman # - A llama.cpp server (or any OpenAI-compatible LLM — set LLM_BASE_URL) # ────────────────────────────────────────────────────────────────── services: # ── FastAPI Backend ───────────────────────────────────────────── backend: build: context: . dockerfile: backend/Dockerfile container_name: agent-alpha-backend ports: - "8000:8000" environment: # NOTE: URLs are hardcoded to container service names so that the # host .env file (with localhost URLs) does NOT override them. - DEBUG=${DEBUG:-false} - LLM_BASE_URL=${LLM_BASE_URL:-http://host.docker.internal:8011/v1} - LLM_MODEL=${LLM_MODEL:-llama} - DATABASE_URL=${DATABASE_URL:-postgresql+asyncpg://agent_alpha:agent_alpha@postgres:5432/agent_alpha} - VALKEY_URL=${VALKEY_URL:-redis://valkey:6379/0} # RAG / Milvus - MILVUS_URI=${MILVUS_URI:-http://milvus:19530} - MILVUS_TOKEN=${MILVUS_TOKEN:-} - MEDIA_DIR=${MEDIA_DIR:-/app/media} - MAX_UPLOAD_SIZE_MB=${MAX_UPLOAD_SIZE_MB:-50} # Embeddings — defaults to LLM_BASE_URL; set to a server that supports # the OpenAI-compatible embeddings endpoint (e.g. Ollama, OpenAI). - EMBEDDING_BASE_URL=${EMBEDDING_BASE_URL:-http://host.containers.internal:8011/v1} - EMBEDDING_API_KEY=${EMBEDDING_API_KEY:-} restart: unless-stopped depends_on: postgres: condition: service_healthy valkey: condition: service_healthy milvus: condition: service_started # Uncomment to use a local .env file instead of env vars: # env_file: # - .env # Podman: use host.containers.internal; Docker Desktop: host.docker.internal extra_hosts: - "host.docker.internal:host-gateway" - "host.containers.internal:host-gateway" # ── React Frontend (nginx) ────────────────────────────────────── frontend: build: context: frontend dockerfile: Dockerfile container_name: agent-alpha-frontend ports: - "5173:80" depends_on: - backend restart: unless-stopped # ── PostgreSQL ────────────────────────────────────────────────── postgres: image: docker.io/postgres:16-alpine container_name: agent-alpha-postgres ports: - "5432:5432" environment: POSTGRES_USER: agent_alpha POSTGRES_PASSWORD: agent_alpha POSTGRES_DB: agent_alpha volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U agent_alpha -d agent_alpha"] interval: 5s timeout: 5s retries: 10 restart: unless-stopped # ── Valkey (Redis-compatible) ────────────────────────────────── valkey: image: docker.io/valkey/valkey:8-alpine container_name: agent-alpha-valkey ports: - "6379:6379" volumes: - valkey_data:/data healthcheck: test: ["CMD", "valkey-cli", "ping"] interval: 5s timeout: 5s retries: 10 restart: unless-stopped # ── Milvus Vector Database (standalone — bundles etcd + MinIO) ── milvus: image: docker.io/milvusdb/milvus:v2.4.1 container_name: agent-alpha-milvus ports: - "19530:19530" environment: ETCD_ENDPOINTS: etcd:2379 MINIO_ADDRESS: minio:9000 MINIO_ACCESS_KEY: minioadmin MINIO_SECRET_KEY: minioadmin MINIO_BUCKET_NAME: agent-alpha # Data persistence tuning — flush segments to S3/MinIO every 3s dataCoord_segment_dmlogFileTimeout: "3" dataCoord_segment_flushInterval: "3" volumes: - milvus_data:/var/lib/milvus command: milvus run standalone depends_on: - etcd - minio restart: unless-stopped etcd: image: quay.io/coreos/etcd:v3.5.4 container_name: agent-alpha-etcd environment: ETCD_AUTO_COMPACTION_MODE: revision ETCD_AUTO_COMPACTION_RETENTION: "1000" ETCD_QUOTA_BACKEND_BYTES: "4294967296" ETCD_SNAPSHOT_COUNT: "50000" ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379" ETCD_ADVERTISE_CLIENT_URLS: "http://0.0.0.0:2379" ETCD_DATA_DIR: /etcd volumes: - etcd_data:/etcd restart: unless-stopped minio: image: docker.io/minio/minio:latest container_name: agent-alpha-minio ports: - "9000:9000" - "9001:9001" environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin volumes: - minio_data:/data command: server /data --console-address ":9001" restart: unless-stopped # ── Ollama (optional — uncomment to run the LLM locally) ──────── # ollama: # image: docker.io/ollama/ollama:latest # container_name: ollama # ports: # - "11434:11434" # volumes: # - ollama_data:/root/.ollama # restart: unless-stopped # deploy: # resources: # reservations: # devices: # - driver: nvidia # count: all # capabilities: [gpu] volumes: postgres_data: valkey_data: milvus_data: etcd_data: minio_data: # ollama_data: