Spaces:
Running
Running
| # docker-compose.yml — P2.6: local development with PostgreSQL | |
| # Usage: docker compose up -d | |
| # The backend will connect to Postgres instead of SQLite when DATABASE_URL is set. | |
| services: | |
| db: | |
| image: postgres:16-alpine | |
| restart: unless-stopped | |
| environment: | |
| POSTGRES_DB: ${POSTGRES_DB:-raglab} | |
| POSTGRES_USER: ${POSTGRES_USER:-raglab} | |
| POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD in your environment or .env file}" | |
| volumes: | |
| - pgdata:/var/lib/postgresql/data | |
| healthcheck: | |
| test: ["CMD-SHELL", "pg_isready -U raglab -d raglab"] | |
| interval: 10s | |
| timeout: 5s | |
| retries: 5 | |
| chroma: | |
| image: chromadb/chroma:latest | |
| restart: unless-stopped | |
| volumes: | |
| - chromadata:/chroma/chroma | |
| environment: | |
| IS_PERSISTENT: "TRUE" | |
| ANONYMIZED_TELEMETRY: "FALSE" | |
| ports: | |
| - "8001:8000" | |
| backend: | |
| build: | |
| context: . | |
| dockerfile: Dockerfile | |
| restart: unless-stopped | |
| depends_on: | |
| db: | |
| condition: service_healthy | |
| ports: | |
| - "7860:7860" | |
| environment: | |
| # Switch to Postgres for production | |
| DATABASE_URL: "postgresql+asyncpg://${POSTGRES_USER:-raglab}:${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD in your environment or .env file}@db:5432/${POSTGRES_DB:-raglab}" | |
| CHROMA_PERSIST_DIR: /data/chroma_db | |
| UPLOAD_DIR: /data/uploads | |
| PDF_IMAGE_INDEXING_ENABLED: ${PDF_IMAGE_INDEXING_ENABLED:-false} | |
| HF_IMAGE_EMBEDDING_MODEL: ${HF_IMAGE_EMBEDDING_MODEL:-openai/clip-vit-base-patch32} | |
| # Embedding / LLM keys — override in .env or CI secrets | |
| NVIDIA_API_KEY: ${NVIDIA_API_KEY:-} | |
| HUGGINGFACE_API_KEY: ${HUGGINGFACE_API_KEY:-} | |
| GEMINI_API_KEY: ${GEMINI_API_KEY:-} | |
| FRONTEND_URL: ${FRONTEND_URL:-http://localhost:5173} | |
| # Tuning knobs | |
| MAX_UPLOAD_SIZE_MB: ${MAX_UPLOAD_SIZE_MB:-50} | |
| MAX_EMBED_BATCH_SIZE: ${MAX_EMBED_BATCH_SIZE:-96} | |
| ODL_TIMEOUT_SECONDS: ${ODL_TIMEOUT_SECONDS:-120} | |
| PIPELINE_CACHE_TTL_SECONDS: ${PIPELINE_CACHE_TTL_SECONDS:-3600} | |
| WEB_CONCURRENCY: ${WEB_CONCURRENCY:-4} | |
| LOG_LEVEL: ${LOG_LEVEL:-info} | |
| LOG_FORMAT: json | |
| volumes: | |
| - chromadata:/data/chroma_db | |
| - uploads:/data/uploads | |
| volumes: | |
| pgdata: | |
| chromadata: | |
| uploads: | |