memory-os/docker/docker-compose.yml

73 lines
2.0 KiB
YAML

# Memory OS — Docker Compose
#
# Starts Qdrant (vector DB), Redis (job queue), and ARQ Worker (embedding pipeline).
# Copy .env.example to .env and fill in required values before running.
services:
redis:
image: redis:7-alpine
restart: unless-stopped
command: >
sh -c '
mkdir -p /usr/local/etc/redis &&
echo "requirepass $${REDIS_PASSWORD}" > /usr/local/etc/redis/redis.conf &&
echo "bind 0.0.0.0" >> /usr/local/etc/redis/redis.conf &&
echo "appendonly yes" >> /usr/local/etc/redis/redis.conf &&
echo "maxmemory 512mb" >> /usr/local/etc/redis/redis.conf &&
echo "maxmemory-policy allkeys-lru" >> /usr/local/etc/redis/redis.conf &&
redis-server /usr/local/etc/redis/redis.conf
'
environment:
REDIS_PASSWORD: ${REDIS_PASSWORD}
ports:
- "127.0.0.1:6379:6379"
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
interval: 5s
timeout: 3s
retries: 5
qdrant:
image: qdrant/qdrant:v1.17.1
restart: unless-stopped
ports:
- "127.0.0.1:6333:6333"
volumes:
- qdrant_data:/qdrant/storage
environment:
QDRANT__SERVICE__HTTP_PORT: "6333"
QDRANT__SERVICE__API_KEY: ${QDRANT_API_KEY:-}
worker:
build:
context: ./worker
dockerfile: Dockerfile
restart: unless-stopped
depends_on:
qdrant:
condition: service_started
redis:
condition: service_healthy
environment:
REDIS_HOST: redis
REDIS_PORT: "6379"
REDIS_PASSWORD: ${REDIS_PASSWORD}
QDRANT_HOST: qdrant
QDRANT_PORT: "6333"
OPENROUTER_API_KEY: ${OPENROUTER_API_KEY}
EMBEDDING_DIMS: "${EMBEDDING_DIMS:-4096}"
COLLECTION_NAME: "${COLLECTION_NAME:-knowledge_base}"
ARQ_JOB_TIMEOUT: "300"
ARQ_MAX_JOBS: "10"
ARQ_KEEP_RESULT: "3600"
LOG_LEVEL: ${LOG_LEVEL:-INFO}
volumes:
- ${WIKI_PATH:-./wiki}:/wiki:ro
- ${HERMES_HOME:-~/.hermes}:/hermes:rw
volumes:
redis_data:
qdrant_data: