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
🔍 Web Search¶
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.yaml → endpoints.custom o usar fetch: true para que descubra modelos automáticamente.
Actualizar LibreChat:
Ver/Seguir logs de 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) |