| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481 |
- networks:
- r2r-network:
- external: true
- attachable: true
- labels:
- - "com.docker.compose.recreate=always"
- #name: r2r_r2r-network
- volumes:
- hatchet_certs:
- name: ${VOLUME_HATCHET_CERTS:-hatchet_certs}
- hatchet_config:
- name: ${VOLUME_HATCHET_CONFIG:-hatchet_config}
- hatchet_api_key:
- name: ${VOLUME_HATCHET_API_KEY:-hatchet_api_key}
- postgres_data:
- name: ${VOLUME_POSTGRES_DATA:-postgres_data}
- hatchet_rabbitmq_data:
- name: ${VOLUME_HATCHET_RABBITMQ_DATA:-hatchet_rabbitmq_data}
- hatchet_rabbitmq_conf:
- name: ${VOLUME_HATCHET_RABBITMQ_CONF:-hatchet_rabbitmq_conf}
- hatchet_postgres_data:
- name: ${VOLUME_HATCHET_POSTGRES_DATA:-hatchet_postgres_data}
- services:
- postgres:
- image: pgvector/pgvector:pg16
- shm_size: 1gb
- environment:
- - POSTGRES_USER=${R2R_POSTGRES_USER:-postgres}
- - POSTGRES_PASSWORD=${R2R_POSTGRES_PASSWORD:-cocorobo-123}
- - POSTGRES_HOST=${R2R_POSTGRES_HOST:-postgres}
- - POSTGRES_PORT=${R2R_POSTGRES_PORT:-5432}
- - POSTGRES_MAX_CONNECTIONS=${R2R_POSTGRES_MAX_CONNECTIONS:-102400}
- - PGPORT=${R2R_POSTGRES_PORT:-5432}
- volumes:
- - ./postgres_data:/var/lib/postgresql/data
- networks:
- - r2r-network
- ports:
- - "${R2R_POSTGRES_PORT:-5432}:${R2R_POSTGRES_PORT:-5432}"
- healthcheck:
- test: ["CMD-SHELL", "pg_isready -U ${R2R_POSTGRES_USER:-postgres}"]
- interval: 10s
- timeout: 5s
- retries: 5
- command: >
- postgres
- -c max_connections=${R2R_POSTGRES_MAX_CONNECTIONS:-102400}
- deploy:
- replicas: 1
- restart_policy:
- condition: on-failure
- hatchet-postgres:
- image: postgres:latest
- environment:
- POSTGRES_DB: ${HATCHET_POSTGRES_DBNAME:-hatchet}
- POSTGRES_USER: ${HATCHET_POSTGRES_USER:-hatchet_user}
- POSTGRES_PASSWORD: ${HATCHET_POSTGRES_PASSWORD:-hatchet_password}
- volumes:
- - ./hatchet_postgres_data:/var/lib/postgresql/data
- networks:
- - r2r-network
- healthcheck:
- test: ["CMD-SHELL", "pg_isready -U ${HATCHET_POSTGRES_USER:-hatchet_user} -d ${HATCHET_POSTGRES_DBNAME:-hatchet}"]
- interval: 10s
- timeout: 5s
- retries: 5
- deploy:
- replicas: 1
- restart_policy:
- condition: on-failure
- hatchet-rabbitmq:
- image: "rabbitmq:3-management"
- hostname: "hatchet-rabbitmq"
- ports:
- - "${R2R_RABBITMQ_PORT:-5673}:5672"
- - "${R2R_RABBITMQ_MGMT_PORT:-15673}:15672"
- environment:
- RABBITMQ_DEFAULT_USER: "user"
- RABBITMQ_DEFAULT_PASS: "password"
- volumes:
- - hatchet_rabbitmq_data:/var/lib/rabbitmq
- - hatchet_rabbitmq_conf:/etc/rabbitmq/rabbitmq.conf
- healthcheck:
- test: ["CMD", "rabbitmqctl", "status"]
- interval: 10s
- timeout: 10s
- retries: 5
- networks:
- - r2r-network
- deploy:
- replicas: 1
- restart_policy:
- condition: on-failure
- hatchet-create-db:
- image: postgres:latest
- command: >
- sh -c "
- set -e
- echo 'Waiting for PostgreSQL to be ready...'
- while ! pg_isready -h hatchet-postgres -p 5432 -U ${HATCHET_POSTGRES_USER:-hatchet_user}; do
- sleep 1
- done
- echo 'PostgreSQL is ready, checking if database exists...'
- if ! PGPASSWORD=${HATCHET_POSTGRES_PASSWORD:-hatchet_password} psql -h hatchet-postgres -p 5432 -U ${HATCHET_POSTGRES_USER:-hatchet_user} -lqt | grep -qw ${HATCHET_POSTGRES_DBNAME:-hatchet}; then
- echo 'Database does not exist, creating it...'
- PGPASSWORD=${HATCHET_POSTGRES_PASSWORD:-hatchet_password} createdb -h hatchet-postgres -p 5432 -U ${HATCHET_POSTGRES_USER:-hatchet_user} -w ${HATCHET_POSTGRES_DBNAME:-hatchet}
- else
- echo 'Database already exists, skipping creation.'
- fi
- "
- environment:
- DATABASE_URL: "postgres://${HATCHET_POSTGRES_USER:-hatchet_user}:${HATCHET_POSTGRES_PASSWORD:-hatchet_password}@hatchet-postgres:5432/${HATCHET_POSTGRES_DBNAME:-hatchet}?sslmode=disable"
- networks:
- - r2r-network
- deploy:
- replicas: 1
- restart_policy:
- condition: on-failure
- hatchet-migration:
- image: ghcr.io/hatchet-dev/hatchet/hatchet-migrate:v0.53.15
- environment:
- DATABASE_URL: "postgres://${HATCHET_POSTGRES_USER:-hatchet_user}:${HATCHET_POSTGRES_PASSWORD:-hatchet_password}@hatchet-postgres:5432/${HATCHET_POSTGRES_DBNAME:-hatchet}?sslmode=disable"
- depends_on:
- - hatchet-create-db
- deploy:
- replicas: 1
- restart_policy:
- condition: on-failure
- networks:
- - r2r-network
- hatchet-setup-config:
- image: ghcr.io/hatchet-dev/hatchet/hatchet-admin:v0.53.15
- command: /hatchet/hatchet-admin quickstart --skip certs --generated-config-dir /hatchet/config --overwrite=false
- environment:
- DATABASE_URL: "postgres://${HATCHET_POSTGRES_USER:-hatchet_user}:${HATCHET_POSTGRES_PASSWORD:-hatchet_password}@hatchet-postgres:5432/${HATCHET_POSTGRES_DBNAME:-hatchet}?sslmode=disable"
- HATCHET_CLIENT_GRPC_MAX_RECV_MESSAGE_LENGTH: "${HATCHET_CLIENT_GRPC_MAX_RECV_MESSAGE_LENGTH:-134217728}"
- HATCHET_CLIENT_GRPC_MAX_SEND_MESSAGE_LENGTH: "${HATCHET_CLIENT_GRPC_MAX_SEND_MESSAGE_LENGTH:-134217728}"
- DATABASE_POSTGRES_PORT: "5432"
- DATABASE_POSTGRES_HOST: hatchet-postgres
- DATABASE_POSTGRES_USERNAME: "${HATCHET_POSTGRES_USER:-hatchet_user}"
- DATABASE_POSTGRES_PASSWORD: "${HATCHET_POSTGRES_PASSWORD:-hatchet_password}"
- HATCHET_DATABASE_POSTGRES_DB_NAME: "${HATCHET_POSTGRES_DBNAME:-hatchet}"
- SERVER_TASKQUEUE_RABBITMQ_URL: amqp://user:password@hatchet-rabbitmq:5672/
- SERVER_AUTH_COOKIE_DOMAIN: "http://host.docker.internal:${R2R_HATCHET_DASHBOARD_PORT:-7274}"
- SERVER_URL: "http://host.docker.internal:${R2R_HATCHET_DASHBOARD_PORT:-7274}"
- SERVER_AUTH_COOKIE_INSECURE: "t"
- SERVER_GRPC_BIND_ADDRESS: "0.0.0.0"
- SERVER_GRPC_INSECURE: "t"
- SERVER_GRPC_BROADCAST_ADDRESS: "hatchet-engine:7077"
- SERVER_GRPC_MAX_MSG_SIZE: 134217728
- volumes:
- - hatchet_certs:/hatchet/certs
- - hatchet_config:/hatchet/config
- depends_on:
- - hatchet-migration
- - hatchet-rabbitmq
- networks:
- - r2r-network
- deploy:
- replicas: 1
- restart_policy:
- condition: on-failure
- hatchet-engine:
- image: ghcr.io/hatchet-dev/hatchet/hatchet-engine:v0.53.15
- command: /hatchet/hatchet-engine --config /hatchet/config
- depends_on:
- - hatchet-setup-config
- ports:
- - "${R2R_HATCHET_ENGINE_PORT:-7077}:7077"
- environment:
- DATABASE_URL: "postgres://${HATCHET_POSTGRES_USER:-hatchet_user}:${HATCHET_POSTGRES_PASSWORD:-hatchet_password}@hatchet-postgres:5432/${HATCHET_POSTGRES_DBNAME:-hatchet}?sslmode=disable"
- SERVER_GRPC_BROADCAST_ADDRESS: "hatchet-engine:7077"
- SERVER_GRPC_BIND_ADDRESS: "0.0.0.0"
- SERVER_GRPC_PORT: "7077"
- SERVER_GRPC_INSECURE: "t"
- SERVER_GRPC_MAX_MSG_SIZE: 134217728
- volumes:
- - hatchet_certs:/hatchet/certs
- - hatchet_config:/hatchet/config
- healthcheck:
- test: ["CMD", "wget", "-q", "-O", "-", "http://localhost:8733/live"]
- interval: 10s
- timeout: 5s
- retries: 5
- deploy:
- replicas: 1
- restart_policy:
- condition: on-failure
- networks:
- - r2r-network
- hatchet-dashboard:
- image: ghcr.io/hatchet-dev/hatchet/hatchet-dashboard:v0.53.15
- command: sh ./entrypoint.sh --config /hatchet/config
- depends_on:
- - hatchet-setup-config
- environment:
- DATABASE_URL: "postgres://${HATCHET_POSTGRES_USER:-hatchet_user}:${HATCHET_POSTGRES_PASSWORD:-hatchet_password}@hatchet-postgres:5432/${HATCHET_POSTGRES_DBNAME:-hatchet}?sslmode=disable"
- volumes:
- - hatchet_certs:/hatchet/certs
- - hatchet_config:/hatchet/config
- networks:
- - r2r-network
- ports:
- - "${R2R_HATCHET_DASHBOARD_PORT:-7274}:80"
- deploy:
- replicas: 1
- restart_policy:
- condition: on-failure
- setup-token:
- image: ghcr.io/hatchet-dev/hatchet/hatchet-admin:v0.53.15
- command: sh /scripts/setup-token.sh
- volumes:
- - ./scripts:/scripts
- - hatchet_certs:/hatchet/certs
- - hatchet_config:/hatchet/config
- - hatchet_api_key:/hatchet_api_key
- depends_on:
- - hatchet-setup-config
- deploy:
- replicas: 1
- restart_policy:
- condition: on-failure
- networks:
- - r2r-network
- unstructured:
- image: ${UNSTRUCTURED_IMAGE:-ragtoriches/unst-prod}
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:7275/health"]
- interval: 10s
- timeout: 5s
- retries: 5
- deploy:
- replicas: 1
- restart_policy:
- condition: on-failure
- networks:
- - r2r-network
- graph_clustering:
- image: ${GRAPH_CLUSTERING_IMAGE:-ragtoriches/cluster-prod}
- ports:
- - "${R2R_GRAPH_CLUSTERING_PORT:-7276}:7276"
- networks:
- - r2r-network
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:7276/health"]
- interval: 10s
- timeout: 5s
- retries: 5
- deploy:
- replicas: 1
- restart_policy:
- condition: on-failure
- r2r:
- image: sciphiai/r2r:latest
- ports:
- - "${R2R_PORT:-7272}:${R2R_PORT:-7272}"
- environment:
- - PYTHONUNBUFFERED=1
- - R2R_PORT=${R2R_PORT:-7272}
- - R2R_HOST=${R2R_HOST:-0.0.0.0}
- # R2R
- - R2R_LOG_LEVEL=${R2R_LOG_LEVEL:-INFO}
- - R2R_LOG_CONSOLE_FORMATTER=${R2R_LOG_CONSOLE_FORMATTER:-json}
- - R2R_CONFIG_NAME=${R2R_CONFIG_NAME:-}
- - R2R_CONFIG_PATH=${R2R_CONFIG_PATH:-}
- - R2R_PROJECT_NAME=${R2R_PROJECT_NAME:-r2r_default}
- - R2R_SECRET_KEY=${R2R_SECRET_KEY:-}
- # Postgres
- - R2R_POSTGRES_USER=${R2R_POSTGRES_USER:-postgres}
- - R2R_POSTGRES_PASSWORD=${R2R_POSTGRES_PASSWORD:-cocorobo-123}
- - R2R_POSTGRES_HOST=${R2R_POSTGRES_HOST:-postgres}
- - R2R_POSTGRES_PORT=${R2R_POSTGRES_PORT:-5432}
- - R2R_POSTGRES_DBNAME=${R2R_POSTGRES_DBNAME:-postgres}
- - R2R_POSTGRES_MAX_CONNECTIONS=${R2R_POSTGRES_MAX_CONNECTIONS:-102400}
- - R2R_POSTGRES_STATEMENT_CACHE_SIZE=${R2R_POSTGRES_STATEMENT_CACHE_SIZE:-1000}
- # OpenAI
- #- OPENAI_API_KEY=${OPENAI_API_KEY:-}
- #- OPENAI_API_BASE=${OPENAI_API_BASE:-}
- - OPENAI_API_KEY=${OPENAI_API_KEY:-sk-j9Uwupu0NPZtdDS_IfEZlRWpX1JgFyZFLZProkesy2QbtqMs16pDnylAozU}
- - OPENAI_API_BASE=${OPENAI_API_BASE:-http://172.16.12.13:3000/v1}
- # Azure Foundry
- - AZURE_FOUNDRY_API_ENDPOINT=${AZURE_FOUNDRY_API_ENDPOINT:-}
- - AZURE_FOUNDRY_API_KEY=${AZURE_FOUNDRY_API_KEY:-}
- # XAI / GROK
- - XAI_API_KEY=${XAI_API_KEY:-}
- # Anthropic
- - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
- # Azure
- - AZURE_API_KEY=${AZURE_API_KEY:-}
- - AZURE_API_BASE=${AZURE_API_BASE:-}
- - AZURE_API_VERSION=${AZURE_API_VERSION:-}
- # Google Vertex AI
- - GOOGLE_APPLICATION_CREDENTIALS=${GOOGLE_APPLICATION_CREDENTIALS:-}
- - VERTEX_PROJECT=${VERTEX_PROJECT:-}
- - VERTEX_LOCATION=${VERTEX_LOCATION:-}
- # Google Gemini
- - GEMINI_API_KEY=${GEMINI_API_KEY:-}
- # AWS Bedrock
- #- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-}
- #- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-}
- #- AWS_REGION_NAME=${AWS_REGION_NAME:-}
- - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-AKIATLPEDU37ZUJYM7GG}
- - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-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}
- - AWS_REGION_NAME=${AWS_REGION_NAME:-cn-north-1}
- # Groq
- - GROQ_API_KEY=${GROQ_API_KEY:-}
- # Cohere
- - COHERE_API_KEY=${COHERE_API_KEY:-}
- # Anyscale
- - ANYSCALE_API_KEY=${ANYSCALE_API_KEY:-}
- # Ollama
- #- OLLAMA_API_BASE=${OLLAMA_API_BASE:-http://host.docker.internal:11434}
- - OLLAMA_API_BASE=${OLLAMA_API_BASE:-http://34.228.204.21:11434}
- # LM Studio
- - LM_STUDIO_API_BASE=${LM_STUDIO_API_BASE:-}
- - LM_STUDIO_API_KEY=${LM_STUDIO_API_KEY:-1234}
- # Huggingface
- - HUGGINGFACE_API_BASE=${HUGGINGFACE_API_BASE:-}
- - HUGGINGFACE_API_KEY=${HUGGINGFACE_API_KEY}
- # Unstructured
- - UNSTRUCTURED_API_KEY=${UNSTRUCTURED_API_KEY:-cJR72sMAYxCtT6Pmd2PW3KmrjNcKp5}
- - UNSTRUCTURED_API_URL=${UNSTRUCTURED_API_URL:-https://api.unstructured.io/general/v0/general}
- - UNSTRUCTURED_SERVICE_URL=${UNSTRUCTURED_SERVICE_URL:-http://unstructured:7275}
- - UNSTRUCTURED_NUM_WORKERS=${UNSTRUCTURED_NUM_WORKERS:-10}
- # Hatchet
- - HATCHET_CLIENT_TLS_STRATEGY=none
- - HATCHET_CLIENT_GRPC_MAX_RECV_MESSAGE_LENGTH=${HATCHET_CLIENT_GRPC_MAX_RECV_MESSAGE_LENGTH:-134217728}
- - HATCHET_CLIENT_GRPC_MAX_SEND_MESSAGE_LENGTH=${HATCHET_CLIENT_GRPC_MAX_SEND_MESSAGE_LENGTH:-134217728}
- # Graphologic
- - CLUSTERING_SERVICE_URL=http://graph_clustering:7276
- # OAuth Credentials
- - GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}
- - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET}
- - GOOGLE_REDIRECT_URI=${GOOGLE_REDIRECT_URI}
- - GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID}
- - GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET}
- - GITHUB_REDIRECT_URI=${GITHUB_REDIRECT_URI}
- # Other
- - FIRECRAWL_API_KEY=${FIRECRAWL_API_KEY}
- - SERPER_API_KEY=${SERPER_API_KEY}
- - SENDGRID_API_KEY=${SENDGRID_API_KEY}
- - R2R_SENTRY_DSN=${R2R_SENTRY_DSN}
- - R2R_SENTRY_ENVIRONMENT=${R2R_SENTRY_ENVIRONMENT}
- - R2R_SENTRY_TRACES_SAMPLE_RATE=${R2R_SENTRY_TRACES_SAMPLE_RATE}
- - R2R_SENTRY_PROFILES_SAMPLE_RATE=${R2R_SENTRY_PROFILES_SAMPLE_RATE}
- command: >
- sh -c '
- if [ -z "$${HATCHET_CLIENT_TOKEN}" ]; then
- export HATCHET_CLIENT_TOKEN=$$(cat /hatchet_api_key/api_key.txt)
- fi
- exec uvicorn core.main.app_entry:app --host $${R2R_HOST} --port $${R2R_PORT}
- '
- env_file:
- - ./env/r2r-full.env
- networks:
- - r2r-network
- volumes:
- - ./user_configs:/app/user_configs
- - ./scripts:/scripts
- #- ${R2R_CONFIG_PATH:-/}:${R2R_CONFIG_PATH:-/app/config}
- - hatchet_api_key:/hatchet_api_key:ro
- extra_hosts:
- - host.docker.internal:host-gateway
- depends_on:
- - setup-token
- - unstructured
- - graph_clustering
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:${R2R_PORT:-7272}/v3/health"]
- interval: 6s
- timeout: 5s
- retries: 5
- start_period: 30s
- build:
- context: ../py/
- dockerfile: ../py/Dockerfile
- deploy:
- replicas: ${R2R_REPLICAS:-1}
- restart_policy:
- condition: on-failure
- update_config:
- parallelism: 1
- delay: 30s
- order: start-first
- rollback_config:
- parallelism: 1
- delay: 30s
- #logging:
- #driver: fluentd
- #options:
- #fluentd-address: host.docker.internal:24224
- #fluentd-sub-second-precision: "true"
- #tag: backend
- r2r-dashboard:
- image: sciphiai/r2r-dashboard:1.0.2
- environment:
- - NEXT_PUBLIC_R2R_DEPLOYMENT_URL=${R2R_DEPLOYMENT_URL:-http://localhost:7272}
- - NEXT_PUBLIC_HATCHET_DASHBOARD_URL=${HATCHET_DASHBOARD_URL:-http://localhost:${R2R_HATCHET_DASHBOARD_PORT:-7274}}
- ports:
- - "${R2R_DASHBOARD_PORT:-7273}:3000"
- deploy:
- replicas: 1
- restart_policy:
- condition: on-failure
- networks:
- - r2r-network
- fluent-bit:
- image: fluent/fluent-bit:latest
- volumes:
- - ./docker/fluent-bit:/fluent-bit/etc:ro
- ports:
- - "24224:24224"
- depends_on:
- - victoria-logs
- networks:
- - r2r-network
- grafana:
- image: grafana/grafana:latest
- ports:
- - "3001:3000"
- env_file:
- - .env
- volumes:
- - ./.data/grafana:/var/lib/grafana
- networks:
- - r2r-network
- victoria-logs:
- image: victoriametrics/victoria-logs:v1.10.1-victorialogs
- ports:
- - "9428:9428"
- volumes:
- - ./.data/victoria-logs:/data
- command: -storageDataPath=/data -retentionPeriod=60d
- networks:
- - r2r-network
|