[{"data":1,"prerenderedAt":223},["ShallowReactive",2],{"seo-verification":3,"blog-alojar-directus-en-un-vps-ma-es":6,"promo-bar-likely":222},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-alojar-directus-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":162,"ctaBody":163,"ctaButton":164,"ctaUrl":165,"relatedPosts":166},63,"alojar-directus-en-un-vps",{"fr":12,"en":13,"ar":14,"es":10},"heberger-directus-vps","hosting-directus-on-a-vps","استضافة-directus-على-خادم-vps","Alojar Directus en un VPS","Aloje Directus en su VPS: headless CMS y data platform open source sobre su base SQL. Guía de Docker, Postgres, reverse proxy y SSL.",11,0,false,"2026-04-18T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},6,"Bases de datos","bases-de-donnees","bg-teal-500\u002F10 text-teal-400","database",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-directus-vps-poster.svg",{"categorySlug":34,"appSlug":35},"cms-sitios-web","directus","Directus convierte cualquier base SQL en una API REST y GraphQL instantánea, con una interfaz de administración sin código por encima. Es un headless CMS y una data platform completa, perfecta para autoalojar en un VPS y pilotar el contenido de sus sitios y aplicaciones. Veamos cómo desplegarlo con PostgreSQL, Docker y un certificado SSL.",[38,42,52,55,77,80,83,86,95,113,116,144,147,157,159],{"type":39,"title":40,"body":41},"h2","Por qué autoalojar Directus en un VPS","Directus se conecta a su base de datos existente (PostgreSQL, MySQL, SQLite, MariaDB) sin imponer su propio esquema: introspecciona sus tablas y genera la API y la interfaz de administración por encima. Al autoalojarlo en un VPS, evita las tarifas por usuario de la oferta Cloud oficial y mantiene sus contenidos, sus medios y su base SQL en su propia infraestructura. Es una decisión estructurante para las agencias que entregan varios sitios: un único Directus puede servir de trastienda a varios front-ends (Nuxt, Next, móvil). El control de la base, de las extensiones y de los webhooks le permite integrar Directus en cualquier pipeline de datos sin depender de un proveedor externo, sin que ningún servicio de terceros se interponga entre sus front-ends y sus datos.",{"type":43,"title":44,"items":45},"ul","Las ventajas concretas del self-hosting de Directus",[46,47,48,49,50,51],"API REST y GraphQL generadas automáticamente a partir de su esquema SQL, sin escribir código.","Interfaz de administración no-code para modelar el contenido y gestionar los roles y los permisos granulares.","Compatible con una base SQL existente: puede exponerla sin migrarla ni desnaturalizarla.","Gestión de medios, transformaciones de imágenes al vuelo y almacenamiento local o S3, a su elección.","Flows y webhooks integrados para automatizar procesos (notificaciones, sincronizaciones).","Mutualización: un solo VPS con Directus puede alimentar varios sitios y aplicaciones front-end.",{"type":39,"title":53,"body":54},"Requisitos de hardware y software","Directus es una aplicación Node.js que se apoya en una base de datos externa. Cuente con 2 GB de RAM como mínimo para ejecutar cómodamente Directus y PostgreSQL en el mismo VPS; se recomiendan 4 GB en producción, con transformaciones de imágenes y varios administradores simultáneos. Uno o dos vCPU bastan para empezar. Prevea una caché Redis (opcional, pero aconsejable para las sesiones y el rate limiting) y un volumen de 30 a 60 GB SSD según su biblioteca de medios. Necesitará Docker y Docker Compose, un dominio que apunte al VPS y una clave secreta robusta para `SECRET` y el hash de los tokens. Postgres sigue siendo la base recomendada para las funcionalidades avanzadas.",{"type":56,"title":57,"steps":58},"steps","Desplegar Directus paso a paso",[59,62,65,68,71,74],{"title":60,"body":61},"Aprovisionar el VPS y Docker","Tras conectarse por SSH, instale Docker y Docker Compose. Cree un registro DNS A para `cms.mondomaine.com` hacia la IP del VPS. Abra únicamente los puertos 80 y 443 en el firewall (`ufw allow 80,443\u002Ftcp`).",{"title":63,"body":64},"Definir el stack en docker-compose.yml","Declare tres servicios: `database` (imagen `postgres:16` con un volumen persistente), `cache` (`redis`) y `directus` (`directus\u002Fdirectus`). Conecte Directus a Postgres mediante las variables `DB_CLIENT=pg`, `DB_HOST=database`, `DB_DATABASE`, `DB_USER`, `DB_PASSWORD`.",{"title":66,"body":67},"Configurar las variables de entorno","Rellene `KEY` y `SECRET` con cadenas aleatorias (`openssl rand -hex 32`), defina `ADMIN_EMAIL` y `ADMIN_PASSWORD` para la primera cuenta, y `PUBLIC_URL=https:\u002F\u002Fcms.mondomaine.com` para que los enlaces y las subidas sean correctos.",{"title":69,"body":70},"Arrancar e inicializar la base de datos","Ejecute `docker compose up -d`. En el primer arranque, Directus crea automáticamente las tablas del sistema y la cuenta de administrador. Siga la inicialización con `docker compose logs -f directus`.",{"title":72,"body":73},"Conectar el reverse proxy y el TLS","Coloque Caddy o Traefik delante de Directus para gestionar Let's Encrypt. Con Traefik, añada las etiquetas de enrutado en el servicio `directus` y el certresolver ACME. Compruebe que `PUBLIC_URL` coincide exactamente con el dominio HTTPS para evitar problemas de CORS y de subidas.",{"title":75,"body":76},"Proteger y respaldar","Restrinja los orígenes CORS a los dominios de sus front-ends, desactive el registro público si no le sirve y, después, programe un `pg_dump` diario más una copia de la carpeta `uploads` hacia un almacenamiento remoto.",{"type":78,"body":79},"tip","Para servir las imágenes con buen rendimiento, active el almacenamiento de los medios en un bucket compatible con S3 en lugar del disco local, y ajuste `ASSETS_CACHE_TTL`: esta variable fija la duración de la caché en el navegador (el valor `max-age` de la cabecera `Cache-Control`, 30 días por defecto); no almacena las transformaciones en caché en el servidor. Coloque un CDN delante de Directus para descargar al VPS de las peticiones de medios. Después, acote las transformaciones al vuelo: `ASSETS_TRANSFORM_MAX_OPERATIONS` limita el número de operaciones por petición (5 por defecto, sin contar los preajustes guardados), `ASSETS_TRANSFORM_IMAGE_MAX_DIMENSION` el tamaño en píxeles (6000 por defecto) y `ASSETS_TRANSFORM_MAX_CONCURRENT` el número de transformaciones simultáneas (25 por defecto).",{"type":39,"title":81,"body":82},"Servir archivos desde S3: qué cambia para la memoria","Cuando el almacenamiento de medios apunta a un bucket compatible con S3, Directus no redirige al visitante al bucket: la petición `\u002Fassets\u002FID_ARCHIVO` pasa por el proceso Node, que lee el objeto en el proveedor y lo retransmite al cliente en flujo. El controlador se configura con variables: `STORAGE_LOCATIONS=s3`, después `STORAGE_S3_DRIVER=s3`, `STORAGE_S3_KEY`, `STORAGE_S3_SECRET`, `STORAGE_S3_BUCKET`, `STORAGE_S3_REGION` y, para un almacenamiento compatible como MinIO, `STORAGE_S3_ENDPOINT` con `STORAGE_S3_FORCE_PATH_STYLE=true`. En la práctica, la memoria del contenedor depende del número de descargas simultáneas y de la velocidad de cada cliente, no solo del tamaño de la base. Es en este camino donde algunos usuarios señalan un consumo que no vuelve a bajar, sobre todo con vídeos o archivos voluminosos.",{"type":39,"title":84,"body":85},"Solución de problemas: la memoria sube hasta que el contenedor se detiene","El síntoma se describe en el ticket 26206 del repositorio directus\u002Fdirectus, abierto en noviembre de 2025 sobre una instancia Docker autoalojada con la versión 11.13.2 y PostgreSQL 16: la memoria del pod aumenta de forma constante hasta el límite fijado y después el pod es detenido y se reinicia. La pendiente es menor por la noche y los fines de semana, lo que apunta al tráfico de archivos y no a una fuga en reposo. En el momento de redactar (finales de octubre de 2026), el ticket sigue abierto, etiquetado como Bug, Performance y AWS S3. Ningún miembro del equipo de Directus ha confirmado allí una causa: todo lo que sigue son hipótesis de participantes, no un diagnóstico del mantenimiento.",{"type":43,"title":87,"items":88},"Lo que señalan los participantes del ticket",[89,90,91,92,93,94],"**Archivos pesados** — el problema se reproduce con un script de carga k6 sobre vídeos de 36 a 86 MB y sobre doce archivos de unos 500 MB; la petición pasa por `\u002Fassets`.","**Varios almacenamientos** — se citan AWS S3 y MinIO, además de otro servicio compatible con S3 en un proveedor de aplicaciones.","**Crecimiento lento con imágenes** — un participante pasa de unos 200 MB tras un redespliegue a 1 GB en pocos días; otro ve pods que suben de 1,3 GB a más de 2 GB en casi dos semanas.","**Hipótesis de los flujos sin cerrar** — una corrección limpia los flujos cuando un cliente se desconecta durante una descarga; un colaborador la sitúa en la 11.17.2 y un participante observa una mejora sin que desaparezca el crecimiento.","**Hipótesis de la suma de verificación** — en octubre de 2026, un participante atribuye el problema a la validación de la suma de verificación de las respuestas del SDK de AWS S3: el flujo de validación (`ChecksumStream`, paquete `@smithy\u002Futil-stream`) ignoraría la contrapresión. Su banco de pruebas: límite de 1 GiB y objeto de 150 MB; un cliente lento hace pasar la memoria externa de 8 a 160 MB, tres clientes provocan la parada en 15 segundos y los archivos subidos en multipart no lo desencadenan. Precisa que eso no explica el crecimiento lento durante varios días sin descargas grandes.","**Informe sobre la versión 12** — otro participante indica que subir a la versión 12 resolvió el problema en su caso, aunque el ticket sigue abierto.",{"type":56,"title":96,"steps":97},"Diagnosticar sin adivinar",[98,101,104,107,110],{"title":99,"body":100},"Confirmar la parada por falta de memoria","Busque la huella del kernel con `dmesg -T | grep -i \"out of memory\"`, siga `docker events --filter event=oom` o lea el campo `OOMKilled` de `docker inspect`. Una parada de este tipo no deja ningún mensaje de error de Directus: el contenedor simplemente se reinicia.",{"title":102,"body":103},"Fijar un límite de memoria explícito","En el archivo Compose, dé al servicio `directus` un límite (`mem_limit` o `deploy.resources.limits.memory`) inferior a la RAM libre del VPS, con `restart: unless-stopped`. Sin límite, el kernel del host elige por sí mismo qué proceso matar, a veces PostgreSQL en lugar de Directus.",{"title":105,"body":106},"Medir la curva","Registre `docker stats --no-stream` cada minuto en un archivo, junto con el número de peticiones `\u002Fassets` en curso. Anote el valor tras el reinicio, la meseta y si la curva sigue el tráfico o sube en reposo. Un límite de heap de Node (`--max-old-space-size`) no acota la memoria fuera del heap, la de los búferes, que es la zona señalada por la hipótesis de la suma de verificación.",{"title":108,"body":109},"Reproducir con un cliente lento","En un entorno de pruebas, nunca en producción, descargue un archivo grande con `curl --limit-rate 200k -o \u002Fdev\u002Fnull https:\u002F\u002Fcms.mondomaine.com\u002Fassets\u002FID_ARCHIVO` desde varios terminales y observe `docker stats`. Un script k6 hace lo mismo de forma más reproducible.",{"title":111,"body":112},"Capturar dos perfiles de heap","Añada `NODE_OPTIONS=--heap-prof --heap-prof-dir=\u002Fdirectus\u002Fprofiles` al entorno del servicio, con una carpeta montada como volumen. Node solo escribe el perfil cuando el proceso termina limpiamente: detenga el contenedor con `docker compose stop directus` una primera vez justo después del arranque (referencia) y una segunda cuando la memoria se haya hinchado. Una parada por falta de memoria mata el proceso sin escribir ningún perfil.",{"type":39,"title":114,"body":115},"Soluciones provisionales señaladas, ninguna confirmada por el equipo de Directus","Ninguna de estas pistas ha recibido validación oficial en el ticket. Pruébelas en un entorno de preproducción, mida antes y después, y no las presente como correcciones.",{"type":117,"title":118,"headers":119,"rows":123},"comparison","Pistas señaladas para el problema de memoria",[120,121,122],"Pista","Origen del informe","Estado y reservas",[124,128,132,136,140],[125,126,127],"`AWS_RESPONSE_CHECKSUM_VALIDATION=WHEN_REQUIRED`","Un participante, en octubre de 2026, con un banco de pruebas","No confirmada por el equipo. Según la documentación de AWS, la validación de la suma de verificación de las descargas solo se realiza si quien llama la activa explícitamente: se pierde esa comprobación de integridad.",[129,130,131],"Subir a la versión 12","Un participante dice que resolvió el problema; otro sitúa una corrección a partir de la 12.3.1","No confirmada. Las notas de la 12.3.1 solo mencionan dependencias de controladores de almacenamiento actualizadas. Cambio de versión mayor: lea las notas y haga una copia antes.",[133,134,135],"Versión 11.17.2 o posterior","Un colaborador la recomienda por la limpieza de los flujos de clientes desconectados","La corrección está fusionada y cierra otro ticket (26991); en el ticket 26206, un participante describe una mejora pero un crecimiento que persiste.",[137,138,139],"Redespliegue programado con cron","Un participante, de forma provisional","Oculta el síntoma sin corregir nada y corta las descargas en curso.",[141,142,143],"Límite de memoria y reinicio automático","Recomendación de explotación de esta guía","Limita los daños: el contenedor se reinicia limpiamente en lugar de arrastrar al host. No trata la causa.",{"type":39,"title":145,"body":146},"Qué recopilar para un informe de error útil","El equipo pidió perfiles de heap: sin ellos, el ticket no puede avanzar. Antes de comentar o de abrir un ticket nuevo, reúna los elementos siguientes.",{"type":43,"title":148,"items":149},"El expediente que adjuntar",[150,151,152,153,154,155,156],"**Versión exacta** — la etiqueta de la imagen de Directus (no `latest`) y la fecha del último reinicio.","**Almacenamiento** — controlador, proveedor (AWS, MinIO, otro) y región, sin la clave ni el secreto, más el valor de `AWS_RESPONSE_CHECKSUM_VALIDATION` si está definido.","**Límites** — memoria del contenedor, RAM del host y política de reinicio.","**Carga** — número y tamaño de los archivos servidos, descargas simultáneas, presencia de un CDN o de un proxy delante de Directus, clientes lentos o desconectados.","**Curva de memoria** — memoria total del contenedor (no solo del proceso) durante varios días, con el tráfico `\u002Fassets` al lado.","**Dos perfiles de heap** — referencia y estado hinchado. El colaborador que los pide precisa que solo contienen trazas de pila y tamaños de asignación muestreados, no el contenido de los archivos ni los secretos.","**Modo de subida de los archivos** — de una vez o en multipart, ya que un participante afirma que estos últimos no desencadenan el caso.",{"type":78,"body":158},"Antes de subir a la versión 12, lea las notas de la 12.3.0: corrige conexiones de almacenamiento que se fugaban cuando se cancelaba una petición de asset o fallaba una transformación, pero también cambia el comportamiento de `exists()`, que ahora lanza un error en lugar de devolver falso. Con S3, un objeto ausente puede entonces producir una respuesta 403 en lugar de 404 si las credenciales no permiten listar el bucket: conceda `s3:ListBucket`. Haga una copia de la base y de los archivos y pruebe la subida en una copia antes de tocar la producción.",{"type":39,"title":160,"body":161},"Despliegue de Directus en un clic en ServOrbit","Directus está disponible directamente desde el Marketplace de ServOrbit. Seleccione la aplicación al pedir su VPS: Docker viene preinstalado, el contenedor Directus arranca automáticamente y sus credenciales de administrador (`admin@example.com` más contraseña generada) se muestran en su área de cliente. Acceda al panel de administración mediante un túnel SSH o vinculando un dominio desde su panel de control — sin instalar Docker ni editar un archivo Compose a mano.","Despliegue Directus en un VPS con un clic","Pida un VPS ServOrbit con Directus preinstalado: Docker configurado, contenedor en marcha, credenciales generadas y mostradas en su área de cliente. Sin configuración manual.","Ver Directus en el Marketplace","\u002Fapplications\u002Fcms-sitios-web\u002Fdirectus",[167,187,204],{"id":168,"slug":169,"slugs":170,"title":174,"excerpt":175,"readTime":176,"views":177,"isPinned":19,"noindex":19,"publishedAt":178,"updatedAt":179,"category":180,"categories":181,"featuredImage":30,"bgImage":31,"posterImage":183,"relatedSolution":184},56,"alojar-postgresql-en-un-vps",{"fr":171,"en":172,"ar":173,"es":169},"heberger-postgresql-vps","postgresql-on-a-vps-a-reliable-and-controlled-database","postgresql-على-خادم-vps-قاعدة-بيانات-موثوقة-ومتحكم-بها","PostgreSQL en VPS: base de datos fiable y controlada","Aloje PostgreSQL en VPS: configuración prod, copias pgBackRest, HA streaming, comparativa RDS\u002FSupabase\u002FNeon y resolución de fallos OOM.",9,1,"2026-04-25T00:00:00+00:00","2026-10-21T15:21:37+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[182],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-postgresql-vps-poster.svg",{"categorySlug":185,"appSlug":186},"bases-de-datos","postgresql-stack",{"id":188,"slug":189,"slugs":190,"title":194,"excerpt":195,"readTime":176,"views":18,"isPinned":19,"noindex":19,"publishedAt":196,"updatedAt":197,"category":198,"categories":199,"featuredImage":30,"bgImage":31,"posterImage":201,"relatedSolution":202},57,"alojar-mysql-en-un-vps",{"fr":191,"en":192,"ar":193,"es":189},"heberger-mysql-vps","hosting-mysql-on-a-vps","استضافة-mysql-على-خادم-vps","Alojar MySQL en un VPS: guía completa","Instale MySQL 8.4 LTS en un VPS: requisitos, seguridad, rendimiento InnoDB, acceso remoto seguro, copias de seguridad automatizadas y resolución de errores.","2026-04-24T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[200],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-mysql-vps-poster.svg",{"categorySlug":185,"appSlug":203},"mysql-stack",{"id":205,"slug":206,"slugs":207,"title":211,"excerpt":212,"readTime":213,"views":18,"isPinned":19,"noindex":19,"publishedAt":214,"updatedAt":215,"category":216,"categories":217,"featuredImage":30,"bgImage":31,"posterImage":219,"relatedSolution":220},58,"alojar-redis-en-un-vps",{"fr":208,"en":209,"ar":210,"es":206},"heberger-redis-vps","hosting-redis-on-a-vps","استضافة-redis-على-خادم-vps","Alojar Redis en un VPS: la guía completa","Despliegue Redis en su VPS Cloud: requisitos de RAM\u002FCPU, seguridad (ACL, TLS), persistencia RDB\u002FAOF, resolución de errores y alta disponibilidad.",10,"2026-04-23T00:00:00+00:00","2026-09-08T21:59:59+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[218],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-redis-vps-poster.svg",{"categorySlug":185,"appSlug":221},"redis-stack",true,1794270521425]