[{"data":1,"prerenderedAt":201},["ShallowReactive",2],{"seo-verification":3,"blog-alojar-litellm-en-un-vps-pasarela-llm-privada-ma-es":6,"promo-bar-likely":200},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-alojar-litellm-en-un-vps-pasarela-llm-privada-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":133,"ctaBody":134,"ctaButton":135,"ctaUrl":136,"relatedPosts":137},156,"alojar-litellm-en-un-vps-pasarela-llm-privada",{"fr":12,"en":13,"ar":14,"es":10},"self-host-litellm-vps","self-host-litellm-on-a-vps-your-private-llm-api-gateway","استضف-litellm-ذاتيا-على-vps-بوابة-api-خاصة-لنماذج-llm","Alojar LiteLLM en un VPS: su pasarela de API LLM privada","Despliegue LiteLLM en un VPS ServOrbit: pasarela de API compatible con OpenAI hacia Ollama, Anthropic, Azure y 100+ LLM, con control del gasto y límites por clave.",9,3,false,"2026-01-21T00:00:00+00:00","2026-11-09T20:55:12+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Autoalojamiento","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-litellm-vps-poster.svg",{"categorySlug":34,"appSlug":35},"inteligencia-artificial","litellm","Su aplicación llama a un único endpoint. LiteLLM decide qué modelo procesa la petición: su Ollama local, Anthropic Claude, GPT-4 o cualquiera de los más de 100 proveedores restantes. Habla la API de OpenAI: nunca hace falta modificar ningún SDK. Autoalojado en un VPS, añade la limitación de tasa, topes de presupuesto por clave de API y un panel analítico integrado, lo justo para dar a varios equipos acceso a la IA sin temer que los costes se disparen.",[38,42,52,55,83,86,101,104,112,115,124,128,130],{"type":39,"title":40,"body":41},"h2","Por qué LiteLLM es la capa que falta en las pilas de IA autoalojadas","Ollama es excelente para ejecutar modelos en local. Open WebUI lo viste con una interfaz de chat. Pero en cuanto empieza a construir aplicaciones —y no solo a conversar— necesita un intermediario: un proxy que normalice la superficie de API, siga los costes por proyecto y le permita cambiar de modelo sin tocar el código de la aplicación. Ese es precisamente el papel de LiteLLM. Se interpone entre su aplicación y cualquier backend LLM, exponiendo un único endpoint compatible con OpenAI. Su código no cambia, tanto si dirige las peticiones a Llama 3.1 en Ollama como a Claude 3.5 Haiku o a GPT-4o.",{"type":43,"title":44,"items":45},"ul","Lo que LiteLLM le aporta desde el primer momento",[46,47,48,49,50,51],"API unificada y compatible con OpenAI: funciona con todos los SDK, bibliotecas y herramientas que apuntan a la API de OpenAI.","Más de 100 integraciones de proveedores: Ollama, Anthropic, OpenAI, Azure OpenAI, Mistral, Cohere, Bedrock y muchos otros.","Claves de API virtuales con límites de gasto y de tasa por clave: reparta claves entre los equipos y ponga topes a los costes mensuales.","Panel integrado en \u002Fui con análisis del gasto en tiempo real, desglose por modelo y registros de las peticiones.","Reparto de carga y conmutación automática entre varios endpoints de proveedores o réplicas de modelos.","Licencia Apache 2.0: sin telemetría, sin envío de información al exterior, totalmente compatible con entornos air-gap cuando se asocia a Ollama.",{"type":39,"title":53,"body":54},"Requisitos","Al menos 1 GB de RAM y Ubuntu 22.04. Docker y el plugin Compose instalados. El puerto 4000 abierto, o un reverse proxy Caddy\u002FNginx para el HTTPS. Eso es todo: LiteLLM es en sí mismo un proxy Python que reclama unos 256 MB; PostgreSQL absorbe la mayor parte del presupuesto de RAM restante. Para equipos que generan tráfico concurrente, 2 GB resultan más cómodos.",{"type":56,"title":57,"steps":58},"steps","Desplegar LiteLLM en un VPS",[59,62,65,68,71,74,77,80],{"title":60,"body":61},"Aprovisionar el VPS","Contrate un VPS Solo (2 vCPU, 4 GB, Ubuntu 22.04): LiteLLM se conforma con 1 GB y el plan más pequeño del catálogo sirve el doble. Conéctese por SSH e instale Docker: `curl -fsSL https:\u002F\u002Fget.docker.com | sh`. El plugin Compose viene incluido.",{"title":63,"body":64},"Generar los secretos","Ejecute `openssl rand -hex 32` para generar LITELLM_MASTER_KEY: es la que desbloquea el panel y todos los endpoints de API de administración. Cree `\u002Fopt\u002Flitellm\u002F.env` con: `LITELLM_MASTER_KEY`, `UI_USERNAME`, `UI_PASSWORD`, `DB_NAME=litellm`, `DB_USER=litellm`, `DB_PASSWORD=\u003Cstrong-password>`.",{"title":66,"body":67},"Redactar docker-compose.yml","Cree `\u002Fopt\u002Flitellm\u002Fdocker-compose.yml` con dos servicios: `db` (postgres:16-alpine, variables de entorno procedentes del .env, volumen litellm_db) y `litellm` (imagen ghcr.io\u002Fberriai\u002Flitellm fijada a una versión explícita y a su resumen `@sha256:`, nunca a `main-latest` —véase «Cadena de suministro» más abajo—, puerto 4000:4000, depends_on db, DATABASE_URL + LITELLM_MASTER_KEY + UI_USERNAME + UI_PASSWORD, volumen litellm_config:\u002Fapp\u002Fdata). Ejecute `docker compose up -d`.",{"title":69,"body":70},"Abrir el panel","Vaya a `http:\u002F\u002F\u003Cvps-ip>:4000\u002Fui` y conéctese con sus UI_USERNAME \u002F UI_PASSWORD. Llegará al panel de LiteLLM. Entre en Models para añadir su primer proveedor. Para una instancia de Ollama local en el mismo VPS, defina el nombre del modelo como `ollama\u002Fllama3.1` y la API base como `http:\u002F\u002Fhost.docker.internal:11434`. Para Anthropic, pegue su clave de API y añada `anthropic\u002Fclaude-3-5-haiku-20241022`.",{"title":72,"body":73},"Probar la pasarela","Desde su puesto de trabajo, pruebe: `curl http:\u002F\u002F\u003Cvps-ip>:4000\u002Fv1\u002Fchat\u002Fcompletions -H \"Authorization: Bearer \u003CLITELLM_MASTER_KEY>\" -H 'Content-Type: application\u002Fjson' -d '{\"model\": \"ollama\u002Fllama3.1\", \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}]}'`. Debería recibir una respuesta en streaming, encaminada por LiteLLM hacia su Ollama.",{"title":75,"body":76},"Repartir claves de API entre los equipos","En el panel, dentro de API Keys, haga clic en New Key. Póngale una descripción (por ejemplo «frontend-team»), defina `max_budget: 50` (USD\u002Fmes) y un `tpm_limit` opcional. Comparta esa clave con el equipo: apuntará su SDK de OpenAI a `http:\u002F\u002F\u003Cvps-ip>:4000` y usará esa clave. El gasto se sigue por clave en el panel.",{"title":78,"body":79},"Añadir el HTTPS con Caddy","Instale Caddy: `apt install -y caddy`. Edite `\u002Fetc\u002Fcaddy\u002FCaddyfile`: `llm.su-dominio.com { reverse_proxy localhost:4000 }`. Recargue: `systemctl reload caddy`. Cierre el puerto 4000 en su firewall: todo el tráfico pasa ya por el 443 con TLS automático.",{"title":81,"body":82},"Conectarse por primera vez","Abra la interfaz de administración en \u002Fui: LiteLLM muestra un formulario de usuario y contraseña. Introduzca admin y la contraseña facilitada, y después cree sus claves virtuales desde el panel.",{"type":39,"title":84,"body":85},"Cadena de suministro: fijar, verificar y rotar las claves","Una pasarela de LLM guarda las claves de todos sus proveedores, que es justo lo que busca un ladrón de credenciales. El hilo de aviso abierto en el repositorio de LiteLLM (issue 47826) afirma que las ruedas de la versión 1.107.0 publicadas en PyPI incluían tres archivos ajenos al proyecto, `cook.pth`, `cook.py` y `sitecustomize.py`, depositados en la raíz de `site-packages`: un ladrón de credenciales y un cargador de ejecución de código, lanzados en cada arranque de Python. PyPI puso esa versión en cuarentena. Los mantenedores indican haber retirado las imágenes Docker maliciosas, y su informe del incidente describe un secuestro de su canal de publicación mediante tokens de desarrolladores. El informe inicial decía no haber inspeccionado las imágenes; una actualización posterior del mismo hilo encontró los tres archivos en la imagen principal que revisó y recomienda tratar todas las imágenes de esa versión como comprometidas. Esta guía no puede saber qué descargó usted en una fecha dada: las cuatro comprobaciones siguientes lo determinan en su propio servidor.",{"type":56,"title":87,"steps":88},"Saber qué se ejecuta de verdad en su servidor",[89,92,95,98],{"title":90,"body":91},"Leer el resumen de la imagen","Una etiqueta como `main-latest` no dice nada de lo que se ejecuta. Ejecute `docker compose images` y luego `docker image inspect --format '{{index .RepoDigests 0}}' ghcr.io\u002Fberriai\u002Flitellm:main-latest` (sustitúyala por la referencia de su archivo compose). Anote el `sha256:` obtenido y compárelo con el de una versión cuya procedencia haya verificado.",{"title":93,"body":94},"Buscar los archivos citados, sin lanzar Python","En un entorno sospechoso, cada arranque de Python vuelve a ejecutar el código malicioso, `pip` incluido. Busque con una herramienta que no lo lance: `docker compose exec litellm find \u002F -name 'cook.pth' -o -name 'cook.py' -o -name 'sitecustomize.py' -o -name 'litellm-1.107.0.dist-info' 2>\u002Fdev\u002Fnull` (si la imagen incluye `find`). Un `sitecustomize.py` aislado en otra parte del sistema puede ser legítimo; lo que debe alarmar es un `cook.pth` a su lado en `site-packages`, o una carpeta `litellm-1.107.0.dist-info`. Encontrar esos archivos confirma la exposición; no encontrar nada no prueba que el entorno esté limpio.",{"title":96,"body":97},"Leer la versión instalada","Cuando nada resulte sospechoso, `pip show litellm` (en el entorno virtual de una instalación directa) o `docker compose exec litellm pip show litellm` indica la versión. Si es la 1.107.0, o si duda de una imagen descargada en aquel periodo, pase de inmediato a la rotación de claves más abajo.",{"title":99,"body":100},"Buscar rastros de ejecución","El informe menciona un bloqueo `\u002Ftmp\u002Fremote_code_loader.lock`, un proceso `python` huérfano cuyo directorio actual es `\u002F`, y un archivo testigo `\u002Ftmp\u002F.pc_once_*` escrito solo tras un envío logrado. Su ausencia no prueba nada: un contenedor recreado borra `\u002Ftmp`. Úselo como indicio, no como veredicto.",{"type":39,"title":102,"body":103},"Fijar por resumen en lugar de por etiqueta","Una etiqueta es un puntero que el editor puede mover; el resumen `@sha256:` designa unos bytes concretos. En su `docker-compose.yml`, escriba `image: ghcr.io\u002Fberriai\u002Flitellm:\u003Cversión>@sha256:\u003Cresumen>` con una versión explícita publicada antes del incidente o verificada desde entonces, nunca `latest`, `main-latest` ni `main-stable`. Los mantenedores recomiendan fijar una versión explícita, y el hilo de la issue aconseja el resumen. Tenga presente el límite: un resumen prueba que siempre descarga los mismos bytes, no quién los construyó. Las imágenes de la 1.107.0 habrían podido fijarse sin ninguna alerta. Fijar congela, pues, una decisión que usted ha tomado; no sustituye el hecho de tomarla.",{"type":43,"title":105,"items":106},"Actualizar sin sorpresas",[107,108,109,110,111],"Lea las notas de la versión y el estado del hilo de seguridad antes de cambiar de versión, en lugar de dejar que `docker compose pull` siga una etiqueta.","Obtenga el nuevo resumen desde una máquina de pruebas, arranque la pasarela sin claves reales, compruebe su comportamiento y solo entonces lleve el resumen a producción.","Cuando el editor publique atestaciones de procedencia, verifíquelas: indican de dónde viene una imagen, algo que un simple resumen no dice.","Conserve el resumen anterior en su repositorio de configuración: volver atrás pasa a ser un cambio de una línea.","Tras cualquier alerta de seguridad, reconstruya contenedores y entornos virtuales desde cero en lugar de limpiar sobre el sitio.",{"type":39,"title":113,"body":114},"Si la 1.107.0 llegó a ejecutarse: rotar todas las claves","Según el informe, si esa versión arrancó en un servidor con salida a Internet, hay que suponer que el envío tuvo éxito. El código descrito lee las variables de entorno de los procesos legibles y, cuando `DATABASE_URL` está definida, extrae las tablas donde la pasarela guarda las credenciales y los modelos de sus proveedores, es decir, todas las claves de origen que posee. La rotación abarca, por tanto, cada secreto que el servidor podía alcanzar, no solo la clave maestra. Revoque primero en el proveedor, genere después la clave de reemplazo y revise el consumo del último mes para detectar un uso que no reconozca.",{"type":43,"title":116,"items":117},"Qué hay que renovar",[118,119,120,121,122,123],"Todas las claves de proveedores guardadas en la pasarela: Anthropic, OpenAI, Azure, Mistral, Bedrock y cada una de las demás.","`LITELLM_MASTER_KEY` y todas las claves virtuales entregadas a los equipos.","La contraseña de la base de datos (`DB_PASSWORD` y el `DATABASE_URL` que la incluye), así como `UI_PASSWORD`.","Cualquier secreto presente en el entorno de un proceso del servidor: tokens de API, contraseñas de servicios vecinos, archivos `.env`.","Las claves SSH, tokens de Git y credenciales de nube accesibles desde el VPS, si el servidor llevaba alguna.","Tras la rotación, reconstruya el VPS o, como mínimo, los contenedores desde una imagen verificada: copiar secretos nuevos en un servidor comprometido los expone de nuevo.",{"type":125,"title":126,"body":127},"tip","Vigilar las salidas de red","El informe describe un envío a `www.litellm.dev`, un dominio que no es el del proyecto, y una lectura cada hora de un repositorio de GitHub de terceros usado como buzón de nuevas instrucciones. Los propios mantenedores consideran que la restricción que cuenta es la de nivel de red, porque el código malicioso ignora la configuración de la aplicación. En un VPS, deniegue el tráfico saliente por defecto y autorice solo los puntos de acceso de sus proveedores; si su cortafuegos filtra por dirección y no por nombre, coloque un proxy de salida con lista de permitidos. Si no, registre las resoluciones DNS del servidor y alerte ante cualquier nombre que la pasarela no tenga motivo para llamar.",{"type":125,"body":129},"Asocie LiteLLM a Ollama en el mismo VPS para obtener una pila de IA totalmente aislada (air-gap). Ollama se encarga de la inferencia de los modelos; LiteLLM añade la capa de pasarela: encaminamiento, limitación de tasa y seguimiento del consumo. Para las cargas de trabajo sensibles en materia de confidencialidad (jurídico, finanzas, sanidad), esto significa que ningún dato sale de su infraestructura.",{"type":125,"title":131,"body":132},"La documentación oficial","Para la configuración avanzada y las opciones propias de la herramienta, consulte la \u003Ca href=\"https:\u002F\u002Fdocs.litellm.ai\" target=\"_blank\" rel=\"noopener noreferrer\">documentación oficial de LiteLLM\u003C\u002Fa>. Esta guía cubre la puesta en línea en un VPS; la documentación del editor sigue siendo la referencia para los ajustes finos, las actualizaciones mayores y los casos de uso específicos.","Despliegue su pasarela LLM privada","Autoaloje LiteLLM en un VPS ServOrbit — dirija las peticiones entre Ollama, Anthropic y más de 100 proveedores desde un único endpoint compatible con OpenAI, con control de presupuesto por clave.","Desplegar LiteLLM","\u002Fapplications\u002Finteligencia-artificial\u002Flitellm",[138,160,178],{"id":139,"slug":140,"slugs":141,"title":145,"excerpt":146,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":147,"updatedAt":148,"category":149,"categories":155,"featuredImage":30,"bgImage":31,"posterImage":157,"relatedSolution":158},11,"como-alojar-ollama-en-un-vps",{"fr":142,"en":143,"ar":144,"es":140},"heberger-ollama-vps","how-to-host-ollama-on-a-vps","كيفية-استضافة-ollama-على-خادم-vps","Alojar Ollama en un VPS: guía operativa avanzada","Ollama avanzado en VPS: gestión de modelos, reverse proxy nginx, seguridad de la API, cuantización Q4_K_M\u002FQ8, CVE-2026-45672 en Open WebUI y acoplamiento seguro.","2026-06-09T00:00:00+00:00","2026-11-04T16:30:24+00:00",{"id":150,"name":151,"slug":152,"color":153,"icon":154},1,"Inteligencia Artificial","intelligence-artificielle","bg-purple-500\u002F10 text-purple-400","ia",[156],{"id":150,"name":151,"slug":152,"color":153,"icon":154},"\u002Fblog\u002Fcovers\u002Fheberger-ollama-vps-poster.svg",{"categorySlug":34,"appSlug":159},"ollama",{"id":161,"slug":162,"slugs":163,"title":167,"excerpt":168,"readTime":169,"views":150,"isPinned":19,"noindex":19,"publishedAt":170,"updatedAt":171,"category":172,"categories":173,"featuredImage":30,"bgImage":31,"posterImage":175,"relatedSolution":176},2,"desplegar-dify-en-un-vps",{"fr":164,"en":165,"ar":166,"es":162},"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":150,"name":151,"slug":152,"color":153,"icon":154},[174],{"id":150,"name":151,"slug":152,"color":153,"icon":154},"\u002Fblog\u002Fcovers\u002Fdeployer-dify-vps-poster.svg",{"categorySlug":152,"appSlug":177},"dify",{"id":18,"slug":179,"slugs":180,"title":184,"excerpt":185,"readTime":186,"views":187,"isPinned":19,"noindex":19,"publishedAt":188,"updatedAt":189,"category":190,"categories":194,"featuredImage":30,"bgImage":31,"posterImage":196,"relatedSolution":197},"instalar-n8n-en-vps-con-docker",{"fr":181,"en":182,"ar":183,"es":179},"installer-n8n-vps","install-n8n-on-vps-with-docker-complete-2026-guide","تثبيت-n8n-على-vps-مع-docker-دليل-شامل-2026","Instalar n8n en un VPS con Docker: guía completa 2026","Despliegue n8n en VPS con Docker, reverse proxy y HTTPS. Crash V8, 502 nginx, migración de npm a Docker y seguridad de ejecuciones persistidas (advisory agosto 2026).",19,4,"2026-06-05T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":161,"name":191,"slug":192,"color":193,"icon":192},"Automatización","automatisation","bg-brand-action\u002F10 text-brand-action",[195],{"id":161,"name":191,"slug":192,"color":193,"icon":192},"\u002Fblog\u002Fcovers\u002Finstaller-n8n-vps-poster.svg",{"categorySlug":198,"appSlug":199},"automatizacion","n8n",true,1794270533971]