[{"data":1,"prerenderedAt":199},["ShallowReactive",2],{"seo-verification":3,"blog-como-alojar-localai-en-un-vps-ma-es":6,"promo-bar-likely":190},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-como-alojar-localai-en-un-vps-ma-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":140,"ctaBody":141,"ctaButton":142,"ctaUrl":143,"relatedPosts":144},12,"como-alojar-localai-en-un-vps",{"fr":12,"en":13,"ar":14,"es":10},"heberger-localai-vps","how-to-host-localai-on-a-vps","كيفية-استضافة-localai-على-خادم-vps","Cómo alojar LocalAI en un VPS","Despliegue LocalAI en su VPS: Docker Compose completo, modelos GGUF, galería, Whisper, embeddings, protección por clave API, conexión SDK OpenAI y solución de problemas.",8,0,false,"2026-06-08T00:00:00+00:00","2026-10-07T23:07:24+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},1,"Inteligencia Artificial","intelligence-artificielle","bg-purple-500\u002F10 text-purple-400","ia",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-localai-vps-poster.svg",{"categorySlug":34,"appSlug":35},"inteligencia-artificial","local-ai","LocalAI es un reemplazo de código abierto y compatible con la API de OpenAI: chat, embeddings, generación de imágenes y audio, todo ejecutado localmente. En su VPS se convierte en una API de IA polivalente y privada, que sus aplicaciones consumen sin cambiar su código. Esta guía cubre el despliegue completo con Docker Compose, la carga de modelos GGUF, la conexión de sus aplicaciones y la solución de los errores más comunes.",[38,42,52,55,83,86,89,92,95],{"type":39,"title":40,"body":41},"h2","Por qué autoalojar LocalAI en un VPS","Mientras Ollama se centra en el texto, LocalAI apunta a una compatibilidad amplia con la API de OpenAI: expone `\u002Fv1\u002Fchat\u002Fcompletions`, `\u002Fv1\u002Fembeddings`, `\u002Fv1\u002Fimages\u002Fgenerations` e incluso la transcripción de audio, en una sola API. Para un equipo que ya tiene código escrito contra el SDK de OpenAI, LocalAI es un reemplazo casi transparente: cambia la URL base y la clave, y el resto funciona. En un VPS obtiene esa polivalencia sin dependencia externa ni coste por llamada. Resulta especialmente pertinente cuando necesita a la vez generación de texto, vectores para RAG y, puntualmente, imágenes, sin multiplicar proveedores ni claves.",{"type":43,"title":44,"items":45},"ul","Los beneficios concretos de un LocalAI autoalojado",[46,47,48,49,50,51],"Reemplazo directo de la API de OpenAI: ninguna reescritura del código cliente.","Una sola API para el chat, los embeddings, las imágenes y el audio.","Soporte de múltiples backends (llama.cpp, diffusers, whisper) bajo una interfaz unificada.","Formatos de modelos abiertos (GGUF) descargables e intercambiables.","Sin facturación por uso: un coste VPS fijo para todos los tipos de generación.","Datos y generaciones conservados íntegramente en su servidor.",{"type":39,"title":53,"body":54},"Requisitos de hardware y software","Como LocalAI es polivalente, sus necesidades dependen de las funciones activadas. Las cifras siguientes son mínimos medidos — un VPS más potente reduce los tiempos de respuesta sin cambiar la viabilidad.\n\n**Solo texto, CPU, modelo 7B (p. ej. Mistral-7B-GGUF)**: 8 GB de RAM, 4 vCPU, 30 GB de disco. A este tamaño, una llamada a `\u002Fv1\u002Fchat\u002Fcompletions` tarda entre 5 y 15 segundos según la cuantización (Q4 es el equilibrio estándar). Un modelo 3B cabe en 4 GB de RAM.\n\n**Texto + imágenes (7B + Stable Diffusion)**: 16 GB de RAM, GPU recomendada, 50 GB de disco. Sin GPU, generar una imagen tarda varios minutos en CPU — prefiera un VPS con GPU para un uso habitual y la opción `SINGLE_ACTIVE_BACKEND=true` para evitar la saturación al combinar chat e imágenes en el mismo host CPU.\n\n**Software requerido**: Docker 24+ y Docker Compose v2 (`docker compose` sin guión), un subdominio dedicado (p. ej. `ia.su-dominio.com`), el puerto 443 abierto, un registro DNS apuntando a la IP del VPS.",{"type":56,"title":57,"steps":58},"steps","Desplegar LocalAI con Docker Compose y HTTPS",[59,62,65,68,71,74,77,80],{"title":60,"body":61},"Preparar la estructura de directorios","Por SSH: `mkdir -p \u002Fopt\u002Flocalai\u002F{models,config} && cd \u002Fopt\u002Flocalai`. La carpeta `models` recibirá los archivos GGUF; `config` recibirá los manifiestos YAML que describen cada modelo a LocalAI.",{"title":63,"body":64},"Crear el archivo docker-compose.yaml","Cree `\u002Fopt\u002Flocalai\u002Fdocker-compose.yaml` con el siguiente contenido:\n\n```yaml\nservices:\n  localai:\n    image: localai\u002Flocalai:latest-cpu\n    restart: unless-stopped\n    ports:\n      - \"127.0.0.1:8080:8080\"\n    volumes:\n      - .\u002Fmodels:\u002Fbuild\u002Fmodels\n      - .\u002Fconfig:\u002Fbuild\u002Fmodels\n    environment:\n      - MODELS_PATH=\u002Fbuild\u002Fmodels\n      - SINGLE_ACTIVE_BACKEND=true\n      - API_KEY=su-clave-secreta\n    healthcheck:\n      test: [\"CMD\", \"curl\", \"-f\", \"http:\u002F\u002Flocalhost:8080\u002Freadyz\"]\n      interval: 30s\n      retries: 3\n```\n\nReemplace `latest-cpu` por `latest-gpu-nvidia-cuda-12` si su VPS dispone de una GPU NVIDIA. `API_KEY` activa la protección por token en todos los endpoints — sin esta variable, la API es accesible sin autenticación.",{"title":66,"body":67},"Iniciar el contenedor","Ejecute `docker compose up -d`, luego siga los logs de arranque: `docker compose logs -f localai`. Espere el mensaje `LocalAI API is listening on [::]:8080` antes de continuar.",{"title":69,"body":70},"Descargar un primer modelo desde la galería","La galería de LocalAI agrupa más de 200 modelos preconfigurados. Para instalar Mistral-7B-Instruct cuantizado Q4:\n\n```bash\ncurl http:\u002F\u002F127.0.0.1:8080\u002Fmodels\u002Fapply \\\n  -H 'Authorization: Bearer su-clave-secreta' \\\n  -d '{\"id\": \"huggingface@thebloke__mistral-7b-instruct-v0.2-gguf\u002Fmistral-7b-instruct-v0.2.Q4_K_M.gguf\"}'\n```\n\nSiga el progreso: `curl http:\u002F\u002F127.0.0.1:8080\u002Fmodels\u002Fjobs\u002F\u003Cjob-id>`. El GGUF se descarga en `.\u002Fmodels\u002F` y su manifiesto YAML se crea automáticamente en `.\u002Fconfig\u002F`.",{"title":72,"body":73},"Añadir un modelo de embeddings","Para RAG, instale `all-MiniLM-L6-v2` (84 MB, 256 MB de RAM):\n\n```yaml\n# config\u002Fall-minilm.yaml\nname: all-minilm\nbackend: bert-embeddings\nparameters:\n  model: all-MiniLM-L6-v2.gguf\n```\n\nDescargue el GGUF manualmente en `.\u002Fmodels\u002F` desde HuggingFace, luego reinicie: `docker compose restart localai`. Verifique con `curl http:\u002F\u002F127.0.0.1:8080\u002Fv1\u002Fmodels`.",{"title":75,"body":76},"Activar Whisper para la transcripción de audio","Añada `config\u002Fwhisper.yaml`:\n\n```yaml\nname: whisper-1\nbackend: whisper\nparameters:\n  model: whisper-base.en\n```\n\nEl modelo whisper-base (~142 MB) se descarga automáticamente en la primera llamada. Pruebe con:\n\n```bash\ncurl http:\u002F\u002F127.0.0.1:8080\u002Fv1\u002Faudio\u002Ftranscriptions \\\n  -H 'Authorization: Bearer su-clave-secreta' \\\n  -F file=@audio.mp3 -F model=whisper-1\n```",{"title":78,"body":79},"Configurar el reverse proxy Nginx y SSL","Cree `\u002Fetc\u002Fnginx\u002Fsites-available\u002Flocalai`:\n\n```nginx\nserver {\n  listen 443 ssl;\n  server_name ia.su-dominio.com;\n  ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Fia.su-dominio.com\u002Ffullchain.pem;\n  ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fia.su-dominio.com\u002Fprivkey.pem;\n  location \u002F {\n    proxy_pass http:\u002F\u002F127.0.0.1:8080;\n    proxy_read_timeout 300s;\n    proxy_send_timeout 300s;\n  }\n}\n```\n\nObtenga el certificado con `certbot certonly --nginx -d ia.su-dominio.com`, luego `nginx -s reload`. El timeout elevado es necesario para las inferencias largas en CPU.",{"title":81,"body":82},"Probar la API vía HTTPS","Valide el despliegue completo:\n\n```bash\ncurl https:\u002F\u002Fia.su-dominio.com\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H 'Authorization: Bearer su-clave-secreta' \\\n  -H 'Content-Type: application\u002Fjson' \\\n  -d '{\"model\": \"mistral-7b-instruct-v0.2.Q4_K_M\", \"messages\": [{\"role\": \"user\", \"content\": \"Hola\"}]}'\n```\n\nUna respuesta JSON con un campo `choices` confirma que el despliegue funciona correctamente.",{"type":84,"body":85},"tip","Active solo los backends que necesite. Cargar a la vez un modelo de chat, un modelo de embeddings y Stable Diffusion en un VPS CPU satura la RAM y hunde el rendimiento. Defina `SINGLE_ACTIVE_BACKEND=true` para mantener un único backend residente a la vez, y reserve la generación de imágenes a un VPS GPU si se convierte en un uso habitual.",{"type":39,"title":87,"body":88},"Elegir y cargar sus modelos","LocalAI soporta varios formatos, pero el formato **GGUF** (producido por llama.cpp) es el estándar recomendado para CPU: está cuantizado (reduce el uso de RAM), es portable y está bien soportado por la galería.\n\n**GGUF vs otros formatos**: los formatos GGUF son los únicos cargables directamente vía `llama.cpp` sin conversión previa. Los modelos Diffusers (imágenes) y ONNX (embeddings ligeros) tienen sus propios backends y no son intercambiables con los GGUF.\n\n**Galería vs descarga manual**: la galería es la opción más sencilla — descarga el GGUF y genera el YAML de configuración automáticamente. Para un modelo no listado en la galería (un modelo ajustado, un GGUF personalizado), deposite el archivo en `.\u002Fmodels\u002F` y cree el YAML manualmente:\n\n```yaml\nname: mi-modelo\nbackend: llama\nparameters:\n  model: mi-modelo.Q4_K_M.gguf\ncontext_size: 4096\n```\n\n**Listar los modelos cargados**:\n\n```bash\ncurl https:\u002F\u002Fia.su-dominio.com\u002Fv1\u002Fmodels \\\n  -H 'Authorization: Bearer su-clave-secreta'\n```\n\nLos modelos cuyo YAML está presente en `.\u002Fconfig\u002F` aparecen en la lista, incluso si su GGUF aún no se ha descargado — en ese caso, la primera llamada desencadena la descarga.",{"type":39,"title":90,"body":91},"Conectar sus aplicaciones a LocalAI","Al ser LocalAI compatible con la API de OpenAI, migrar una aplicación existente se reduce a dos cambios: la URL base y la clave.\n\n**Python (openai SDK)**:\n\n```python\nimport openai\n\nclient = openai.OpenAI(\n    base_url=\"https:\u002F\u002Fia.su-dominio.com\u002Fv1\",\n    api_key=\"su-clave-secreta\"\n)\n\nresponse = client.chat.completions.create(\n    model=\"mistral-7b-instruct-v0.2.Q4_K_M\",\n    messages=[{\"role\": \"user\", \"content\": \"Resume este texto: ...\"}]\n)\nprint(response.choices[0].message.content)\n```\n\n**Node.js (openai SDK)**:\n\n```javascript\nimport OpenAI from 'openai';\n\nconst client = new OpenAI({\n  baseURL: 'https:\u002F\u002Fia.su-dominio.com\u002Fv1',\n  apiKey: 'su-clave-secreta'\n});\n\nconst completion = await client.chat.completions.create({\n  model: 'mistral-7b-instruct-v0.2.Q4_K_M',\n  messages: [{ role: 'user', content: 'Hola' }]\n});\nconsole.log(completion.choices[0].message.content);\n```\n\n**curl directo**:\n\n```bash\ncurl https:\u002F\u002Fia.su-dominio.com\u002Fv1\u002Fembeddings \\\n  -H 'Authorization: Bearer su-clave-secreta' \\\n  -H 'Content-Type: application\u002Fjson' \\\n  -d '{\"model\": \"all-minilm\", \"input\": \"Texto a vectorizar\"}'\n```\n\nLas bibliotecas LangChain, LlamaIndex y la mayoría de los frameworks RAG aceptan un parámetro `openai_api_base` o `base_url` — el cambio es idéntico.",{"type":39,"title":93,"body":94},"Solución de problemas: errores comunes","**`404 model not found` o `model not loaded`**: el nombre de modelo pasado en `model:` no coincide con ningún manifiesto YAML en `.\u002Fconfig\u002F`. Compruebe con `GET \u002Fv1\u002Fmodels`: el nombre mostrado debe usarse exactamente tal cual. Si el modelo no aparece, verifique que el YAML esté en la carpeta montada y reinicie el contenedor.\n\n**Inferencia muy lenta o `killed` (OOM)**: el modelo supera la RAM disponible. Un modelo 7B Q4 requiere aproximadamente 6 GB de RAM libre en el momento de la carga. Compruebe con `docker stats localai` durante una inferencia. Soluciones: pasar a una cuantización más ligera (Q3_K_S o Q2_K), reducir el `context_size` en el YAML, o actualizar el VPS.\n\n**`SINGLE_ACTIVE_BACKEND error`**: LocalAI está configurado con `SINGLE_ACTIVE_BACKEND=true` y una petición intenta cargar un segundo modelo mientras otro está activo. Es el comportamiento esperado en CPU. Espere a que termine la primera inferencia, o desactive la opción si su VPS tiene suficiente RAM para varios modelos simultáneos.\n\n**GPU no detectada (`CUDA device not found`)**: verifique que está usando la imagen `latest-gpu-nvidia-cuda-12`, que el driver NVIDIA está instalado en el host (`nvidia-smi`), y que el contenedor tiene acceso a la GPU (`gpus: all` en `docker-compose.yaml` bajo la clave `deploy:`). Sin estas tres condiciones, LocalAI vuelve silenciosamente a CPU.\n\n**`401 Unauthorized`**: la variable `API_KEY` está definida en `docker-compose.yaml` pero la cabecera `Authorization: Bearer \u003Cclave>` está ausente o incorrecta en la llamada. Todos los endpoints, incluido `\u002Fv1\u002Fmodels`, requieren la cabecera en cuanto `API_KEY` está establecido.",{"type":96,"title":97,"headers":98,"rows":102},"comparison","LocalAI frente a Ollama frente a vLLM: ¿qué servidor LLM elegir?",[5,99,100,101],"LocalAI","Ollama","vLLM",[103,107,111,115,118,121,126,131,135],[104,105,105,106],"GPU requerida","No (CPU por defecto)","Sí (GPU obligatoria)",[108,109,110,109],"API compatible con OpenAI","Sí (completa)","Sí (parcial)",[112,113,114,114],"Generación de imágenes","Sí (Stable Diffusion)","No",[116,117,114,114],"Transcripción de audio","Sí (Whisper)",[119,120,120,120],"Embeddings nativos","Sí",[122,123,124,125],"Biblioteca de modelos","Más de 200 modelos GGUF","Lista de modelos seleccionados","Modelos HuggingFace",[127,128,129,130],"Rendimiento (tokens\u002Fs, 7B)","~10-20 CPU \u002F ~80+ GPU","~15-25 CPU \u002F ~80+ GPU","~150+ solo GPU",[132,133,133,134],"RAM (modelo 7B Q4)","~6 GB","~14 GB (FP16)",[136,137,138,139],"Caso de uso principal","API unificada multimodal","Inferencia de texto simple","Producción de alto rendimiento","Una API de IA completa y privada en un VPS Cloud ServOrbit","Con un VPS Cloud de ServOrbit y Docker preconfigurado, despliegue LocalAI como alternativa privada a la API de OpenAI. Elija una configuración CPU o GPU según sus necesidades de chat, embeddings o imágenes.","Iniciar mi VPS Cloud","\u002Fvps-cloud",[145,162,180],{"id":23,"slug":146,"slugs":147,"title":151,"excerpt":152,"readTime":153,"views":23,"isPinned":19,"noindex":19,"publishedAt":154,"updatedAt":155,"category":156,"categories":157,"featuredImage":30,"bgImage":31,"posterImage":159,"relatedSolution":160},"como-alojar-open-webui-en-un-vps",{"fr":148,"en":149,"ar":150,"es":146},"heberger-open-webui","how-to-host-open-webui-on-a-vps","كيفية-استضافة-open-webui-على-خادم-vps","Cómo alojar Open WebUI en un VPS","Guía completa para desplegar Open WebUI en su propio VPS: conserve el control de sus datos, evite pagar API en la nube y acceda a sus LLM desde el navegador.",9,"2026-06-01T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[158],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-open-webui-poster.svg",{"categorySlug":34,"appSlug":161},"open-webui",{"id":163,"slug":164,"slugs":165,"title":169,"excerpt":170,"readTime":171,"views":23,"isPinned":19,"noindex":19,"publishedAt":172,"updatedAt":173,"category":174,"categories":175,"featuredImage":30,"bgImage":31,"posterImage":177,"relatedSolution":178},2,"desplegar-dify-en-un-vps",{"fr":166,"en":167,"ar":168,"es":164},"deployer-dify-vps","deploying-dify-on-a-vps-ai-workflows-under-control","نشر-dify-على-vps-سير-عمل-الذكاء-الاصطناعي-تحت-السيطرة","Desplegar Dify en un VPS: guía completa de instalación y plugins","Instala Dify en un VPS de ServOrbit: requisitos, Docker Compose, plugins offline, límites de la instalación Docker, copia antes de actualizar y solución de errores.",15,"2026-02-11T00:00:00+00:00","2026-10-29T03:10:23+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[176],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fdeployer-dify-vps-poster.svg",{"categorySlug":25,"appSlug":179},"dify",{"id":181,"slug":182,"slugs":183,"title":187,"excerpt":188,"readTime":189,"views":23,"isPinned":19,"noindex":190,"publishedAt":191,"updatedAt":192,"category":193,"categories":194,"featuredImage":30,"bgImage":31,"posterImage":196,"relatedSolution":197},121,"alojar-openclaw-en-un-vps",{"fr":184,"en":185,"ar":186,"es":182},"heberger-openclaw-vps","hosting-openclaw-on-a-vps","استضافة-openclaw-على-خادم-vps","Alojar OpenClaw en un VPS","Aloje OpenClaw en su VPS: el asistente de IA personal open source accesible desde WhatsApp, Telegram, Discord y más de 50 apps de mensajería. Docker, LLM y HTTPS.",4,true,"2026-02-23T00:00:00+00:00","2026-11-09T20:55:19+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[195],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-openclaw-vps-poster.svg",{"categorySlug":34,"appSlug":198},"openclaw",1794270569025]