Full-stack deployment using Docker Compose. This is the recommended approach.
- Docker 24+
- Docker Compose v2
- NVIDIA API key (create one)
By default the stack calls NVIDIA public NIMs hosted on build.nvidia.com.
Required:
export NVIDIA_API_KEY=<YOUR_KEY>Optional — override the model or point to self-hosted NIMs:
export NIM_LLM_MODEL_NAME=nvidia/nemotron-3-nano-30b-a3b
export NIM_LLM_BASE_URL=http://HOST:POST/v1
export NIM_EMBED_BASE_URL=http://HOST:PORT/v1docker network create acp-infra-network || truedocker compose -f docker-compose.infra.yml -f docker-compose.yml up --build -dcurl http://localhost/api/health
curl http://localhost/psp/health
curl http://localhost/apps-sdk/healthAgent services also expose /health, but in full Docker deployment they are internal-only (not published on localhost).
- Demo UI: http://localhost
- Phoenix traces: http://localhost:6006
- MinIO console: http://localhost:9001
docker compose -f docker-compose.infra.yml -f docker-compose.yml ps
docker compose -f docker-compose.infra.yml -f docker-compose.yml logs -f merchant
docker compose -f docker-compose.infra.yml -f docker-compose.yml logs -f nginxCheck from inside the merchant container:
docker compose -f docker-compose.infra.yml -f docker-compose.yml exec merchant \
python -c "import urllib.request as u; print('promotion', u.urlopen('http://promotion-agent:8002/health', timeout=5).status); print('post-purchase', u.urlopen('http://post-purchase-agent:8003/health', timeout=5).status); print('recommendation', u.urlopen('http://recommendation-agent:8004/health', timeout=5).status); print('search', u.urlopen('http://search-agent:8005/health', timeout=5).status)"# Stop app + infra containers
docker compose -f docker-compose.infra.yml -f docker-compose.yml down
# Stop and remove volumes (full reset)
docker compose -f docker-compose.infra.yml -f docker-compose.yml down -vdocker compose -f docker-compose.infra.yml -f docker-compose.yml build
docker compose -f docker-compose.infra.yml -f docker-compose.yml up -d