--- title: "Cómo instalar Ghost CMS en Ubuntu 24.04 con Nginx y MySQL" description: "Instala Ghost en Ubuntu 24.04 con Ghost-CLI, Node.js 22, MySQL 8 y Nginx, obtén un certificado SSL automático y configura el envío de correo por SMTP." category: "Hosting de Aplicaciones Web" language: es source: https://cubepath.com/es/docs/hosting-de-aplicaciones-web/instalacion-de-ghost-cms-en-linux updated: 2026-09-25 --- # Cómo instalar Ghost CMS en Ubuntu 24.04 con Nginx y MySQL 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: ```bash sudo apt update sudo apt upgrade -y sudo apt install nginx ``` Permite SSH, HTTP y HTTPS en UFW y actívalo: ```bash sudo ufw allow OpenSSH sudo ufw allow 'Nginx Full' sudo ufw enable ``` Comprueba las reglas: ```bash sudo ufw status ``` ```output 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: ```bash sudo apt install mysql-server ``` Entra en la consola de MySQL como root (en Ubuntu se autentica por socket, sin contraseña): ```bash sudo mysql ``` Crea una base de datos y un usuario dedicado. Sustituye `your_db_password` por una contraseña segura: ```sql 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: ```bash mysql -u ghost_user -p -e "SHOW DATABASES;" ``` ```output +--------------------+ | 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: ```bash 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: ```bash 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: ```bash node -v npm -v ``` ```output v22.x.y 10.x.y ``` > Nota: consulta 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.x` por 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: ```bash sudo npm install ghost-cli@latest -g ``` ```bash ghost --version ``` ```output 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`: ```bash 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: ```bash 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í: ```output ✔ 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: ```bash ghost ls ``` ```output 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: ```bash ghost doctor ``` Comprueba desde fuera que el sitio responde por HTTPS: ```bash curl -I https://your_domain ``` ```output 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: ```bash nano /var/www/ghost/config.production.json ``` Sustituye el bloque `mail` por el de tu proveedor SMTP, usando tus propios datos: ```json "mail": { "transport": "SMTP", "from": "Your Site ", "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: ```bash cd /var/www/ghost ghost restart ``` Para probarlo, invita a un miembro del equipo desde **Settings > Staff** y comprueba que el correo llega. > Nota: las 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: ```bash 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`.