Cómo desplegar Strapi en tu hosting: qué plan necesitas y cómo montarlo

Strapi 5 en Node.js Toolkit con MariaDB por socket, el build del panel de administración según tu plan, el primer administrador y tu API pública en JSON.

Strapi es un CMS sin cabeza: tú defines los tipos de contenido, un panel de administración los edita y una API REST los sirve en JSON a tu web, tu app o tu Nuxt. Corre en Node, así que en los planes Profesional y Avanzado va bajo Node.js Toolkit como cualquier otra aplicación. Hay dos cosas que lo diferencian de un Nuxt o un Next, y esta guía las resuelve las dos: la base de datos se conecta por socket y el build del panel de administración pide más memoria de la que tiene el plan Profesional. Todo lo de aquí está probado con Strapi 5.54 sobre Node 26.

Antes de empezar

  • El plan decide dónde construyes. Strapi en marcha ocupa unos 300 MB, y eso cabe en el Profesional; pero strapi build (el panel de administración) necesita más de 2 GB de memoria, y en el Profesional el proceso muere. En el Avanzado construyes en el servidor; en el Profesional construyes en tu ordenador y subes el resultado (Qué incluye tu plan de hosting: recursos, límites y permisos).
  • Un subdominio, por ejemplo strapi.tudominio.es (Cómo crear un subdominio y qué puedes montar en él), con Raíz del documento en strapi y su certificado (Cómo activar un certificado Let's Encrypt gratis en tu dominio).
  • Una base de datos MySQL con su usuario, creada en Bases de datos (Cómo gestionar tu base de datos).
  • Tu proyecto Strapi, creado en tu ordenador con npx create-strapi@latest eligiendo MySQL como base de datos. Los tipos de contenido se definen ahí, con npm run develop y el Content-Type Builder: en producción ese editor está bloqueado a propósito.
  • Node 20 o superior en tu ordenador para el build local, si tu plan es el Profesional.

Paso a paso

  1. Prepara la conexión a la base de datos. El usuario que crea Plesk solo acepta conexiones locales por socket, y Node, con host: localhost, intenta entrar por TCP y recibe «Access denied». En config/database.ts (o .js), dentro de la conexión mysql, añade una línea:
socketPath: env('DATABASE_SOCKET', undefined),

Y en .env, además de DATABASE_NAME, DATABASE_USERNAME y DATABASE_PASSWORD con los datos de tu base de datos:

DATABASE_CLIENT=mysql
DATABASE_SOCKET=/var/lib/mysql/mysql.sock
  1. Crea en la raíz del proyecto el archivo de arranque que usará el panel, server.js:
const { createStrapi } = require('@strapi/strapi');

createStrapi({ distDir: './dist' }).start();
  1. Si tu plan es el Profesional, construye en tu ordenador: npm run build deja la carpeta dist con el panel de administración y tu código compilado. En el Avanzado puedes saltarte este paso.

  2. Sube el proyecto a la carpeta strapi sin node_modules: un zip desde Archivos y Extraer archivos (Cómo publicar una web Astro en tu hosting sin Node en el servidor), incluyendo .env, server.js y, si lo construiste, dist. Borra el index.html de bienvenida de Plesk. Comprueba en Archivos que .env tiene la contraseña real de la base de datos.

  3. En el subdominio, abre Node.js. En Archivo de inicio de la aplicación escribe server.js, pulsa Activar Node.js y después Instalación de NPM. Strapi trae unas 1400 dependencias: tarda un par de minutos y ocupa unos 700 MB.

  4. Solo en el Avanzado: Ejecutar ScriptbuildEjecutar. Tarda cerca de un minuto y termina con «Building admin panel».

Diálogo Ejecutar Script con el build de Strapi terminado: Compiling TS, Building build context y Building admin panel

En el Profesional ese mismo build acaba en «JavaScript heap out of memory» o muere sin mensaje al tocar el límite del plan; por eso subes dist ya construido.

Diálogo Ejecutar Script con el build de Strapi interrumpido por el error JavaScript heap out of memory
  1. Pulsa el valor de Raíz del documento y elige la carpeta public dentro de strapi: ahí guarda Strapi las subidas de la biblioteca de medios, y el servidor web las sirve directamente. .env, dist y el resto quedan fuera del alcance del navegador. Pulsa Reiniciar app.
Panel Node.js con la versión 26, la raíz del documento en strapi/public, la raíz de la aplicación en strapi y el archivo de inicio server.js
  1. Abre https://strapi.tudominio.es/admin. La primera vez pide crear el administrador: nombre, correo y una contraseña con mayúscula, minúscula y número. Guárdalos: no hay otro.
Pantalla Welcome to Strapi con el formulario del primer administrador rellenado
  1. En Content Manager elige tu tipo de contenido, Create new entry, rellena los campos y pulsa Publish. Hasta que publiques, la API no lo devuelve.
Formulario Create an entry del Content Manager con el título y el texto de un artículo y el botón Publish
  1. Abre la API al público: SettingsUsers & Permissions pluginRolesPublic, despliega tu tipo de contenido, marca find y findOne y pulsa Save. Solo lectura: create, update y delete se quedan sin marcar.
Rol Public con los permisos find y findOne de Articulo marcados y la ruta GET /api/articulos
  1. Abre https://strapi.tudominio.es/api/articulos (el plural de tu tipo). Devuelve tus entradas publicadas en JSON: eso es lo que consumirá tu web.
Respuesta JSON de la API de Strapi con un artículo publicado y su paginación
  1. Para cambiar el contenido, entras en /admin. Para cambiar la estructura (un tipo nuevo, un campo más), lo haces en tu ordenador con npm run develop, construyes, subes dist y src y pulsas Reiniciar app. En el Avanzado, en vez de subir dist, lanzas el build desde el panel.

Cómo comprobar que ha funcionado

/admin carga y entra con tu usuario; /api/<plural> responde 200 con data y meta; una imagen subida a la Media Library se abre en https://strapi.tudominio.es/uploads/... servida por el servidor web, no por Node. Y https://strapi.tudominio.es/.env da 403: la raíz del documento está en public y los archivos que empiezan por punto no se sirven.

Si algo falla

  • 503 al abrir la web: Strapi no ha arrancado. Lee stderr.log en la carpeta strapi desde Archivos y los Registros del subdominio (Cómo leer los registros de tu web para encontrar un error).
  • «Access denied for user '...'@'127.0.0.1'»: te falta el socketPath del paso 1, o .env no lleva DATABASE_SOCKET. Con el socket, el usuario y la contraseña de Plesk entran a la primera.
  • «JavaScript heap out of memory» o el build desaparece sin terminar: es el paso 6 en un plan Profesional. Construye en tu ordenador y sube dist.
  • En el Content-Type Builder los campos salen con un candado y no hay botón para crear tipos ni añadir campos: es normal en producción. Los tipos se crean en tu ordenador y se suben.
  • La API devuelve 403: el rol Public no tiene find en ese tipo (paso 10). Devuelve 404 con data: null: la entrada está en borrador, sin publicar.
  • Faltan APP_KEYS, ADMIN_JWT_SECRET o similares al arrancar: .env no se subió (los zip de algunos programas omiten los archivos que empiezan por punto). Súbelo suelto desde Archivos.
  • Cualquier otra cosa: abre un ticket desde tu área de cliente (Cómo abrir un ticket de soporte y que se resuelva a la primera) con las últimas líneas de stderr.log.

Relacionados

  • 0 Los Usuarios han Encontrado Esto Útil
¿Fue útil la respuesta?

Artículos Relacionados

Cómo publicar una aplicación Node.js en tu hosting

Crea tu app.js y tu package.json, actívalos con Node.js Toolkit y deja la raíz del documento en...

Cómo desplegar tu web desde GitHub, GitLab o Bitbucket

Conecta un repositorio Git de GitHub, GitLab o Bitbucket a tu subdominio, elige el modo de...

Cómo instalar Laravel en tu hosting con Laravel Toolkit

Instala el esqueleto de Laravel en tu subdominio con Laravel Toolkit y entérate de por qué la web...

Cómo conectar Laravel a una base de datos MariaDB

Crea la base de datos MariaDB, edita el archivo .env y ejecuta las migraciones para que tu...

Cómo ejecutar Artisan, Composer y npm desde el panel

Lanza comandos habituales de Artisan, Composer y npm en tu aplicación Laravel sin acceso SSH,...