From 2441c2dc29129df16170637a51e375b865790c95 Mon Sep 17 00:00:00 2001 From: Francwa Date: Sat, 27 Dec 2025 19:49:43 +0100 Subject: [PATCH] infra: rewrote docker-compose for proper integration of librechat --- docker-compose.yaml | 100 ++++++++++++++++++++ docker-compose.yml_bak | 202 ----------------------------------------- 2 files changed, 100 insertions(+), 202 deletions(-) create mode 100644 docker-compose.yaml delete mode 100644 docker-compose.yml_bak diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..3b3080f --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,100 @@ +services: + alfred: + container_name: alfred-core + build: + context: . + args: + PYTHON_VERSION: ${PYTHON_VERSION} + PYTHON_VERSION_SHORT: ${PYTHON_VERSION_SHORT} + RUNNER: ${RUNNER} + depends_on: + - librechat + restart: unless-stopped + env_file: + - .env + 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:-} + volumes: + - ./data/memory:/data/memory + - ./logs:/data/logs + # TODO: Development: mount code for hot reload (comment out in production) + # - ./alfred:/app/alfred + + librechat: + container_name: alfred-librechat + image: ghcr.io/danny-avila/librechat:${LIBRECHAT_VERSION} + depends_on: + - mongodb + - meilisearch + - rag_api + restart: unless-stopped + env_file: + - .env + environment: + - HOST=0.0.0.0 + - MONGO_URI=mongodb://mongodb:27017/LibreChat + - MEILI_HOST=http://meilisearch:7700 + - RAG_PORT=${RAG_PORT:-8000} + - RAG_API_URL=http://rag_api:${RAG_PORT:-8000} + ports: + - "${LIBRECHAT_PORT:-3080}:3080" + 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 + + mongodb: + container_name: alfred-mongodb + image: mongo:latest + restart: unless-stopped + volumes: + - ./data/mongo:/data/db + command: mongod --noauth + + meilisearch: + container_name: alfred-meilisearch + image: getmeili/meilisearch:v1.12.3 + restart: unless-stopped + environment: + - MEILI_NO_ANALYTICS=true + volumes: + - ./data/meili:/meili_data + #profiles: ["meili", "full"] + + rag_api: + container_name: alfred-rag + image: ghcr.io/danny-avila/librechat-rag-api-dev-lite:${RAG_VERSION} + restart: unless-stopped + environment: + - RAG_PORT=${RAG_PORT:-8000} + ports: + - "${RAG_PORT:-8000}:${RAG_PORT:-8000}" + #profiles: ["rag", "full"] + + vectordb: + container_name: alfred-vectordb + image: pgvector/pgvector:0.8.0-pg16-bookworm + restart: unless-stopped + environment: + - POSTGRES_DB=${VECTOR_DB_NAME:-vectordb} + - POSTGRES_USER=${VECTOR_DB_USER:-postgres} + - POSTGRES_PASSWORD=${VECTOR_DB_PASSWORD:-postgres} + ports: + - "${VECTOR_DB_PORT:-5432}:5432" + volumes: + - ./data/vectordb:/var/lib/postgresql/data + #profiles: ["rag", "full"] \ No newline at end of file diff --git a/docker-compose.yml_bak b/docker-compose.yml_bak deleted file mode 100644 index a9b7017..0000000 --- a/docker-compose.yml_bak +++ /dev/null @@ -1,202 +0,0 @@ -version: "3.4" - -services: - alfred: - build: - context: . - args: - RUNNER: ${RUNNER} # Get it from Makefile - container_name: alfred - 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) - # - ./alfred:/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 - - alfred - 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 - - # 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 - - # Alfred data - agent-memory: - driver: local - agent-logs: - driver: local - -# Network for inter-service communication -networks: - agent-network: - driver: bridge