Ghost es una plataforma de publicación de código abierto escrita en Node.js, pensada para blogs, newsletters y sitios de contenido con suscripciones. En este tutorial instalarás Ghost en Ubuntu 24.04 con el método oficial de producción: Ghost-CLI, Node.js 22 LTS, MySQL 8 y Nginx como proxy inverso. Ghost-CLI se encarga además de crear el servicio systemd y de obtener el certificado SSL de Let's Encrypt.

Requisitos previos

Para seguir esta guía necesitas:

  • Un servidor con Ubuntu 24.04 LTS y al menos 1 GB de RAM (2 GB recomendados), por ejemplo un VPS de CubePath.
  • Un usuario no root con privilegios sudo. No lo llames ghost: Ghost-CLI crea un usuario de sistema con ese nombre y habría conflicto.
  • Un dominio, representado aquí como your_domain, con un registro DNS A apuntando a la IP pública del servidor. Es necesario para el certificado SSL.
  • Los puertos 22, 80 y 443 accesibles desde internet.

Paso 1: Actualizar el sistema e instalar Nginx

Actualiza los paquetes e instala Nginx, que servirá Ghost hacia internet:

sudo apt update
sudo apt upgrade -y
sudo apt install nginx

Permite SSH, HTTP y HTTPS en UFW y actívalo:

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

Comprueba las reglas:

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
...

Paso 2: Instalar MySQL y crear la base de datos

Ghost usa MySQL 8 en producción. Instálalo desde los repositorios de Ubuntu:

sudo apt install mysql-server

Entra en la consola de MySQL como root (en Ubuntu se autentica por socket, sin contraseña):

sudo mysql

Crea una base de datos y un usuario dedicado. Sustituye your_db_password por una contraseña segura:

CREATE DATABASE ghost_prod CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
CREATE USER 'ghost_user'@'localhost' IDENTIFIED BY 'your_db_password';
GRANT ALL PRIVILEGES ON ghost_prod.* TO 'ghost_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Comprueba que el nuevo usuario puede entrar y ve su base de datos:

mysql -u ghost_user -p -e "SHOW DATABASES;"
+--------------------+
| Database           |
+--------------------+
| ghost_prod         |
| information_schema |
| performance_schema |
+--------------------+

Paso 3: Instalar Node.js 22

Ghost solo admite versiones LTS concretas de Node.js, y la de Ubuntu 24.04 no es la recomendada. Instala Node.js 22 desde el repositorio de NodeSource. Primero, la clave:

sudo apt install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg

Después, el repositorio de la rama 22.x y el paquete:

echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
sudo apt update
sudo apt install nodejs

Comprueba las versiones:

node -v
npm -v
v22.x.y
10.x.y

Paso 4: Instalar Ghost-CLI

Ghost-CLI es la herramienta oficial para instalar, actualizar y gestionar Ghost. Instálala de forma global con npm:

sudo npm install ghost-cli@latest -g
ghost --version
Ghost-CLI version: 1.x.y

Paso 5: Crear el directorio de instalación

Ghost debe instalarse en un directorio vacío propiedad de tu usuario. Créalo en /var/www:

sudo mkdir -p /var/www/ghost
sudo chown your_user:your_user /var/www/ghost
sudo chmod 775 /var/www/ghost
cd /var/www/ghost

Sustituye your_user por tu usuario sudo. No ejecutes Ghost-CLI como root ni dentro de /root o de tu directorio personal.

Paso 6: Instalar Ghost

Desde /var/www/ghost, lanza el instalador:

ghost install

Ghost-CLI comprueba el sistema, descarga Ghost y te hace una serie de preguntas. Responde así:

PreguntaRespuesta
Enter your blog URLhttps://your_domain
Enter your MySQL hostnamelocalhost
Enter your MySQL usernameghost_user
Enter your MySQL passwordyour_db_password
Enter your Ghost database nameghost_prod
Do you wish to set up Nginx?Y
Do you wish to set up SSL?Y
Enter your email (for SSL certificate)tu correo
Do you wish to set up Systemd?Y
Do you want to start Ghost?Y

Durante el proceso Ghost-CLI te pedirá tu contraseña de sudo para crear el usuario de sistema ghost, escribir la configuración de Nginx y el servicio systemd. Al terminar verás algo así:

✔ Starting Ghost
------------------------------------------------------------------------------

Ghost uses direct mail by default. To set up an alternative email method read our docs at https://ghost.org/docs/config/#mail

------------------------------------------------------------------------------

Ghost was installed successfully! To complete setup of your publication, visit:

    https://your_domain/ghost/

Ghost escucha en 127.0.0.1:2368 y Nginx le reenvía las peticiones de los puertos 80 y 443.

Paso 7: Verificar la instalación

Consulta el estado de la instancia:

ghost ls
Name          Location        Version  Status                URL                   Port  Process Manager
your_domain   /var/www/ghost  6.x.y    running (production)  https://your_domain   2368  systemd

Ghost-CLI también incluye un diagnóstico que revisa permisos, versiones y configuración:

ghost doctor

Comprueba desde fuera que el sitio responde por HTTPS:

curl -I https://your_domain
HTTP/2 200
server: nginx
...

Visita https://your_domain/ghost/ en el navegador y crea la cuenta de administrador con el nombre del sitio, tu nombre, correo y contraseña.

Paso 8: Configurar el envío de correo por SMTP

Ghost envía correos transaccionales (invitaciones al equipo, restablecimiento de contraseña, enlaces de inicio de sesión de miembros). El método por defecto, direct, suele acabar en spam, así que configura un servidor SMTP. Edita la configuración de producción:

nano /var/www/ghost/config.production.json

Sustituye el bloque mail por el de tu proveedor SMTP, usando tus propios datos:

"mail": {
  "transport": "SMTP",
  "from": "Your Site <noreply@your_domain>",
  "options": {
    "host": "smtp.your_provider.com",
    "port": 587,
    "secure": false,
    "auth": {
      "user": "your_smtp_user",
      "pass": "your_smtp_password"
    }
  }
},

Con el puerto 587 se usa STARTTLS, por eso secure vale false; si tu proveedor usa el puerto 465, pon "secure": true. Reinicia Ghost para aplicar el cambio:

cd /var/www/ghost
ghost restart

Para probarlo, invita a un miembro del equipo desde Settings > Staff y comprueba que el correo llega.

Mantenimiento

Ejecuta todos los comandos de Ghost-CLI desde /var/www/ghost con tu usuario:

  • ghost log: muestra los logs recientes de Ghost.
  • ghost restart, ghost stop, ghost start: controlan el servicio.
  • ghost update: actualiza Ghost a la última versión compatible (haz antes una copia de seguridad).

Para la copia de seguridad, guarda la base de datos y el directorio content, que contiene imágenes, temas y ajustes:

mysqldump -u ghost_user -p ghost_prod > ~/ghost_prod-$(date +%F).sql
sudo tar czf ~/ghost_content-$(date +%F).tar.gz -C /var/www/ghost content

Solución de problemas

  • Error de SSL durante la instalación: el registro DNS aún no apunta al servidor o el puerto 80 está cerrado. Corrígelo y ejecuta ghost setup ssl desde /var/www/ghost.
  • 502 Bad Gateway: Ghost no está en marcha. Revisa ghost ls y ghost log, o sudo journalctl -u ghost_your_domain -n 50 (el nombre del servicio sustituye los puntos del dominio por guiones; compruébalo con systemctl list-units 'ghost_*').
  • Errores de permisos en ghost doctor: el directorio se creó con otro propietario. Vuelve a aplicar el chown del paso 5 al directorio raíz; Ghost-CLI gestiona los permisos de content.

Conclusión

Tienes Ghost funcionando en Ubuntu 24.04 con MySQL, Nginx, HTTPS automático y correo por SMTP, gestionado con Ghost-CLI y systemd. Como siguientes pasos, elige o sube un tema en Settings > Design, configura Mailgun si vas a enviar newsletters y programa las copias de seguridad de la base de datos y del directorio content.