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 llamesghost: Ghost-CLI crea un usuario de sistema con ese nombre y habría conflicto. - Un dominio, representado aquí como
your_domain, con un registro DNSAapuntando 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
Notaconsulta la página de requisitos de Ghost antes de instalar. Si la versión de Ghost que vas a usar recomienda otra rama LTS de Node.js, cambia
node_22.xpor la indicada.
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í:
| Pregunta | Respuesta |
|---|---|
| Enter your blog URL | https://your_domain |
| Enter your MySQL hostname | localhost |
| Enter your MySQL username | ghost_user |
| Enter your MySQL password | your_db_password |
| Enter your Ghost database name | ghost_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.
Notalas newsletters masivas a miembros no se envían por SMTP. Ghost las envía mediante Mailgun, que se configura en Settings > Email newsletter.
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 ssldesde/var/www/ghost. - 502 Bad Gateway: Ghost no está en marcha. Revisa
ghost lsyghost log, osudo journalctl -u ghost_your_domain -n 50(el nombre del servicio sustituye los puntos del dominio por guiones; compruébalo consystemctl list-units 'ghost_*'). - Errores de permisos en
ghost doctor: el directorio se creó con otro propietario. Vuelve a aplicar elchowndel paso 5 al directorio raíz; Ghost-CLI gestiona los permisos decontent.
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.
