Guía de despliegue

AnythingLLM en VPS: guía completa con trampas a evitar

Desplegar en un VPS Cloud →

Tutorial

AnythingLLM en VPS: guía completa con trampas a evitar

Inteligencia Artificial8 min de lectura7 pasos

AnythingLLM convierte sus documentos internos en una base de conocimiento consultable por chat, con gestión multiusuario y espacios de trabajo aislados. Al alojarlo en su VPS, obtiene un asistente RAG privado conectado a sus propios archivos, sin confiar sus PDF confidenciales a un servicio externo. Esta guía cubre el despliegue paso a paso, pero también las trampas reales señaladas por la comunidad — entre ellas una que borra definitivamente sus embeddings si descarga la etiqueta `:latest` sin precaución.

Contenido· Por qué autoalojar AnythingLLM en un VPS1/7
  1. 01Por qué autoalojar AnythingLLM en un VPS
  2. 02Las ventajas concretas de un AnythingLLM autoalojado
  3. 03Requisitos de hardware y software
  4. 04Fijado de versión: crítico e irreversible
  5. 05Desplegar AnythingLLM con Docker y HTTPS
  6. 06Solución de problemas: las tres trampas más frecuentes
  7. 07AnythingLLM vs Open WebUI: ¿qué espacio de trabajo de IA elegir?

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 storage que 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.4

Antes 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

  1. 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 storage

    El contenedor se ejecuta con un UID dedicado (no root): los permisos 777 sobre storage son necesarios para que el proceso interno pueda escribir la base vectorial y las cargas de documentos.

  2. 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_ADMIN

    Luego cree .env en 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-openai

    Sustituya LLM_PROVIDER y la clave según su proveedor. Para Ollama local, vea el paso siguiente.

  3. 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, localhost designa 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:11434

    En 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-text

    Compruebe que Ollama escucha realmente en 0.0.0.0 (no solo en 127.0.0.1) verificando OLLAMA_HOST=0.0.0.0 en su unidad systemd o en su variable de entorno.

  4. Arrancar el contenedor y crear la cuenta de administrador

    Lance el servicio:

    docker compose up -d
    docker compose logs -f

    Espere las líneas [server] Listening on port 3001 y [database] Migration complete. Luego acceda a http://votre-ip:3001 desde 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.

  5. 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) o max_size (Caddy) es imprescindible para permitir la carga de PDF grandes o de archivos comprimidos de documentos.

  6. 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.

  7. 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

AnythingLLMOpen WebUI
Objetivo principalRAG documental + agentes de IAInterfaz de chat para LLM
RAG / ingesta de documentosIntegrado (PDF, Word, URL, Notion, GitHub…)Importación de archivos básica
Constructor de agentes de IASí (no-code)No
Proveedores de LLMMás de 20 (Ollama, OpenAI, Anthropic, Mistral…)Ollama + compatibles OpenAI
Roles multiusuarioAdministrador / Manager / StandardGestión de usuarios básica
API RESTAPI completa de documentos y chatLimitada
Base vectorialLanceDB integrado + intercambiable (Qdrant, Chroma…)Externa mediante la configuración RAG
RAM (solo API, sin LLM local)~512 MB~256 MB
Riesgo :latestCrítico — borra los embeddingsMenos documentado
LicenciaMITMIT

Su base de conocimiento de IA privada en un VPS Cloud ServOrbit

El VPS Cloud ServOrbit aporta el almacenamiento y la RAM necesarios para indexar sus documentos y ejecutar AnythingLLM con total confidencialidad. Elija su tamaño según su corpus y escale a demanda a medida que este crece.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva