services: postgres: image: pgvector/pgvector:pg15 # restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-courtrix} POSTGRES_USER: ${POSTGRES_USER:-courtrix} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-courtrix} TZ: ${TZ:-Africa/Cairo} ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-courtrix} -d ${POSTGRES_DB:-courtrix}"] interval: 10s timeout: 5s retries: 10 minio: image: minio/minio:RELEASE.2025-03-12T18-04-18Z command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: ${MINIO_ACCESS_KEY:-courtrixminio} MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY:-courtrixminiosecret} TZ: ${TZ:-Africa/Cairo} ports: - "9000:9000" - "9001:9001" volumes: - minio_data:/data minio-init: image: minio/mc:RELEASE.2025-03-12T17-29-24Z depends_on: minio: condition: service_started entrypoint: > /bin/sh -c " until mc alias set local http://minio:9000 ${MINIO_ACCESS_KEY:-courtrixminio} ${MINIO_SECRET_KEY:-courtrixminiosecret}; do echo 'Waiting for MinIO to accept connections...'; sleep 2; done && mc mb --ignore-existing local/${MINIO_BUCKET_NAME:-courtrix-case-files} && mc anonymous set private local/${MINIO_BUCKET_NAME:-courtrix-case-files} " web: image: hamzaelkotp/courtrix-web:latest build: context: . dockerfile: Dockerfile # restart: unless-stopped depends_on: postgres: condition: service_healthy minio: condition: service_started minio-init: condition: service_completed_successfully rag: condition: service_started environment: NODE_ENV: production TZ: ${TZ:-Africa/Cairo} DATABASE_URL: ${DOCKER_DATABASE_URL:-postgresql://courtrix:courtrix@postgres:5432/courtrix?schema=public} SESSION_COOKIE_NAME: ${SESSION_COOKIE_NAME:-courtrix_session} SESSION_TTL_DAYS: ${SESSION_TTL_DAYS:-30} MINIO_ENDPOINT: minio MINIO_PORT: 9000 MINIO_USE_SSL: "false" MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-courtrixminio} MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-courtrixminiosecret} MINIO_BUCKET_NAME: ${MINIO_BUCKET_NAME:-courtrix-case-files} RAG_SERVICE_URL: ${DOCKER_RAG_SERVICE_URL:-http://rag:8001} RAG_SERVICE_SECRET: ${RAG_SERVICE_SECRET:-courtrix-rag-secret} RAG_REQUEST_TIMEOUT_MS: ${RAG_REQUEST_TIMEOUT_MS:-120000} ports: - "3100:3000" rag: image: hamzaelkotp/courtrix-rag:latest build: context: ./rag-server dockerfile: Dockerfile depends_on: postgres: condition: service_healthy minio: condition: service_started minio-init: condition: service_completed_successfully environment: TZ: ${TZ:-Africa/Cairo} RAG_DATABASE_URL: ${DOCKER_RAG_DATABASE_URL:-postgresql://courtrix:courtrix@postgres:5432/courtrix} MINIO_ENDPOINT: minio MINIO_PORT: 9000 MINIO_USE_SSL: "false" MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-courtrixminio} MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-courtrixminiosecret} RAG_SERVICE_SECRET: ${RAG_SERVICE_SECRET:-courtrix-rag-secret} GEMINI_API_KEY: ${GEMINI_API_KEY:-} GEMINI_CHAT_MODEL: ${GEMINI_CHAT_MODEL:-gemini-2.5-flash} GEMINI_EMBEDDING_MODEL: ${GEMINI_EMBEDDING_MODEL:-gemini-embedding-001} GEMINI_EMBEDDING_DIMENSION: ${GEMINI_EMBEDDING_DIMENSION:-1536} OPENROUTER_API_KEY: ${OPENROUTER_API_KEY:-} XAI_API_KEY: ${XAI_API_KEY:-} RAG_TOP_K: ${RAG_TOP_K:-5} RAG_CHUNK_SIZE: ${RAG_CHUNK_SIZE:-1200} RAG_CHUNK_OVERLAP: ${RAG_CHUNK_OVERLAP:-200} ports: - "8001:8001" volumes: postgres_data: minio_data: