version: "3.4" services: # Da brain agent-brain: build: context: ./brain dockerfile: Dockerfile args: RUNNER: ${RUNNER} # Get it from Makefile container_name: agent-brain restart: unless-stopped env_file: .env ports: - "8000:8000" volumes: # Persistent data volumes (outside container /app) - agent-memory:/data/memory - agent-logs:/data/logs # Development: mount code for hot reload (comment out in production) # - ./brain:/app environment: # LLM Configuration LLM_PROVIDER: ${LLM_PROVIDER:-deepseek} DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-} # Memory storage MEMORY_STORAGE_DIR: /data/memory # External services TMDB_API_KEY: ${TMDB_API_KEY:-} QBITTORRENT_URL: ${QBITTORRENT_URL:-} QBITTORRENT_USERNAME: ${QBITTORRENT_USERNAME:-} QBITTORRENT_PASSWORD: ${QBITTORRENT_PASSWORD:-} networks: - agent-network # Da face (LibreChat) librechat: image: ghcr.io/danny-avila/librechat-dev:latest container_name: librechat-frontend restart: unless-stopped ports: - "3080:3080" depends_on: - mongodb - meilisearch - rag_api - agent-brain env_file: .env environment: # MongoDB connection (no auth, matching LibreChat default) MONGO_URI: mongodb://mongodb:27017/LibreChat # App configuration HOST: 0.0.0.0 PORT: 3080 # Security JWT_SECRET: ${JWT_SECRET:-your-super-secret-jwt-key-change-this-in-production} JWT_REFRESH_SECRET: ${JWT_REFRESH_SECRET:-your-super-secret-refresh-key-change-this-too} CREDS_KEY: ${CREDS_KEY:-your-32-character-secret-key-here} CREDS_IV: ${CREDS_IV:-your-16-character-iv-here} # Session SESSION_EXPIRY: ${SESSION_EXPIRY:-1000 * 60 * 15} REFRESH_TOKEN_EXPIRY: ${REFRESH_TOKEN_EXPIRY:-1000 * 60 * 60 * 24 * 7} # Domain DOMAIN_CLIENT: ${DOMAIN_CLIENT:-http://localhost:3080} DOMAIN_SERVER: ${DOMAIN_SERVER:-http://localhost:3080} # Meilisearch MEILI_HOST: http://meilisearch:7700 MEILI_MASTER_KEY: ${MEILI_MASTER_KEY:-DrhYf7zENyR6AlUCKmnz0eYASOQdl6zxH7s7MKFSfFU} # RAG API RAG_API_URL: http://rag_api:8000 # Endpoints ENDPOINTS: custom # Custom endpoint pointing to agent-brain CUSTOM_API_KEY: ${AGENT_BRAIN_API_KEY:-agent-brain-secret-key} # Debug (optional) DEBUG_LOGGING: ${DEBUG_LOGGING:-false} DEBUG_CONSOLE: ${DEBUG_CONSOLE:-false} volumes: - ./librechat/librechat.yaml:/app/librechat.yaml:ro - librechat-images:/app/client/public/images - librechat-logs:/app/api/logs networks: - agent-network # MongoDB for LibreChat mongodb: image: mongo:latest container_name: librechat-mongodb restart: unless-stopped volumes: - mongodb-data:/data/db command: mongod --noauth ports: - "27017:27017" networks: - agent-network # Meilisearch - Search engine for LibreChat #TODO: Follow currently used version on librechat's github meilisearch: image: getmeili/meilisearch:v1.12.3 container_name: librechat-meilisearch restart: unless-stopped volumes: - meilisearch-data:/meili_data environment: MEILI_HOST: http://meilisearch:7700 MEILI_HTTP_ADDR: meilisearch:7700 MEILI_MASTER_KEY: ${MEILI_MASTER_KEY:-DrhYf7zENyR6AlUCKmnz0eYASOQdl6zxH7s7MKFSfFU} ports: - "7700:7700" networks: - agent-network # PostgreSQL with pgvector for RAG API pgvector: image: ankane/pgvector:latest container_name: librechat-pgvector restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-librechat_rag} POSTGRES_USER: ${POSTGRES_USER:-postgres} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} volumes: - pgvector-data:/var/lib/postgresql/data ports: - "5432:5432" networks: - agent-network # RAG API - Vector database for LibreChat rag_api: image: ghcr.io/danny-avila/librechat-rag-api-dev-lite:latest container_name: librechat-rag-api restart: unless-stopped depends_on: - pgvector environment: PORT: 8000 HOST: 0.0.0.0 # PostgreSQL connection (multiple variable names for compatibility) DB_HOST: pgvector DB_PORT: 5432 DB_NAME: ${POSTGRES_DB:-librechat_rag} DB_USER: ${POSTGRES_USER:-postgres} DB_PASSWORD: ${POSTGRES_PASSWORD:-postgres} POSTGRES_DB: ${POSTGRES_DB:-librechat_rag} POSTGRES_USER: ${POSTGRES_USER:-postgres} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} # RAG configuration COLLECTION_NAME: ${RAG_COLLECTION_NAME:-testcollection} EMBEDDINGS_PROVIDER: ${RAG_EMBEDDINGS_PROVIDER:-openai} EMBEDDINGS_MODEL: ${RAG_EMBEDDINGS_MODEL:-text-embedding-3-small} OPENAI_API_KEY: ${OPENAI_API_KEY:-} RAG_UPLOAD_DIR: /app/uploads volumes: - rag-uploads:/app/uploads ports: - "8001:8000" networks: - agent-network # Named volumes for persistent data volumes: # MongoDB data mongodb-data: driver: local # Meilisearch data meilisearch-data: driver: local # PostgreSQL pgvector data pgvector-data: driver: local # RAG API uploads rag-uploads: driver: local # LibreChat data librechat-images: driver: local librechat-logs: driver: local # Agent Brain data agent-memory: driver: local agent-logs: driver: local # Network for inter-service communication networks: agent-network: driver: bridge