48 lines
1.5 KiB
YAML
48 lines
1.5 KiB
YAML
# Local-only stack for the Doormile AI retrieval sidecar.
|
|
#
|
|
# This is DEV TOOLING. The production image is still the static nginx build in
|
|
# Dockerfile — nothing here is deployed, and the console works with this stack
|
|
# absent (the bot falls back to its deterministic matcher when REACT_APP_AI_URL
|
|
# is unset or unreachable).
|
|
#
|
|
# docker compose up -d start Chroma + the sidecar
|
|
# npm --prefix services/ai run seed build the collections
|
|
#
|
|
services:
|
|
chroma:
|
|
image: chromadb/chroma:latest
|
|
container_name: doormile-chroma
|
|
ports:
|
|
- '8000:8000'
|
|
volumes:
|
|
# Bind-mounted so embeddings survive a container rebuild. Gitignored.
|
|
- ./.chroma:/chroma/chroma
|
|
environment:
|
|
- IS_PERSISTENT=TRUE
|
|
- ANONYMIZED_TELEMETRY=FALSE
|
|
healthcheck:
|
|
test: ['CMD', 'curl', '-f', 'http://localhost:8000/api/v2/heartbeat']
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
ai-sidecar:
|
|
image: node:20
|
|
container_name: doormile-ai
|
|
working_dir: /app
|
|
command: sh -c "npm install --no-audit --no-fund && node index.js"
|
|
ports:
|
|
- '8787:8787'
|
|
volumes:
|
|
- ./services/ai:/app
|
|
# The MiniLM weights (~25MB) are downloaded once and cached here rather
|
|
# than re-fetched on every container start.
|
|
- ./.cache/transformers:/app/.cache
|
|
environment:
|
|
- CHROMA_URL=http://chroma:8000
|
|
- PORT=8787
|
|
- TRANSFORMERS_CACHE=/app/.cache
|
|
depends_on:
|
|
chroma:
|
|
condition: service_healthy
|