Por qué autoalojar AnythingLLM en un VPS
AnythingLLM es ante todo un motor RAG completo: ingesta de documentos, fragmentación, vectorización, búsqueda semántica y generación, todo ello en una interfaz multiusuario accesible desde un navegador. El núcleo del asunto son los datos: informes financieros, contratos, documentación de producto, base de conocimiento de soporte. Estos archivos no tienen por qué pasar por un proveedor SaaS de ingesta externo.
En un VPS, el motor de incrustación de documentos, la base vectorial (LanceDB integrado por defecto) y el historial de conversaciones permanecen en sus volúmenes Docker — nunca duplicados en otro lugar sin su consentimiento. Usted controla quién accede a cada espacio de trabajo, elige libremente el LLM (API en la nube o modelo local mediante Ollama) y escapa a las cuotas de ingesta de los planes SaaS que limitan el número de páginas o de archivos.
Para una agencia que gestiona varios clientes, cada espacio de trabajo se convierte en un silo estanco: documentos compartimentados, permisos por rol, ninguna fuga entre equipos. Para una empresa, lo que prima es el cumplimiento normativo: los datos permanecen en su infraestructura, en su jurisdicción, bajo su política de copias de seguridad.
Las ventajas concretas de un AnythingLLM autoalojado
- Documentos confidenciales indexados localmente, nunca enviados a un servicio de ingesta externo.
- Espacios de trabajo compartimentados por cliente o por equipo, con gestión detallada de los roles (Administrador, Manager, Standard).
- Base vectorial a elegir: LanceDB integrado para empezar, Chroma o Qdrant externo para los corpus grandes.
- Conexión a más de 20 proveedores de LLM, incluido un Ollama local para cero nube y cero coste de inferencia.
- Ningún límite en el número de documentos, de páginas o de espacios de trabajo ingeridos.
- Copia de seguridad simple y portátil: todo el estado cabe en un único volumen
storageque archivar o replicar. - Agentes de IA no-code integrados: cree canalizaciones de automatización sin salir de la interfaz.
- API REST completa para integrar AnythingLLM en sus propias aplicaciones o scripts de automatización.
Requisitos de hardware y software
El contenedor AnythingLLM es razonable en recursos, pero la incrustación de un corpus grande consume CPU y RAM de forma significativa. Apunte a 2 vCPU / 2 GB de RAM para empezar con algunos cientos de documentos y un LLM en API en la nube. Suba a 4 vCPU / 8 GB si indexa miles de documentos, utiliza un modelo de incrustación local o ejecuta Ollama en el mismo host.
Prevea 15 a 20 GB de disco como mínimo: los vectores y la caché de documentos crecen rápido, sobre todo con PDF densos o corpus multilingües. Añada margen si despliega también Qdrant u Ollama en el mismo VPS.
En cuanto al software, necesita:
- Docker y Docker Compose (v2 recomendado)
- Un nombre de dominio o subdominio que apunte a su VPS (ej. chat.votre-domaine.com)
- El puerto 443 abierto en entrada en su cortafuegos
- Una clave de API de LLM (OpenAI, Anthropic, Mistral…) si no utiliza Ollama en local
Nota importante sobre las versiones: antes de cualquier comando docker pull, lea la sección Fijado de versión más abajo. Descargar :latest sin precaución puede borrar definitivamente sus embeddings.
Fijado de versión: crítico e irreversible
No utilice nunca la etiqueta :latest en producción. Un docker pull mintplexlabs/anythingllm:latest puede sobrescribir la clave de cifrado interna de los embeddings almacenados en su volumen, dejando todos sus documentos vectorizados ilegibles de forma permanente — sin posibilidad de recuperación.
Este comportamiento está documentado como breaking change desde marzo de 2026 (incidencia GitHub #5256).
La regla a seguir: fije siempre una versión concreta en su docker-compose.yml:
image: mintplexlabs/anythingllm:v1.8.4Antes de actualizar, lea las release notes de cada versión intermedia, haga una copia de seguridad completa de su volumen storage y pruebe la subida de versión en una copia antes de aplicarla en producción.
Desplegar AnythingLLM con Docker y HTTPS
Crear la estructura de directorios y los permisos
Por SSH en su VPS, cree el directorio de trabajo y el volumen de datos:
mkdir -p /opt/anythingllm/storage cd /opt/anythingllm chmod -R 777 storageEl contenedor se ejecuta con un UID dedicado (no root): los permisos
777sobrestorageson necesarios para que el proceso interno pueda escribir la base vectorial y las cargas de documentos.Escribir el docker-compose.yml con una versión fijada
Cree
/opt/anythingllm/docker-compose.yml. Fíjese en la etiqueta de versión fija — no ponga:latest:services: anythingllm: image: mintplexlabs/anythingllm:v1.8.4 container_name: anythingllm restart: unless-stopped ports: - "3001:3001" volumes: - ./storage:/app/server/storage env_file: - .env cap_add: - SYS_ADMINLuego cree
.enven la misma carpeta con al menos:JWT_SECRET=changez-moi-par-une-chaine-aleatoire-longue STORAGE_DIR=/app/server/storage LLM_PROVIDER=openai OPEN_AI_KEY=sk-votre-cle-openaiSustituya
LLM_PROVIDERy la clave según su proveedor. Para Ollama local, vea el paso siguiente.Configurar Ollama si opta por el 100 % local
Si Ollama se ejecuta en el mismo host que el contenedor AnythingLLM, no utilice
localhost— desde dentro del contenedor,localhostdesigna al propio contenedor, no al host.URL correcta según el sistema operativo:
- Linux:http://172.17.0.1:11434(dirección del bridge Docker por defecto)
- macOS / Windows:http://host.docker.internal:11434En su
.env:LLM_PROVIDER=ollama OLLAMA_BASE_PATH=http://172.17.0.1:11434 OLLAMA_MODEL_PREF=llama3.2 EMBEDDING_ENGINE=ollama EMBEDDING_BASE_PATH=http://172.17.0.1:11434 EMBEDDING_MODEL_PREF=nomic-embed-textCompruebe que Ollama escucha realmente en
0.0.0.0(no solo en127.0.0.1) verificandoOLLAMA_HOST=0.0.0.0en su unidad systemd o en su variable de entorno.Arrancar el contenedor y crear la cuenta de administrador
Lance el servicio:
docker compose up -d docker compose logs -fEspere las líneas
[server] Listening on port 3001y[database] Migration complete. Luego acceda ahttp://votre-ip:3001desde su equipo (acceso temporal, que conviene cortar tras configurar el reverse proxy). El asistente de configuración le guía para crear la cuenta de administrador y elegir el modelo de incrustación y el LLM.Poner en marcha el reverse proxy con HTTPS
Con Nginx (ejemplo mínimo) o Caddy, exponga AnythingLLM detrás de su dominio.
Ejemplo Caddy (el más simple, Let's Encrypt automático):
chat.votre-domaine.com { reverse_proxy localhost:3001 request_body { max_size 100MB } }Ejemplo Nginx (bloque
server):server { listen 443 ssl; server_name chat.votre-domaine.com; ssl_certificate /etc/letsencrypt/live/chat.votre-domaine.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/chat.votre-domaine.com/privkey.pem; client_max_body_size 100M; location / { proxy_pass http://127.0.0.1:3001; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }La directiva
client_max_body_size(Nginx) omax_size(Caddy) es imprescindible para permitir la carga de PDF grandes o de archivos comprimidos de documentos.Crear un espacio de trabajo, ingerir documentos y probar
En la interfaz, haga clic en «+ Nuevo espacio de trabajo», dele un nombre y luego arrastre algunos PDF a la zona de carga. Lance la incrustación (botón «Guardar e incrustar»). Una vez terminado, formule una pregunta en el chat — las respuestas deben citar las fuentes extraídas de sus archivos.
Si las citas no aparecen, compruebe en los ajustes del espacio de trabajo que el modo RAG está bien activado (opción «Chat mode» → «Query») y que el número de fragmentos devueltos es superior a 0.
Activar el modo multiusuario y asegurar el acceso
En Ajustes → Multi-User Mode, active el modo multiusuario. Invite a sus colaboradores por correo electrónico y asigne los roles: Administrador (acceso total), Manager (gestión de los espacios de trabajo), Standard (solo uso).
Restrinja cada usuario únicamente a los espacios de trabajo que le conciernen. Desde la interfaz de administración también puede configurar un SSO o una autenticación externa si su proveedor de LLM lo admite.
Solución de problemas: las tres trampas más frecuentes
Estos tres problemas aparecen con regularidad en la comunidad de AnythingLLM. Conocerlos antes de desplegar le ahorrará horas de depuración.
Trampa 1 — :latest borra sus embeddings (crítico, irreversible)
Si actualiza su contenedor con docker pull mintplexlabs/anythingllm:latest, una nueva versión puede sobrescribir la clave de cifrado de los embeddings almacenada en su volumen. Resultado: todos sus documentos vectorizados quedan ilegibles, sin posibilidad de recuperación. Este breaking change está documentado desde marzo de 2026 (incidencia #5256). Solución: fije siempre una etiqueta de versión concreta (v1.8.4, v1.9.x…) en su docker-compose.yml y no haga nunca un pull sin copia de seguridad previa del volumen storage.
Trampa 2 — Los agentes Gemini están rotos desde la v1.16
Desde AnythingLLM v1.16, el proveedor Gemini produce un error de conexión en streaming que permanece abierto indefinidamente y bloquea al agente (incidencia #6153, todavía abierta). Solución alternativa: desactive el proveedor Gemini en los ajustes de LLM y utilice en su lugar un endpoint compatible con OpenAI (ej. gemini-openai-compatible) o pase a Ollama. No intente depurar del lado de la red — el problema está en la gestión del stream del lado de AnythingLLM.
Trampa 3 — Ollama inaccesible desde el contenedor
Si Ollama está instalado directamente en el host (fuera de Docker), configurar http://localhost:11434 en AnythingLLM no funciona: desde dentro del contenedor, localhost apunta al propio contenedor, no al host. Utilice http://172.17.0.1:11434 en Linux (IP del bridge Docker) o http://host.docker.internal:11434 en macOS/Windows. Compruebe también que Ollama escucha en 0.0.0.0 y no únicamente en 127.0.0.1 (variable OLLAMA_HOST=0.0.0.0 en el servicio systemd).
Para corpus voluminosos (más de 10 000 fragmentos), no se quede en LanceDB integrado: despliegue Qdrant en un contenedor vecino sobre la misma red Docker y apunte AnythingLLM hacia él mediante la variable VECTOR_DB=qdrant y QDRANT_ENDPOINT=http://qdrant:6333. Qdrant gestiona mejor los millones de vectores, ofrece filtrado por metadatos y sigue siendo consultable de forma independiente, lo que facilita la depuración de sus búsquedas semánticas. El volumen de Qdrant también se guarda con facilidad: basta con un simple docker cp o una instantánea del volumen.
AnythingLLM vs Open WebUI: ¿qué espacio de trabajo de IA elegir?
Desplace la tabla
| AnythingLLM | Open WebUI | |
|---|---|---|
| Objetivo principal | RAG documental + agentes de IA | Interfaz de chat para LLM |
| RAG / ingesta de documentos | Integrado (PDF, Word, URL, Notion, GitHub…) | Importación de archivos básica |
| Constructor de agentes de IA | Sí (no-code) | No |
| Proveedores de LLM | Más de 20 (Ollama, OpenAI, Anthropic, Mistral…) | Ollama + compatibles OpenAI |
| Roles multiusuario | Administrador / Manager / Standard | Gestión de usuarios básica |
| API REST | API completa de documentos y chat | Limitada |
| Base vectorial | LanceDB integrado + intercambiable (Qdrant, Chroma…) | Externa mediante la configuración RAG |
| RAM (solo API, sin LLM local) | ~512 MB | ~256 MB |
| Riesgo :latest | Crítico — borra los embeddings | Menos documentado |
| Licencia | MIT | MIT |