services: # - CORE SERVICES - # --- .ENV INIT --- alfred-init: container_name: alfred-init build: context: . target: builder args: PYTHON_VERSION: ${PYTHON_VERSION} PYTHON_VERSION_SHORT: ${PYTHON_VERSION_SHORT} RUNNER: ${RUNNER} command: python scripts/bootstrap.py networks: - alfred-net # --- MAIN APPLICATION --- alfred: container_name: alfred-core build: context: . args: PYTHON_VERSION: ${PYTHON_VERSION} PYTHON_VERSION_SHORT: ${PYTHON_VERSION_SHORT} RUNNER: ${RUNNER} depends_on: alfred-init: condition: service_completed_successfully restart: unless-stopped env_file: - path: .env required: true volumes: - ./data:/data - ./logs:/logs # TODO: Hot reload (comment out in production) - ./alfred:/home/appuser/alfred command: > sh -c "python -u -m uvicorn alfred.app:app --host 0.0.0.0 --port 8000 2>&1 | tee -a /logs/alfred.log" networks: - alfred-net # --- FRONTEND LIBRECHAT --- librechat: container_name: alfred-librechat image: ghcr.io/danny-avila/librechat:${LIBRECHAT_VERSION} depends_on: alfred-init: condition: service_completed_successfully mongodb: condition: service_healthy restart: unless-stopped env_file: - path: .env required: true environment: # Remap value name - SEARCH=${MEILI_ENABLED} ports: - "${PORT}:${PORT}" volumes: - ./data/librechat/images:/app/client/public/images - ./data/librechat/uploads:/app/client/uploads - ./logs:/app/api/logs # Mount custom endpoint - ./librechat/manifests:/app/manifests:ro - ./librechat/librechat.yaml:/app/librechat.yaml:ro networks: - alfred-net # --- DATABASE #1 - APP STATE --- mongodb: container_name: alfred-mongodb image: mongo:latest restart: unless-stopped depends_on: alfred-init: condition: service_completed_successfully env_file: - path: .env required: true environment: # Remap value name - MONGO_INITDB_ROOT_USERNAME=${MONGO_USER} - MONGO_INITDB_ROOT_PASSWORD=${MONGO_PASSWORD} ports: - "${MONGO_PORT}:${MONGO_PORT}" volumes: - ./data/mongodb:/data/db - ./mongod.conf:/etc/mongod.conf:ro command: ["mongod", "--config", "/etc/mongod.conf"] healthcheck: test: mongosh --quiet -u "${MONGO_USER}" -p "${MONGO_PASSWORD}" --authenticationDatabase admin --eval "db.adminCommand('ping')" interval: 10s timeout: 5s retries: 5 networks: - alfred-net # --- OLLAMA - LOCAL LLM ENGINE --- ollama: image: ollama/ollama:latest container_name: alfred-ollama depends_on: alfred-init: condition: service_completed_successfully restart: unless-stopped env_file: - path: .env required: true volumes: - ./data/ollama:/root/.ollama networks: - alfred-net # - OPTIONAL SERVICES - # --- SEARCH ENGINE SUPER FAST (Optional) --- meilisearch: container_name: alfred-meilisearch image: getmeili/meilisearch:v1.12.3 depends_on: alfred-init: condition: service_completed_successfully restart: unless-stopped env_file: - path: .env required: true volumes: - ./data/meilisearch:/meili_data profiles: ["meili", "full"] networks: - alfred-net # --- RETRIEVAL AUGMENTED GENERATION SYSTEM (Optional) --- rag_api: container_name: alfred-rag image: ghcr.io/danny-avila/librechat-rag-api-dev-lite:${RAG_VERSION} depends_on: alfred-init: condition: service_completed_successfully vectordb: condition: service_healthy restart: unless-stopped env_file: - path: .env required: true ports: - "${RAG_API_PORT}:${RAG_API_PORT}" volumes: - ./data/rag/uploads:/app/uploads profiles: ["rag", "full"] networks: - alfred-net # --- DATABASE #2 - Vector RAG (Optional) --- vectordb: container_name: alfred-vectordb image: pgvector/pgvector:0.8.0-pg16-bookworm depends_on: alfred-init: condition: service_completed_successfully restart: unless-stopped env_file: - path: .env required: true ports: - "${POSTGRES_PORT}:${POSTGRES_PORT}" volumes: - ./data/vectordb:/var/lib/postgresql/data profiles: ["rag", "full"] healthcheck: test: [ "CMD-SHELL", "pg_isready -U $${POSTGRES_USER:-alfred} -d $${POSTGRES_DB_NAME:-alfred}" ] interval: 5s timeout: 5s retries: 5 networks: alfred-net: aliases: - db # --- QBITTORENT (Optional) --- qbittorrent: image: lscr.io/linuxserver/qbittorrent:latest container_name: alfred-qbittorrent depends_on: alfred-init: condition: service_completed_successfully restart: unless-stopped env_file: - path: .env required: true environment: - PUID=1000 - PGID=1000 - TZ=Europe/Paris - WEBUI_PORT=${QBITTORRENT_PORT} volumes: - ./data/qbittorrent/config:/config - ./data/qbittorrent/downloads:/downloads profiles: ["qbittorrent", "full"] ports: - "${QBITTORRENT_PORT}:${QBITTORRENT_PORT}" networks: - alfred-net networks: alfred-net: name: alfred-internal driver: bridge