Spaces:
Running
Running
| services: | |
| # ── Qdrant Vector Database ────────────────────────────────────────────────── | |
| qdrant: | |
| image: qdrant/qdrant:latest | |
| container_name: rag_qdrant | |
| restart: unless-stopped | |
| ports: | |
| - "6333:6333" # HTTP API | |
| - "6334:6334" # gRPC API | |
| volumes: | |
| - qdrant_data:/qdrant/storage | |
| healthcheck: | |
| test: ["CMD-SHELL", "bash -c 'echo > /dev/tcp/localhost/6333' 2>/dev/null && exit 0 || exit 1"] | |
| interval: 10s | |
| timeout: 5s | |
| retries: 10 | |
| start_period: 20s | |
| # ── PostgreSQL (optional – only used when USE_POSTGRES=true) ──────────────── | |
| postgres: | |
| image: postgres:16-alpine | |
| container_name: rag_postgres | |
| restart: unless-stopped | |
| environment: | |
| POSTGRES_USER: ${POSTGRES_USER:-postgres} | |
| POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-password} | |
| POSTGRES_DB: ${POSTGRES_DB:-legal_rag} | |
| ports: | |
| - "5432:5432" | |
| volumes: | |
| - postgres_data:/var/lib/postgresql/data | |
| healthcheck: | |
| test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres}"] | |
| interval: 10s | |
| timeout: 5s | |
| retries: 5 | |
| # ── FastAPI Backend ───────────────────────────────────────────────────────── | |
| backend: | |
| build: | |
| context: . # project root — gives access to requirements.txt | |
| dockerfile: backend/Dockerfile | |
| container_name: rag_backend | |
| restart: unless-stopped | |
| env_file: | |
| - .env | |
| environment: | |
| # Override DB host to point to the postgres container | |
| POSTGRES_SERVER: postgres | |
| # Point Qdrant client to the qdrant container over HTTP | |
| QDRANT_URL: http://qdrant:6333 | |
| ports: | |
| - "8001:8001" | |
| volumes: | |
| # Persist SQLite DB and uploaded documents | |
| - backend_data:/app/app/data | |
| depends_on: | |
| qdrant: | |
| condition: service_started | |
| postgres: | |
| condition: service_healthy | |
| healthcheck: | |
| test: ["CMD", "curl", "-f", "http://localhost:8001/docs"] | |
| interval: 20s | |
| timeout: 15s | |
| retries: 15 | |
| start_period: 300s # InLegalBERT + BGE reranker can take 3-5 min to load | |
| # ── React Frontend (Nginx) ────────────────────────────────────────────────── | |
| frontend: | |
| build: | |
| context: ./frontend-react | |
| dockerfile: Dockerfile | |
| container_name: rag_frontend | |
| restart: unless-stopped | |
| ports: | |
| - "8080:80" | |
| depends_on: | |
| - backend | |
| volumes: | |
| qdrant_data: | |
| postgres_data: | |
| backend_data: | |