/ docker-compose.yml
docker-compose.yml
1 services: 2 # Qdrant vector database service (optional - only needed when using Qdrant) 3 qdrant: 4 image: qdrant/qdrant:v1.10.0 5 container_name: qdrant 6 ports: 7 - "6333:6333" # REST API 8 - "6334:6334" # gRPC API 9 volumes: 10 - qdrant_storage:/qdrant/storage 11 environment: 12 - QDRANT__SERVICE__GRPC_PORT=6334 13 restart: unless-stopped 14 15 # Service for ingesting documents 16 ingest: 17 build: . 18 image: rag-poc-v1 19 container_name: rag-ingest 20 volumes: 21 - vector_db:/app/vector_db 22 - ./data:/app/data 23 - ./config.yaml:/app/config.yaml:ro 24 - ./access_mapping.json:/app/access_mapping.json:ro 25 environment: 26 - PYTHONUNBUFFERED=1 27 command: python src/cli/ingest.py --help 28 # Uncomment when using GPU: 29 # deploy: 30 # resources: 31 # reservations: 32 # devices: 33 # - driver: nvidia 34 # count: all 35 # capabilities: [gpu] 36 37 # Service for querying documents 38 query: 39 build: . 40 image: rag-poc-v1 41 container_name: rag-query 42 volumes: 43 - vector_db:/app/vector_db 44 - ./config.yaml:/app/config.yaml:ro 45 - ./access_mapping.json:/app/access_mapping.json:ro 46 environment: 47 - PYTHONUNBUFFERED=1 48 command: python src/cli/query.py --help 49 50 # API Server - OpenAI-compatible endpoint 51 api: 52 build: . 53 image: rag-poc-v1 54 container_name: smpte-api-server 55 ports: 56 - "8000:8000" 57 volumes: 58 - vector_db:/app/vector_db 59 - ./config.yaml:/app/config.yaml:ro 60 - ./access_mapping.json:/app/access_mapping.json:ro 61 - ./user_mapping.json:/app/user_mapping.json:ro 62 environment: 63 - PYTHONUNBUFFERED=1 64 command: uvicorn src.api.server:app --host 0.0.0.0 --port 8000 --reload 65 healthcheck: 66 test: 67 [ 68 "CMD", 69 "python", 70 "-c", 71 "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')", 72 ] 73 interval: 30s 74 timeout: 10s 75 retries: 3 76 start_period: 40s 77 78 # OpenWebUI - Chat interface with Google OAuth 79 openwebui: 80 image: ghcr.io/open-webui/open-webui:main 81 container_name: openwebui 82 ports: 83 - "3000:8080" 84 environment: 85 - OPENAI_API_BASE_URL=http://api:8000/v1 86 - OPENAI_API_KEY=${OPENAI_API_KEY:-dummy} 87 # Forward user info headers to API for role-based access 88 - ENABLE_FORWARD_USER_INFO_HEADERS=true 89 # Google OAuth only (disable email/password login) 90 - ENABLE_LOGIN_FORM=false 91 - ENABLE_OAUTH_SIGNUP=true 92 - GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID} 93 - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET} 94 - OPENID_PROVIDER_URL=https://accounts.google.com/.well-known/openid-configuration 95 - WEBUI_URL=${CALLBACK_WEBUI_URL} 96 # Branding 97 - WEBUI_NAME=${WEBUI_NAME:-SMPTE Copilot} 98 - DEFAULT_LOCALE=${DEFAULT_LOCALE:-en} 99 # Model configuration - Pipe will be the primary model 100 - MODEL_FILTER_ENABLED=false 101 # Disable unused features 102 - ENABLE_IMAGE_GENERATION=false 103 - ENABLE_COMMUNITY_SHARING=false 104 # RAG settings (handled by our custom backend, disable built-in) 105 - ENABLE_RAG_WEB_SEARCH=false 106 - ENABLE_RAG_LOCAL_WEB_FETCH=false 107 volumes: 108 - openwebui-data:/app/backend/data 109 depends_on: 110 api: 111 condition: service_healthy 112 113 volumes: 114 vector_db: 115 qdrant_storage: 116 openwebui-data: