Guía de despliegue

Alojar Ghost en un VPS: guía completa 2026

Desplegar en un VPS Cloud →

Tutorial

Alojar Ghost en un VPS: guía completa 2026

Autoalojamiento8 min de lectura7 pasos

Ghost es la plataforma de publicación moderna pensada para creadores: blog rápido, newsletters integradas y suscripciones de pago nativas. Con Ghost v6 (julio de 2026), la monetización por newsletter se ha enriquecido y la configuración de Stripe ha evolucionado. Autoalojado en un VPS, evita las comisiones de Ghost(Pro) y de Substack y conserva el control total sobre su audiencia. Esta guía cubre la instalación completa, el reverse proxy TLS con Caddy, las actualizaciones mediante Ghost CLI y la solución de los errores de arranque más frecuentes.

Contenido· Por qué autoalojar Ghost en un VPS1/10
  1. 01Por qué autoalojar Ghost en un VPS
  2. 02Las ventajas de un Ghost autoalojado
  3. 03Requisitos realistas
  4. 04Instalación mediante Ghost CLI (método recomendado)
  5. 05Iniciar Caddy y comprobar el reverse proxy
  6. 06Ghost v6 y Stripe Tax: el nuevo campo tax_id_collection
  7. 07Actualizar Ghost con Ghost CLI
  8. 08Solución de problemas: los errores de arranque frecuentes
  9. 09Copias de seguridad automáticas
  10. 10La documentación oficial

Por qué autoalojar Ghost en un VPS

Ghost combina lo que WordPress hace de forma laboriosa y lo que Substack cobra caro: un editor depurado, un rendimiento nativo excelente (Node.js), una gestión de miembros y de suscripciones de pago integrada mediante Stripe, y el envío de newsletters sin plugin. Pero Ghost(Pro) factura en función de la audiencia, y las plataformas de newsletter se llevan una comisión sobre sus ingresos.

Al alojarlo en su VPS, conserva el 100 % de sus suscriptores de pago (sin contar las comisiones de Stripe), personaliza el tema sin restricciones y controla su lista de correos: su activo más valioso. Con Ghost v6, los creadores que monetizan sus newsletters se benefician además de la recaudación automática del IVA mediante Stripe Tax, sin ninguna dependencia de un servicio de terceros.

Las ventajas de un Ghost autoalojado

  • Ninguna comisión de plataforma sobre sus suscripciones de pago (salvo Stripe)
  • Rendimiento nativo: el tiempo de carga se mide desde la conexión del lector — depende del operador, de la hora y de la ruta seguida
  • Newsletters y miembros integrados, sin acumular plugins
  • Personalización total del tema Handlebars y acceso completo a la API
  • Control de su lista de suscriptores y de sus datos
  • Coste fijo del VPS sea cual sea el número de lectores
  • Ghost v6: recaudación de IVA/impuestos integrada mediante Stripe Tax para los creadores monetizados

Requisitos realistas

Ghost v6 funciona con Node.js 20 LTS como mínimo (Node 22 recomendado para el rendimiento). Prevea un VPS con al menos 1 vCPU y 2 GB de RAM para un blog con un tráfico holgado; suba a 4 GB si su audiencia crece rápido o si activa newsletters voluminosas. Para un uso en producción, reserve 20 GB de disco como mínimo para los medios y la base de datos.

La base de datos recomendada en producción es MySQL 8 (SQLite solo se admite en desarrollo — véase la sección de solución de problemas). También necesita un servicio SMTP transaccional (Mailgun, Postmark, Brevo) para el envío fiable de las newsletters y de los correos de autenticación de los miembros, un dominio blog.votredomaine.com apuntado a la IP de su VPS, y Caddy o Nginx para el reverse proxy HTTPS. Caddy es preferible: provisiona y renueva los certificados Let's Encrypt sin configuración adicional.

Instalación mediante Ghost CLI (método recomendado)

  1. Preparar el servidor

    En Debian/Ubuntu, instale Node.js 20, MySQL 8, Nginx (requerido por Ghost CLI para su comprobación de compatibilidad) y Caddy. Cree un usuario dedicado (no root):

    add user --disabled-login ghost-user
    su - ghost-user
  2. Instalar Ghost CLI

    npm install ghost-cli@latest -g

    Ghost CLI gestiona la instalación, las migraciones de base de datos, las actualizaciones y los reinicios del gestor de procesos PM2.

  3. Crear el directorio y lanzar la instalación

    mkdir -p /var/www/ghost
    cd /var/www/ghost
    ghost install

    El asistente le pide la URL del blog (p. ej. https://blog.votredomaine.com), las credenciales de MySQL, el servicio SMTP y si desea configurar Nginx. Responda no a la configuración de Nginx si utiliza Caddy: la configurará en el paso siguiente.

  4. Configurar el reverse proxy TLS con Caddy

    Cree o edite su Caddyfile:

    blog.votredomaine.com {
        reverse_proxy localhost:2368
        encode gzip
        header /ghost/* Cache-Control "no-store"
        header /members/* Cache-Control "no-store"
    }

    Caddy obtiene y renueva el certificado Let's Encrypt automáticamente. Ghost escucha en local en el puerto 2368; solo Caddy queda expuesto en los puertos 80 y 443.

  5. Asegurar el primer acceso

    Abra /ghost inmediatamente después de la instalación: Ghost muestra su asistente de creación de cuenta (nombre, correo electrónico, contraseña). Complételo sin demora — mientras el asistente no esté finalizado, cualquiera que llegue a esa URL puede convertirse en propietario del blog.

  6. Conectar su servicio SMTP

    En Configuración → Email, compruebe que las credenciales SMTP son correctas y envíe un correo de prueba. El envío de newsletters y los correos de inicio de sesión de los miembros pasan por esta configuración: un MAIL_FROM mal formado (sin dominio verificado) es una de las causas más frecuentes de silencios en el registro.

  7. Conectar Stripe y activar las suscripciones

    En Configuración → Miembros, conecte su cuenta de Stripe para activar las suscripciones de pago. Defina sus niveles (tiers), sus precios mensuales y anuales, y después publique su primer artículo y envíe su primera newsletter.

Iniciar Caddy y comprobar el reverse proxy

Una vez escrito el Caddyfile, inicie o recargue Caddy para aplicar la configuración:

caddy run --config /etc/caddy/Caddyfile

Si Caddy está gestionado como servicio systemd (que es el caso tras una instalación mediante APT), prefiera el comando de recarga sin interrupción:

systemctl reload caddy

Caddy contacta de inmediato con Let's Encrypt para obtener un certificado TLS para su dominio mediante el desafío HTTP-01. En menos de 30 segundos, https://blog.votredomaine.com debe responder. Compruebe el estado del certificado:

curl -sv https://blog.votredomaine.com/ 2>&1 | grep -E 'SSL|subject|issuer'

Si el comando muestra un issuer: O=Let's Encrypt, el certificado es válido. En caso de error connection refused, compruebe que Ghost funciona correctamente en el puerto 2368 con ghost status desde el directorio de instalación. Si el puerto 443 está cerrado en su firewall, ábralo antes de iniciar Caddy: ufw allow 443.

Ghost v6 y Stripe Tax: el nuevo campo tax_id_collection

Ghost v6 introduce la compatibilidad con el campo tax_id_collection de la API de Stripe. Este campo permite a Stripe Tax recopilar automáticamente el número de IVA o de identificación fiscal del comprador en el momento del pago, conforme a las normativas europeas y mundiales.

Para las instancias existentes migradas a Ghost v6, esta funcionalidad es una configuración de su lado de Stripe, no un cambio en Ghost. Dos puntos que comprobar:

1. En el Dashboard de Stripe, active Stripe Tax y configure sus reglas fiscales por país.
2. En Stripe → Checkout → Configuración, active la recopilación del número fiscal si es necesario para su mercado.

Las instancias de Ghost v5 que se actualicen a v6 sin ajustar sus parámetros de Stripe seguirán funcionando, pero las nuevas funciones de conformidad fiscal permanecerán inactivas mientras no configure Stripe Tax por su parte.

Actualizar Ghost con Ghost CLI

Ghost CLI simplifica las actualizaciones mayores y menores. Desde el directorio de instalación:

cd /var/www/ghost
ghost update

Para apuntar a una versión concreta, por ejemplo en una migración v5 → v6:

ghost update 6.x.x

Ghost CLI detiene el proceso PM2, aplica las migraciones de base de datos, actualiza los archivos y reinicia Ghost. Si una migración falla, Ghost CLI realiza un rollback automático y muestra el detalle del error en el terminal.

Antes de cualquier actualización mayor (v5 → v6), dos gestos preventivos son imprescindibles: haga una copia de seguridad del directorio de contenido /var/www/ghost/content (medios y temas personalizados) y exporte la base MySQL:

mysqldump -u ghost -p ghost_db > ghost_backup_$(date +%F).sql

Por último, compruebe la versión instalada tras la actualización:

ghost version

Un número de versión incorrecto tras una actualización suele indicar un problema de permisos en el directorio /var/www/ghost: compruebe que el usuario dedicado es realmente propietario de la carpeta.

Solución de problemas: los errores de arranque frecuentes

Ghost arranca pero devuelve una página en blanco o un error 500
Compruebe los logs con ghost log. La causa más frecuente es un valor url incorrecto en config.production.json: Ghost genera todos sus enlaces internos a partir de ese valor, y una URL en HTTP cuando Caddy sirve en HTTPS provoca bucles de redirección.

Error «ER_NOT_SUPPORTED_AUTH_MODE» al arrancar
Ghost v6 requiere MySQL 8 con el plugin de autenticación mysql_native_password. Si su MySQL está configurado en caching_sha2_password por defecto, modifique el usuario:

ALTER USER 'ghost'@'localhost' IDENTIFIED WITH mysql_native_password BY 'votre_mot_de_passe';
FLUSH PRIVILEGES;

SQLite en producción: por qué no es una opción
Ghost acepta SQLite en modo desarrollo, pero este motor no está soportado en producción: no gestiona los accesos concurrentes, y las newsletters voluminosas o los picos de tráfico provocan bloqueos de base irreversibles. Migre a MySQL antes de poner su instancia en línea.

La subida de un tema falla en producción
Ghost limita el tamaño de las subidas de temas. Si la subida falla en silencio o devuelve un error 413, ajuste el límite del lado de Caddy:

blog.votredomaine.com {
    request_body {
        max_size 50MB
    }
    reverse_proxy localhost:2368
}

MAIL_FROM mal configurado: miembros que no reciben los correos
El campo mail.from de config.production.json debe llevar una dirección cuyo dominio esté verificado en su proveedor SMTP (registros SPF y DKIM activos). Un dominio no verificado acaba en silencios en el registro o en rechazos SMTP que Ghost rara vez señala con claridad en sus logs.

Coloque Cloudflare como proxy delante de Caddy para absorber los picos de tráfico (efecto Hacker News o redes sociales): casi todo el contenido público de Ghost es estático y se cachea muy bien. Excluya /ghost/, /members/ y /api/ de la caché mediante reglas de página o una regla de caché personalizada — esas rutas deben llegar siempre a Ghost directamente para que la autenticación de los miembros y el admin funcionen correctamente.

Copias de seguridad automáticas

El contenido dinámico de Ghost (medios, temas personalizados) vive en /var/www/ghost/content. Añada un cron que copie ese directorio y una exportación diaria de MySQL hacia un almacenamiento remoto. Ghost CLI no hace copias de seguridad automáticamente.

# Export MySQL quotidien — à placer dans crontab
0 2 * * * mysqldump -u ghost -p ghost_db | gzip > /backups/ghost-$(date +%F).sql.gz

La documentación oficial

Para la configuración avanzada y las opciones propias de la herramienta, consulte la documentación oficial de Ghost. 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.

Su medio independiente, en su VPS

El VPS Cloud de ServOrbit ofrece la stack Node.js y la base de datos MySQL ideales para ejecutar Ghost y cobrar sus suscripciones sin comisión de plataforma.

¿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