Saltar a contenido

LibreChat

Chat multi-model con soporte de AI agents, web search y RAG. Node.js + MongoDB + MeiliSearch. DeepSeek V4, SearXNG, Firecrawl. RAM ~500MB-1GB (sin Firecrawl). http://localhost:8515

📁 Rutas y configs

Qué Dónde
Compose /opt/docker/librechat/compose.yaml
Variables de entorno /opt/docker/librechat/.env
Config de modelos y web search /opt/docker/librechat/librechat.yaml
Config de SearXNG /opt/docker/librechat/searxng/settings.yml
Logs /opt/docker/librechat/logs
Uploads /opt/docker/librechat/uploads
MongoDB data /opt/docker/librechat/data-node
MeiliSearch data /opt/docker/librechat/meili_data_v1.35.1

Contenedores: librechat, chat-mongodb, chat-meilisearch, vectordb, rag_api, searxng Puerto: 8515

🧩 Apps integradas externas

App Servicio externo Doc
DeepSeek V4 https://api.deepseek.com/v1 Firecrawl.md
SearXNG (search) Self-hosted en container searxng:8080
Firecrawl (scraper) Self-hosted en firecrawl-api:3002 (red ai_shared) Firecrawl.md

🛠️ Comandos útiles

# Ver logs
docker logs -f librechat
docker logs -f chat-mongodb
docker logs -f searxng

# Reiniciar contenedores individuales
docker restart librechat

# Recrear todo el stack (necesario si se cambió .env o compose)
cd /opt/docker/librechat && docker compose down && docker compose up -d

# Verificar containers activos
docker compose -f /opt/docker/librechat/compose.yaml ps

# Test de salud (desde el host)
curl http://localhost:8515/api/health  # Debe devolver 200
curl "http://localhost:8517/search?q=test&format=json"  # SearXNG directo

# Forzar recreación completa (borra data)
cd /opt/docker/librechat && docker compose down -v && docker compose up -d

🧠 Modelos disponibles

Modelo Provider Uso
deepseek-v4-flash DeepSeek (API key) Chat rápido, title generation
deepseek-v4-pro DeepSeek (API key) Chat avanzado (thinking mode)

API keys en .env:

OPENAI_API_KEY=sk-...              # Embeddings (text-embedding-3-small)
DEEPSEEK_API_KEY=sk-...            # Modelos DeepSeek V4

Pipeline: Query → SearXNG (encuentra URLs) → Firecrawl (extrae contenido) → AI procesa

Config en librechat.yaml:

webSearch:
  searxngInstanceUrl: "${SEARXNG_INSTANCE_URL}"
  firecrawlApiKey: "${FIRECRAWL_API_KEY}"
  firecrawlApiUrl: "${FIRECRAWL_API_URL}"
  searchProvider: "searxng"
  scraperProvider: "firecrawl"
  rerankerType: "none"

Importante: SearXNG necesita tener json en formats y bind_address: "0.0.0.0" en /etc/searxng/settings.yml para que LibreChat pueda consultarlo.

💾 Backups

# Backup de config completa
sudo tar czf /tmp/librechat-config-$(date +%F).tar.gz /opt/docker/librechat/{.env,librechat.yaml,compose.yaml}
# Backup de datos
sudo tar czf /tmp/librechat-data-$(date +%F).tar.gz /opt/docker/librechat/{data-node,meili_data_v1.35.1,uploads,logs}

⚙️ Tareas comunes

Agregar un modelo nuevo: Editar librechat.yamlendpoints.custom o usar fetch: true para que descubra modelos automáticamente.

Actualizar LibreChat:

docker compose pull
docker compose up -d

Ver/Seguir logs de SearXNG:

docker logs -f searxng

🔥 Problemas comunes

Problema Solución
Failed to start server: getaddrinfo EAI_AGAIN mongodb El container librechat no está en la misma red Docker que chat-mongodb. Verificar docker inspect librechat --format '{{json .NetworkSettings.Networks}}'
EACCES: permission denied, open '/app/logs/...' sudo chown -R 1000:1000 /opt/docker/librechat/logs
Bind for 127.0.0.1:8515 failed: port is already allocated Otro servicio (ej: openproject-web) ocupa el puerto. docker stop <container>
Web search devuelve resultados vacíos SearXNG no tiene json en formats. docker exec -u 0 searxng sed -i 's/- html/- html\n - json/' /etc/searxng/settings.yml && docker restart searxng
Firecrawl no responde Verificar que esté en la red ai_shared: docker network inspect ai_shared
DeepSeek no aparece en la UI Verificar DEEPSEEK_API_KEY en .env y que librechat.yaml tenga el endpoint correcto
Cambios en .env o .yaml no surten efecto Usar docker compose down && docker compose up -d (no restart)