services: opensearch: image: langflowai/openrag-opensearch:${OPENRAG_VERSION:-latest} #build: #context: . #dockerfile: Dockerfile container_name: os depends_on: - openrag-backend environment: - discovery.type=single-node - OPENSEARCH_INITIAL_ADMIN_PASSWORD=${OPENSEARCH_PASSWORD} # Run security setup in background after OpenSearch starts command: > bash -c " # Ensure data directory has correct permissions sudo chown -R opensearch:opensearch /usr/share/opensearch/data || true # Start OpenSearch in background /usr/share/opensearch/opensearch-docker-entrypoint.sh opensearch & # Wait a bit for OpenSearch to start, then apply security config sleep 10 && /usr/share/opensearch/setup-security.sh & # Wait for background processes wait " ports: - "9200:9200" - "9600:9600" volumes: - ${OPENSEARCH_DATA_PATH:-./opensearch-data}:/usr/share/opensearch/data:U,z dashboards: image: opensearchproject/opensearch-dashboards:3.0.0 container_name: osdash depends_on: - opensearch environment: OPENSEARCH_HOSTS: '["https://${OPENSEARCH_HOST:-opensearch}:${OPENSEARCH_PORT:-9200}"]' OPENSEARCH_USERNAME: "${OPENSEARCH_USERNAME:-admin}" OPENSEARCH_PASSWORD: ${OPENSEARCH_PASSWORD} ports: - "5601:5601" openrag-backend: image: langflowai/openrag-backend:${OPENRAG_VERSION:-latest} build: context: . dockerfile: Dockerfile.backend container_name: openrag-backend depends_on: - langflow environment: - OPENSEARCH_HOST=${OPENSEARCH_HOST:-opensearch} - LANGFLOW_URL=http://langflow:7860 - LANGFLOW_PUBLIC_URL=${LANGFLOW_PUBLIC_URL} - LANGFLOW_AUTO_LOGIN=${LANGFLOW_AUTO_LOGIN} - LANGFLOW_SUPERUSER=${LANGFLOW_SUPERUSER} - LANGFLOW_SUPERUSER_PASSWORD=${LANGFLOW_SUPERUSER_PASSWORD} - LANGFLOW_CHAT_FLOW_ID=${LANGFLOW_CHAT_FLOW_ID} - LANGFLOW_INGEST_FLOW_ID=${LANGFLOW_INGEST_FLOW_ID} - LANGFLOW_URL_INGEST_FLOW_ID=${LANGFLOW_URL_INGEST_FLOW_ID} - DISABLE_INGEST_WITH_LANGFLOW=${DISABLE_INGEST_WITH_LANGFLOW:-false} - INGEST_SAMPLE_DATA=${INGEST_SAMPLE_DATA:-true} - NUDGES_FLOW_ID=${NUDGES_FLOW_ID} - OPENSEARCH_PORT=${OPENSEARCH_PORT:-9200} - OPENSEARCH_USERNAME=${OPENSEARCH_USERNAME:-admin} - OPENSEARCH_PASSWORD=${OPENSEARCH_PASSWORD} - OPENAI_API_KEY=${OPENAI_API_KEY} - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} - WATSONX_API_KEY=${WATSONX_API_KEY} - WATSONX_ENDPOINT=${WATSONX_ENDPOINT} - WATSONX_PROJECT_ID=${WATSONX_PROJECT_ID} - OLLAMA_ENDPOINT=${OLLAMA_ENDPOINT} - GOOGLE_OAUTH_CLIENT_ID=${GOOGLE_OAUTH_CLIENT_ID} - GOOGLE_OAUTH_CLIENT_SECRET=${GOOGLE_OAUTH_CLIENT_SECRET} - MICROSOFT_GRAPH_OAUTH_CLIENT_ID=${MICROSOFT_GRAPH_OAUTH_CLIENT_ID} - MICROSOFT_GRAPH_OAUTH_CLIENT_SECRET=${MICROSOFT_GRAPH_OAUTH_CLIENT_SECRET} - WEBHOOK_BASE_URL=${WEBHOOK_BASE_URL} - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} - OPENSEARCH_INDEX_NAME=${OPENSEARCH_INDEX_NAME:-documents} - LANGFLOW_KEY=${LANGFLOW_KEY} - LANGFLOW_KEY_RETRIES=${LANGFLOW_KEY_RETRIES:-15} - LANGFLOW_KEY_RETRY_DELAY=${LANGFLOW_KEY_RETRY_DELAY:-2.0} - LANGFLOW_VERSION=${LANGFLOW_VERSION} - LOG_FORMAT=${LOG_FORMAT} - SERVICE_NAME=${SERVICE_NAME} - SESSION_SECRET=${SESSION_SECRET} - LOG_LEVEL=${LOG_LEVEL:-INFO} - NO_COLOR=${NO_COLOR:-} - ACCESS_LOG=${ACCESS_LOG:-true} - LANGFLOW_TIMEOUT=${LANGFLOW_TIMEOUT:-2400} - LANGFLOW_CONNECT_TIMEOUT=${LANGFLOW_CONNECT_TIMEOUT:-30} - INGESTION_TIMEOUT=${INGESTION_TIMEOUT:-3600} - UPLOAD_BATCH_SIZE=${UPLOAD_BATCH_SIZE:-25} - MAX_WORKERS=${MAX_WORKERS:-4} volumes: - ${OPENRAG_DOCUMENTS_PATH:-./openrag-documents}:/app/openrag-documents:Z - ${OPENRAG_KEYS_PATH:-./keys}:/app/keys:U,z - ${OPENRAG_FLOWS_PATH:-./flows}:/app/flows:U,z - ${OPENRAG_CONFIG_PATH:-./config}:/app/config:Z - ${OPENRAG_DATA_PATH:-./data}:/app/data:Z openrag-frontend: image: langflowai/openrag-frontend:${OPENRAG_VERSION:-latest} build: context: . dockerfile: Dockerfile.frontend container_name: openrag-frontend depends_on: - openrag-backend environment: - OPENRAG_BACKEND_HOST=openrag-backend ports: - "${FRONTEND_PORT:-3000}:3000" langflow: volumes: - ${OPENRAG_FLOWS_PATH:-./flows}:/app/flows:U,z image: langflowai/openrag-langflow:${OPENRAG_VERSION:-latest} build: context: . dockerfile: Dockerfile.langflow container_name: langflow ports: - "${LANGFLOW_PORT:-7860}:7860" environment: - LANGFUSE_SECRET_KEY=${LANGFUSE_SECRET_KEY:-} - LANGFUSE_PUBLIC_KEY=${LANGFUSE_PUBLIC_KEY:-} - LANGFUSE_HOST=${LANGFUSE_HOST:-} - LANGFLOW_DEACTIVATE_TRACING - OPENAI_API_KEY=${OPENAI_API_KEY} - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} - WATSONX_API_KEY=${WATSONX_API_KEY} - WATSONX_URL=${WATSONX_URL:-${WATSONX_ENDPOINT}} - WATSONX_PROJECT_ID=${WATSONX_PROJECT_ID} - OLLAMA_BASE_URL=${OLLAMA_ENDPOINT} - LANGFLOW_LOAD_FLOWS_PATH=/app/flows - LANGFLOW_SECRET_KEY=${LANGFLOW_SECRET_KEY} - JWT=None - OWNER=None - OWNER_NAME=None - OWNER_EMAIL=None - CONNECTOR_TYPE=system - CONNECTOR_TYPE_URL=url - DOCUMENT_ID=None - SOURCE_URL=None - ALLOWED_USERS=[] - ALLOWED_GROUPS=[] - OPENRAG-QUERY-FILTER="{}" - OPENSEARCH_PASSWORD=${OPENSEARCH_PASSWORD} - OPENSEARCH_HOST=${OPENSEARCH_HOST:-opensearch} - OPENSEARCH_PORT=${OPENSEARCH_PORT:-9200} - OPENSEARCH_URL=https://${OPENSEARCH_HOST:-opensearch}:${OPENSEARCH_PORT:-9200} - OPENSEARCH_INDEX_NAME=${OPENSEARCH_INDEX_NAME:-documents} - DOCLING_SERVE_URL=${DOCLING_SERVE_URL:-http://host.docker.internal:5001} - FILENAME=None - MIMETYPE=None - FILESIZE=0 - SELECTED_EMBEDDING_MODEL=${SELECTED_EMBEDDING_MODEL:-text-embedding-3-small} - LANGFLOW_VARIABLES_TO_GET_FROM_ENVIRONMENT=JWT,OPENRAG-QUERY-FILTER,OPENSEARCH_PASSWORD,OPENSEARCH_URL,DOCLING_SERVE_URL,OWNER,OWNER_NAME,OWNER_EMAIL,CONNECTOR_TYPE,DOCUMENT_ID,SOURCE_URL,ALLOWED_USERS,ALLOWED_GROUPS,FILENAME,MIMETYPE,FILESIZE,SELECTED_EMBEDDING_MODEL,OPENAI_API_KEY,ANTHROPIC_API_KEY,WATSONX_API_KEY,WATSONX_URL,WATSONX_PROJECT_ID,OLLAMA_BASE_URL,OPENSEARCH_INDEX_NAME - LANGFLOW_LOG_LEVEL=DEBUG - LANGFLOW_WORKERS=${LANGFLOW_WORKERS:-1} - LANGFLOW_AUTO_LOGIN=${LANGFLOW_AUTO_LOGIN} - LANGFLOW_SUPERUSER=${LANGFLOW_SUPERUSER} - LANGFLOW_SUPERUSER_PASSWORD=${LANGFLOW_SUPERUSER_PASSWORD} - LANGFLOW_NEW_USER_IS_ACTIVE=${LANGFLOW_NEW_USER_IS_ACTIVE} - LANGFLOW_ENABLE_SUPERUSER_CLI=${LANGFLOW_ENABLE_SUPERUSER_CLI} # - DEFAULT_FOLDER_NAME=OpenRAG - HIDE_GETTING_STARTED_PROGRESS=true