Instalación de Ghost CMS en Linux
Ghost es un moderno sistema de gestión de contenido de código abierto diseñado para creadores y profesionales. Proporciona una plataforma de publicación simplificada con enfoque en la simplicidad, el rendimiento y la experiencia del usuario. Esta guía recorre una instalación completa de Ghost en un servidor Linux, incluyendo la configuración de Node.js, la configuración de la base de datos MySQL, certificados SSL y el despliegue en producción con gestión de servicios systemd.
Tabla de contenidos
- Requisitos previos
- Requisitos del sistema
- Instalación de Node.js
- Configuración de la base de datos MySQL
- Instalación de Ghost
- Configuración del proxy inverso Nginx
- Configuración del certificado SSL
- Configuración del servicio Systemd
- Configuración posterior a la instalación
- Copia de seguridad y mantenimiento
- Solución de problemas
- Conclusión
Requisitos previos
Antes de comenzar la instalación de Ghost, asegúrese de tener lo siguiente:
- Un VPS o servidor dedicado ejecutando Ubuntu 20.04 LTS o superior
- Acceso root o privilegios sudo
- Un nombre de dominio válido que apunte a su servidor
- Mínimo 2GB de RAM (4GB+ recomendado para producción)
- 10GB de espacio en disco disponible
- Conocimientos básicos de línea de comandos de Linux
Actualice los paquetes del sistema a las versiones más recientes antes de comenzar el proceso de instalación.
sudo apt update && sudo apt upgrade -y
Requisitos del sistema
Ghost tiene requisitos específicos del sistema que deben cumplirse para un rendimiento óptimo. La aplicación requiere Node.js 16.0 o superior, npm 7.0 o superior y un sistema de base de datos compatible.
Verifique su versión actual de Node.js si ya está instalado:
node --version
npm --version
Verifique los recursos del sistema:
free -h
df -h
Instalación de Node.js
Node.js es el entorno de ejecución requerido para Ghost. Instale la versión LTS más reciente desde el repositorio de NodeSource.
Agregue el repositorio de NodeSource para Node.js 18 LTS:
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
Instale Node.js y npm:
sudo apt install -y nodejs
Verifique la instalación:
node --version
npm --version
Instale las dependencias adicionales del sistema:
sudo apt install -y build-essential python3
Configure npm para usar los permisos correctos para los paquetes globales:
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
export PATH=~/.npm-global/bin:$PATH
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
Configuración de la base de datos MySQL
Ghost requiere una base de datos para almacenar contenido. Instale MySQL Server y cree una base de datos y usuario dedicados de Ghost.
Instale MySQL Server:
sudo apt install -y mysql-server
Inicie y habilite el servicio MySQL:
sudo systemctl start mysql
sudo systemctl enable mysql
Asegure su instalación de MySQL:
sudo mysql_secure_installation
Cree una base de datos para Ghost:
sudo mysql -u root -p << EOF
CREATE DATABASE ghost;
CREATE USER 'ghost'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON ghost.* TO 'ghost'@'localhost';
FLUSH PRIVILEGES;
EXIT;
EOF
Pruebe la conexión a la base de datos:
mysql -u ghost -p -h localhost
show databases;
exit;
Instalación de Ghost
Instale Ghost CLI globalmente, que es la forma recomendada de instalar y gestionar Ghost:
npm install -g ghost-cli
Cree un directorio para la instalación de Ghost:
sudo mkdir -p /var/www/ghost
sudo chown $USER:$USER /var/www/ghost
cd /var/www/ghost
Instale Ghost usando el instalador interactivo:
ghost install
El instalador le solicitará la siguiente información:
- Versión de Ghost (presione Enter para la más reciente)
- Host de base de datos: localhost
- Nombre de la base de datos: ghost
- Nombre de usuario de la base de datos: ghost
- Contraseña de la base de datos: (ingrese la contraseña que creó)
- Puerto de la base de datos: 3306
- Puerto local para Ghost: 2368
- Subdominio: example.com (use su dominio)
- Habilitar HTTPS/SSL: Y (configuraremos SSL por separado)
- Configurar Nginx: Y
- Configurar Systemd: Y
Monitoree el progreso de la instalación y asegúrese de que todos los pasos se completen correctamente. El instalador configurará automáticamente Nginx y creará un servicio systemd.
Inicie Ghost después de la instalación:
cd /var/www/ghost
ghost start
Verifique que Ghost se está ejecutando:
ghost status
Acceda a la interfaz de administración:
curl http://localhost:2368/admin
Configuración del proxy inverso Nginx
Ghost CLI configura automáticamente Nginx, pero es posible que deba verificar o ajustar la configuración. Verifique el archivo de configuración de Nginx:
sudo cat /etc/nginx/sites-available/example.com.conf
La configuración debería verse similar a esto:
upstream ghost {
server localhost:2368;
}
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
location / {
proxy_pass http://ghost;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}
Pruebe la configuración de Nginx:
sudo nginx -t
Recargue Nginx para aplicar los cambios:
sudo systemctl reload nginx
Configuración del certificado SSL
Configure certificados SSL gratuitos usando Let's Encrypt y Certbot. Ghost CLI generalmente se encarga de esto automáticamente durante la instalación.
Instale Certbot si aún no está instalado:
sudo apt install -y certbot python3-certbot-nginx
Obtenga manualmente un certificado SSL:
sudo certbot certonly --nginx -d example.com -d www.example.com
Actualice la configuración de Nginx para usar HTTPS:
sudo nano /etc/nginx/sites-available/example.com.conf
Agregue o actualice el bloque de servidor para redirigir HTTP a HTTPS:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://ghost;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Pruebe y recargue Nginx:
sudo nginx -t
sudo systemctl reload nginx
Configure la renovación automática de certificados:
sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer
Configuración del servicio Systemd
Ghost CLI crea automáticamente un servicio systemd. Verifique la configuración del servicio:
sudo systemctl status ghost_www.example.com
Vea el archivo del servicio:
sudo cat /etc/systemd/system/ghost_www.example.com.service
El servicio debe estar configurado para iniciar Ghost automáticamente en el arranque del sistema. Habilite e inicie el servicio:
sudo systemctl enable ghost_www.example.com
sudo systemctl start ghost_www.example.com
Monitoree los registros del servicio:
sudo journalctl -u ghost_www.example.com -f
Verifique el estado del servicio:
sudo systemctl status ghost_www.example.com
Configuración posterior a la instalación
Acceda al panel de administración de Ghost para completar la configuración:
- Navegue a https://example.com/admin
- Cree la cuenta de administrador con nombre de usuario, correo electrónico y contraseña
- Configure el título y descripción del blog
- Configure la configuración de correo electrónico para notificaciones y alertas
Actualice la configuración de Ghost para uso en producción:
cd /var/www/ghost
sudo nano .env
Variables de entorno clave para verificar:
NODE_ENV=production
GHOST_SECURITY__PASSWORD_MIN_LENGTH=12
GHOST_SECURITY__PASSWORD_MIN_PASSWORD_LENGTH=12
Configure los parámetros de correo electrónico en el panel de administración:
- Configuración → General → Correo electrónico
- Configure las credenciales SMTP para notificaciones
Verifique que Ghost está correctamente configurado:
cd /var/www/ghost
ghost log
Copia de seguridad y mantenimiento
Implemente una estrategia de copia de seguridad regular para su instalación de Ghost y base de datos. Cree un script de copia de seguridad:
sudo nano /usr/local/bin/ghost-backup.sh
Agregue el siguiente contenido:
#!/bin/bash
BACKUP_DIR="/backups/ghost"
GHOST_DIR="/var/www/ghost"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/ghost-backup-$DATE.tar.gz"
mkdir -p $BACKUP_DIR
# Realizar copia de seguridad de los archivos de Ghost
tar -czf "$BACKUP_FILE" "$GHOST_DIR"
# Realizar copia de seguridad de la base de datos MySQL
mysqldump -u ghost -p'StrongPassword123!' ghost | gzip > "$BACKUP_DIR/ghost-db-$DATE.sql.gz"
# Mantener solo las últimas 30 días de copias de seguridad
find $BACKUP_DIR -type f -mtime +30 -delete
echo "Backup completed: $BACKUP_FILE"
Haga que el script sea ejecutable:
sudo chmod +x /usr/local/bin/ghost-backup.sh
Programe copias de seguridad diarias usando cron:
sudo crontab -e
Agregue la siguiente línea para ejecutar la copia de seguridad a las 2 AM diariamente:
0 2 * * * /usr/local/bin/ghost-backup.sh >> /var/log/ghost-backup.log 2>&1
Actualice Ghost periódicamente:
cd /var/www/ghost
ghost update
Verifique las actualizaciones disponibles:
cd /var/www/ghost
ghost update --check
Solución de problemas
Si Ghost no se inicia, verifique los registros:
cd /var/www/ghost
ghost log
tail -f /var/log/ghost.log
Verifique la conectividad de la base de datos:
mysql -u ghost -p -h localhost ghost
show tables;
exit;
Verifique el proceso de Node.js:
ps aux | grep node
Reinicie Ghost si es necesario:
cd /var/www/ghost
ghost restart
Verifique que Nginx está correctamente configurado:
sudo nginx -t
sudo systemctl status nginx
Verifique la caducidad del certificado SSL:
openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -noout -dates
Conclusión
Ghost ahora está completamente instalado y configurado en su servidor Linux con proxy inverso Nginx, base de datos MySQL y encriptación SSL. El servicio systemd asegura que Ghost se inicie automáticamente en el reinicio del servidor. Las copias de seguridad periódicas y las actualizaciones mantienen su instalación segura y confiable. Monitoree regularmente los registros de la aplicación y mantenga su base de datos para asegurar un rendimiento óptimo. Para configuraciones avanzadas, consulte la documentación oficial de Ghost en ghost.org.


