Files
agent_alpha/docker-compose.yml

186 lines
6.2 KiB
YAML

# ──────────────────────────────────────────────────────────────────
# 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: