Saltar al contenido
Infrastructure 2026-09-06 14 min de lectura

Cómo instalar Ghost en un VPS

Ghost es un CMS en Node.js pensado para publicar: editor limpio, newsletter y membresías de pago incluidas, sin la capa de plugins que arrastra WordPress. Instalarlo en un VPS propio cuesta unos 30 minutos y te deja con un sitio que no paga suscripción mensual a Ghost(Pro). Esta guía cubre la instalación oficial en Ubuntu con Ghost-CLI, MySQL 8 y Nginx.

Cómo instalar Ghost en un VPS
#Ghost#blog#CMS#VPS#Node.js#self-hosting
T
Equipo Terranode
Editorial

Ghost frente a WordPress: cuándo elegir cada uno

Ghost gana cuando el sitio es un blog, una publicación o un negocio de suscripciones; WordPress gana cuando necesitas funciones que solo existen como plugin. Los dos alojan contenido, pero resuelven problemas distintos.

CriterioGhostWordPress
LenguajeNode.jsPHP
Base de datosMySQL 8.0 / 8.4MySQL o MariaDB
Newsletter y membresíasIntegradasPlugin de terceros
Ecosistema de extensionesLimitadoEnorme
Superficie de ataquePequeña, sin pluginsAmplia, depende de plugins
Comercio electrónicoSuscripciones con StripeWooCommerce y similares
RAM mínima realista1-2 GB1-2 GB
Mantenimiento típicoActualizar Ghost y NodeActualizar núcleo, temas y plugins

Si tu proyecto es una tienda, un directorio o un sitio corporativo con formularios complejos, WordPress sigue siendo la respuesta correcta y tenemos una guía completa de WordPress en VPS. Si es una publicación con boletín y suscriptores de pago, Ghost te ahorra media docena de plugins.

Requisitos oficiales

La documentación de Ghost exige Ubuntu 22.04, 24.04 o 26.04, un mínimo de 1 GB de RAM, NGINX 1.9.5 o superior, MySQL 8.0 u 8.4 y una versión LTS soportada de Node.js. También necesitas un dominio con registro A apuntando al VPS antes de empezar, porque el instalador solicita el certificado durante el proceso.

Un GB funciona, pero es ajustado: MySQL 8 reserva memoria con generosidad y el proceso de Node suma lo suyo. Con 2 GB el sitio respira, y si vas a publicar imágenes pesadas o servir mucho tráfico, 4 GB evita sorpresas. La guía de cuánta RAM necesita un VPS explica cómo sumar servicios.

Verifica el punto de partida:

bash
lsb_release -a
free -h
df -h /
dig +short blog.ejemplo.com A

Preparar el servidor y crear el usuario correcto

Ghost-CLI se niega a instalar como root, y el usuario que crees no puede llamarse ghost porque ese nombre lo reserva el propio instalador. Es el error que más veces detiene una instalación en el primer intento.

bash
sudo apt update && sudo apt upgrade -y
sudo adduser editor
sudo usermod -aG sudo editor
su - editor

Instala Nginx y abre el firewall:

bash
sudo apt install -y nginx
sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
sudo ufw enable

Instala MySQL 8 y define una contraseña para el usuario root de la base:

bash
sudo apt install -y mysql-server
sudo mysql

Dentro del cliente:

sql
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'CLAVE_LARGA_AQUI';
FLUSH PRIVILEGES;
exit

Guarda esa contraseña: el instalador de Ghost la pedirá para crear su propia base de datos y su propio usuario. Si tu servidor todavía no está endurecido, aplica antes lo de asegurar un VPS Ubuntu.

Instala Node.js desde el repositorio oficial de NodeSource, en la versión LTS que la documentación de Ghost indique para tu versión (Ghost 6 usa Node 22 LTS):

bash
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
node -v

Instalar Ghost con Ghost-CLI

Ghost-CLI es la herramienta oficial: instala, configura Nginx, solicita el certificado y crea el servicio systemd en un solo comando interactivo.

bash
sudo npm install ghost-cli@latest -g
sudo mkdir -p /var/www/ghost
sudo chown editor:editor /var/www/ghost
sudo chmod 775 /var/www/ghost
cd /var/www/ghost
ghost install

El instalador pregunta, en este orden:

  1. 1 URL del blog: escríbela con https://, por ejemplo https://blog.ejemplo.com. Cambiarla después obliga a reconfigurar Nginx y el certificado.
  2. 2 Usuario y contraseña de MySQL: los que acabas de definir.
  3. 3 Nombre de la base de datos: acepta el sugerido salvo que alojes varios Ghost.
  4. 4 Configurar Nginx: sí.
  5. 5 Configurar SSL: sí. Pedirá un correo para Let's Encrypt.
  6. 6 Configurar systemd: sí, para que Ghost arranque solo tras un reinicio.
  7. 7 Iniciar Ghost: sí.

Al terminar, abre https://blog.ejemplo.com/ghost/ y crea la cuenta de propietario de inmediato. Esa pantalla queda abierta hasta que alguien la reclame; si tardas, otro puede hacerlo por ti.

Comprueba el estado:

bash
ghost status
ghost ls
sudo systemctl status nginx --no-pager

Configurar el correo: dos sistemas distintos

Ghost usa dos canales de correo diferentes, y confundirlos es la causa habitual de "los suscriptores no reciben el boletín".

El correo transaccional cubre enlaces de acceso, restablecimiento de contraseña e invitaciones de personal. Acepta cualquier servidor SMTP. Se configura en /var/www/ghost/config.production.json:

json
"mail": {
  "transport": "SMTP",
  "options": {
    "service": "Mailgun",
    "host": "smtp.ejemplo.com",
    "port": 587,
    "secure": false,
    "auth": {
      "user": "[email protected]",
      "pass": "CLAVE_SMTP"
    }
  },
  "from": "'Blog Ejemplo' <[email protected]>"
}
bash
ghost restart

El envío masivo de newsletters es otra historia: Ghost solo soporta la API de Mailgun. No es una limitación arbitraria. Mandar mil correos desde el SMTP de un VPS nuevo lleva la IP a listas negras en horas. Si vas a usar la función de boletín, necesitas cuenta de Mailgun, dominio verificado y los registros SPF, DKIM y DMARC en orden; nuestra guía sobre por qué el correo cae en spam cubre esa parte.

Si no piensas enviar boletines, ignora Mailgun por completo: el blog funciona igual.

Migrar desde WordPress

Ghost publica un plugin oficial de exportación que genera un JSON con entradas, páginas, autores y etiquetas, listo para importar desde Settings → Import. El proceso funciona bien, pero conviene saber qué no viaja.

Lo que migra: contenido de las entradas, títulos, extractos, fechas, autores, etiquetas y URLs originales.

Lo que no migra automáticamente: comentarios (Ghost usa su propio sistema, ligado a miembros), plugins y sus datos, formularios, campos personalizados y el diseño del tema.

Las imágenes merecen atención aparte. Según el flujo que uses, el JSON puede conservar las URLs apuntando al servidor de WordPress antiguo. Descárgalas y súbelas a Ghost antes de apagar el sitio original; un blog cuyas imágenes viven en un dominio que ya no pagas se rompe entero de golpe.

Antes de cambiar el DNS, mapea las URLs. Si WordPress usaba /2024/05/titulo/ y Ghost usará /titulo/, define redirecciones 301 en el archivo de redirecciones de Ghost (Settings → Labs → Redirects) o directamente en Nginx. Sin eso pierdes el posicionamiento acumulado.

Backups: tres piezas, no una

La exportación JSON del panel guarda el contenido pero no las imágenes ni la configuración: por sí sola no reconstruye el sitio. Un respaldo completo necesita tres cosas.

bash
# 1. Base de datos
mysqldump -u root -p ghost_prod | gzip > ~/ghost-db-$(date +%F).sql.gz

# 2. Carpeta de contenido: imágenes, temas, ajustes
tar czf ~/ghost-content-$(date +%F).tar.gz -C /var/www/ghost content

# 3. Configuración
cp /var/www/ghost/config.production.json ~/ghost-config-$(date +%F).json

Envía los tres archivos fuera del VPS y prueba la restauración en otro servidor al menos una vez. La guía de backups en VPS sirve para automatizar el traslado con cron.

Una copia que nunca se restauró es una hipótesis, no un respaldo.

Actualizar y mantener

Ghost-CLI gestiona las actualizaciones, pero cada versión mayor puede exigir una versión distinta de Node. Respalda antes de tocar nada:

bash
cd /var/www/ghost
ghost backup          # si tu versión de Ghost-CLI lo incluye
ghost update
ghost status

Si ghost update falla a mitad, ghost update --rollback vuelve a la versión anterior mientras la base lo permita. Por eso el volcado de MySQL se hace antes, no después.

Vigila tres cosas de forma rutinaria:

  • Disco: las imágenes en content/images/ crecen sin avisar. du -sh /var/www/ghost/content.
  • Memoria: si el proceso muere sin explicación, revisa dmesg | grep -i oom y considera swap.
  • Certificado: ghost lo renueva vía Let's Encrypt, pero comprueba con sudo certbot renew --dry-run.

Problemas frecuentes al instalar Ghost

SíntomaCausaSolución
ghost install se detieneEjecutado como rootCrear usuario con sudo y repetir
Error al crear el usuarioEl usuario se llama ghostUsar otro nombre de cuenta
Falla la conexión a MySQLPlugin de autenticación o clave incorrectaRevisar ALTER USER y volver a probar
SSL no se emiteDNS sin propagar o puerto 80 cerradodig +short y ufw status
502 Bad GatewayGhost detenido tras un falloghost status y ghost log
El boletín no llegaMailgun sin configurarConfigurar la API de Mailgun, no SMTP
Imágenes rotas tras migrarURLs apuntando al sitio antiguoReimportar medios y reescribir rutas

Un 502 en Ghost casi siempre significa que Node no está escuchando; nuestra guía del error 502 Bad Gateway en Nginx detalla el diagnóstico.

Ghost en un VPS propio es una instalación limpia si respetas tres reglas: no instalar como root, no llamar ghost al usuario del sistema y tener el DNS resuelto antes de lanzar el instalador. Después, la operación se reduce a respaldar las tres piezas (base, content/ y configuración), decidir si necesitas Mailgun para boletines y actualizar con ghost update tras un volcado previo. A cambio, obtienes un CMS rápido, sin plugins que parchear cada semana y sin suscripción mensual a la nube de Ghost.

Terranode ofrece VPS KVM con NVMe en Ecuador desde $2,99 al mes; el plan de 4 GB de RAM y 40 GB de disco por $9 es el punto cómodo para auto-alojar Ghost con MySQL 8 en el mismo servidor.

¿Listo para llevar tu sitio al siguiente nivel?

Hosting con LiteSpeed, NVMe y soporte 24/7 desde $3/mes.

Ver planes de hosting

Preguntas frecuentes