mirror of
https://github.com/furyhawk/agent_alpha.git
synced 2026-07-20 10:15:33 +00:00
186 lines
6.2 KiB
YAML
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:
|