docker-compose.yml
Rama main · réplica de lectura del repositorio original.
version: "3.9"
services:
rag-db:
image: ankane/pgvector:latest
container_name: rag-db
environment:
POSTGRES_DB: rag_db
POSTGRES_USER: user
POSTGRES_PASSWORD: password
ports:
- "5433:5432"
volumes:
- rag-db-data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
container_name: rag-redis
ports:
- "6379:6379"
volumes:
- redis-data:/data
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.15.3
container_name: rag-elasticsearch
environment:
discovery.type: single-node
xpack.security.enabled: "false"
ES_JAVA_OPTS: -Xms512m -Xmx512m
ports:
- "9200:9200"
volumes:
- elasticsearch-data:/usr/share/elasticsearch/data
ingestor-app:
build:
context: .
dockerfile: Dockerfile
container_name: rag-ingestor-app
env_file:
- .env
environment:
PORT: ${PORT:-3311}
DATABASE_URL: ${DATABASE_URL:-postgresql://user:password@rag-db:5432/rag_db}
REDIS_URL: ${REDIS_URL:-redis://redis:6379}
OLLAMA_BASE_URL: ${OLLAMA_BASE_URL}
EMBEDDING_MODEL: ${EMBEDDING_MODEL:-nomic-embed-text}
LLM_MODEL: ${LLM_MODEL:-gptoss-20b}
DOCUMENT_CLASSIFIER_MODEL: ${DOCUMENT_CLASSIFIER_MODEL:-qwen2.5:7b}
EMBEDDING_DIMENSION: ${EMBEDDING_DIMENSION:-768}
EMBEDDING_DOCUMENT_PREFIX: ${EMBEDDING_DOCUMENT_PREFIX:-}
EMBEDDING_QUERY_PREFIX: ${EMBEDDING_QUERY_PREFIX:-}
EMBEDDING_MAX_INPUT_CHARS: ${EMBEDDING_MAX_INPUT_CHARS:-1400}
RERANKER_BASE_URL: ${RERANKER_BASE_URL:-}
RERANKER_MODEL: ${RERANKER_MODEL:-}
RERANKER_ENABLED: ${RERANKER_ENABLED:-false}
RERANKER_TOP_N: ${RERANKER_TOP_N:-12}
RERANKER_DOCUMENT_MAX_CHARS: ${RERANKER_DOCUMENT_MAX_CHARS:-900}
RERANKER_TIMEOUT_MS: ${RERANKER_TIMEOUT_MS:-10000}
RERANKER_CONCURRENCY: ${RERANKER_CONCURRENCY:-2}
QUERY_TOP_K: ${QUERY_TOP_K:-5}
QUERY_FUZZY_TEXT_WINDOW: ${QUERY_FUZZY_TEXT_WINDOW:-4000}
CHUNK_SIZE: ${CHUNK_SIZE:-300}
CHUNK_OVERLAP: ${CHUNK_OVERLAP:-50}
IMPORT_DIR: ${IMPORT_DIR:-/app/import-dir}
SYNC_KNOWLEDGE_BASE_SUBDIRS: ${SYNC_KNOWLEDGE_BASE_SUBDIRS:-true}
SYNC_AUTO_CREATE_KNOWLEDGE_BASES: ${SYNC_AUTO_CREATE_KNOWLEDGE_BASES:-true}
UPLOAD_DIR: ${UPLOAD_DIR:-/app/data/uploads}
GIT_REPO_CACHE_DIR: ${GIT_REPO_CACHE_DIR:-/app/data/git-repos}
GIT_REPO_MAX_FILE_BYTES: ${GIT_REPO_MAX_FILE_BYTES:-1000000}
ELASTICSEARCH_URL: ${ELASTICSEARCH_URL:-http://elasticsearch:9200}
ELASTICSEARCH_INDEX_PREFIX: ${ELASTICSEARCH_INDEX_PREFIX:-rag}
CRAWL_DEFAULT_MAX_DEPTH: ${CRAWL_DEFAULT_MAX_DEPTH:-2}
SYNC_CRON: ${SYNC_CRON:-55 01 * * *}
LOG_LEVEL: ${LOG_LEVEL:-info}
ports:
- "3311:3311"
depends_on:
- rag-db
- redis
- elasticsearch
volumes:
- app-data:/app/data
- ./import-dir:/app/import-dir
ingestor-worker:
build:
context: .
dockerfile: Dockerfile
container_name: rag-ingestor-worker
# command: ["node", "dist/workers/worker.js"]
command: ["sh", "-c", "sleep 10 && node dist/workers/worker.js"]
env_file:
- .env
environment:
DATABASE_URL: ${DATABASE_URL:-postgresql://user:password@rag-db:5432/rag_db}
REDIS_URL: ${REDIS_URL:-redis://redis:6379}
OLLAMA_BASE_URL: ${OLLAMA_BASE_URL}
EMBEDDING_MODEL: ${EMBEDDING_MODEL:-nomic-embed-text}
LLM_MODEL: ${LLM_MODEL:-gptoss-20b}
DOCUMENT_CLASSIFIER_MODEL: ${DOCUMENT_CLASSIFIER_MODEL:-qwen2.5:7b}
EMBEDDING_DIMENSION: ${EMBEDDING_DIMENSION:-768}
EMBEDDING_DOCUMENT_PREFIX: ${EMBEDDING_DOCUMENT_PREFIX:-}
EMBEDDING_QUERY_PREFIX: ${EMBEDDING_QUERY_PREFIX:-}
EMBEDDING_MAX_INPUT_CHARS: ${EMBEDDING_MAX_INPUT_CHARS:-1400}
RERANKER_BASE_URL: ${RERANKER_BASE_URL:-}
RERANKER_MODEL: ${RERANKER_MODEL:-}
RERANKER_ENABLED: ${RERANKER_ENABLED:-false}
RERANKER_TOP_N: ${RERANKER_TOP_N:-12}
RERANKER_DOCUMENT_MAX_CHARS: ${RERANKER_DOCUMENT_MAX_CHARS:-900}
RERANKER_TIMEOUT_MS: ${RERANKER_TIMEOUT_MS:-10000}
RERANKER_CONCURRENCY: ${RERANKER_CONCURRENCY:-2}
QUERY_TOP_K: ${QUERY_TOP_K:-5}
QUERY_FUZZY_TEXT_WINDOW: ${QUERY_FUZZY_TEXT_WINDOW:-4000}
CHUNK_SIZE: ${CHUNK_SIZE:-300}
CHUNK_OVERLAP: ${CHUNK_OVERLAP:-50}
IMPORT_DIR: ${IMPORT_DIR:-/app/import-dir}
SYNC_KNOWLEDGE_BASE_SUBDIRS: ${SYNC_KNOWLEDGE_BASE_SUBDIRS:-true}
SYNC_AUTO_CREATE_KNOWLEDGE_BASES: ${SYNC_AUTO_CREATE_KNOWLEDGE_BASES:-true}
UPLOAD_DIR: ${UPLOAD_DIR:-/app/data/uploads}
GIT_REPO_CACHE_DIR: ${GIT_REPO_CACHE_DIR:-/app/data/git-repos}
GIT_REPO_MAX_FILE_BYTES: ${GIT_REPO_MAX_FILE_BYTES:-1000000}
ELASTICSEARCH_URL: ${ELASTICSEARCH_URL:-http://elasticsearch:9200}
ELASTICSEARCH_INDEX_PREFIX: ${ELASTICSEARCH_INDEX_PREFIX:-rag}
CRAWL_DEFAULT_MAX_DEPTH: ${CRAWL_DEFAULT_MAX_DEPTH:-2}
LOG_LEVEL: ${LOG_LEVEL:-info}
depends_on:
- rag-db
- redis
- elasticsearch
volumes:
- app-data:/app/data
- ./import-dir:/app/import-dir
ragfind:
build:
context: .
dockerfile: Dockerfile
container_name: rag-ragfind
command: ["node", "dist/ragfind/server.js"]
env_file:
- .env
environment:
PORT: 3312
DATABASE_URL: ${DATABASE_URL:-postgresql://user:password@rag-db:5432/rag_db}
REDIS_URL: ${REDIS_URL:-redis://redis:6379}
OLLAMA_BASE_URL: ${OLLAMA_BASE_URL}
EMBEDDING_MODEL: ${EMBEDDING_MODEL:-nomic-embed-text}
LLM_MODEL: ${LLM_MODEL:-gptoss-20b}
DOCUMENT_CLASSIFIER_MODEL: ${DOCUMENT_CLASSIFIER_MODEL:-qwen2.5:7b}
EMBEDDING_DIMENSION: ${EMBEDDING_DIMENSION:-768}
EMBEDDING_DOCUMENT_PREFIX: ${EMBEDDING_DOCUMENT_PREFIX:-}
EMBEDDING_QUERY_PREFIX: ${EMBEDDING_QUERY_PREFIX:-}
EMBEDDING_MAX_INPUT_CHARS: ${EMBEDDING_MAX_INPUT_CHARS:-1400}
RERANKER_BASE_URL: ${RERANKER_BASE_URL:-}
RERANKER_MODEL: ${RERANKER_MODEL:-}
RERANKER_ENABLED: ${RERANKER_ENABLED:-false}
RERANKER_TOP_N: ${RERANKER_TOP_N:-12}
RERANKER_DOCUMENT_MAX_CHARS: ${RERANKER_DOCUMENT_MAX_CHARS:-900}
RERANKER_TIMEOUT_MS: ${RERANKER_TIMEOUT_MS:-10000}
RERANKER_CONCURRENCY: ${RERANKER_CONCURRENCY:-2}
QUERY_TOP_K: ${QUERY_TOP_K:-5}
QUERY_FUZZY_TEXT_WINDOW: ${QUERY_FUZZY_TEXT_WINDOW:-4000}
CHUNK_SIZE: ${CHUNK_SIZE:-300}
CHUNK_OVERLAP: ${CHUNK_OVERLAP:-50}
IMPORT_DIR: ${IMPORT_DIR:-/app/import-dir}
SYNC_KNOWLEDGE_BASE_SUBDIRS: ${SYNC_KNOWLEDGE_BASE_SUBDIRS:-true}
SYNC_AUTO_CREATE_KNOWLEDGE_BASES: ${SYNC_AUTO_CREATE_KNOWLEDGE_BASES:-true}
UPLOAD_DIR: ${UPLOAD_DIR:-/app/data/uploads}
ORIGINAL_STORAGE_DIR: ${ORIGINAL_STORAGE_DIR:-/app/data/originals}
GIT_REPO_CACHE_DIR: ${GIT_REPO_CACHE_DIR:-/app/data/git-repos}
GIT_REPO_MAX_FILE_BYTES: ${GIT_REPO_MAX_FILE_BYTES:-1000000}
ELASTICSEARCH_URL: ${ELASTICSEARCH_URL:-http://elasticsearch:9200}
ELASTICSEARCH_INDEX_PREFIX: ${ELASTICSEARCH_INDEX_PREFIX:-rag}
CRAWL_DEFAULT_MAX_DEPTH: ${CRAWL_DEFAULT_MAX_DEPTH:-2}
SYNC_CRON: ${SYNC_CRON:-*/30 * * * *}
LOG_LEVEL: ${LOG_LEVEL:-info}
ports:
- "3312:3312"
depends_on:
- rag-db
- redis
- elasticsearch
volumes:
- app-data:/app/data
volumes:
rag-db-data:
redis-data:
app-data:
elasticsearch-data: