Instalación de blog Ghost

Ghost es un software de gestión de blogs.

Los requisitos son bastante mínimos por lo que es ideal para un vps. Además, al estar basado en node.js promete un rendimiento y velocidades de carga excepcionales.

Veamos como es el proceso de instalación en un servidor con Ubuntu 16.04 LTS que ya tiene instalados Apache y mySQL.

Instalación de Node.js

La forma de obtener una versión más reciente de Node.js es agregar un PPA (archivo de paquete personal) mantenido por NodeSource en lugar de usar los repositorios de Ubuntu.

Cuidado con instalar la última versión de Node.js, hay que verificar en la documentación de Ghost la versión requerida, a fecha de escritura de este post la última version de Node.js es la 12, pero Ghost soporta como máximo la 10, no nos dejará instalar si no disponemos de una versión de Node.js soportada.

cd ~
curl -sL https://deb.nodesource.com/setup_10.x -o nodesource_setup.sh
sudo bash nodesource_setup.sh

El PPA se añadirá a tu configuración y su caché de paquetes locales se actualizará automáticamente. Después de ejecutar el script de configuración de NodeSource puedes instalar el paquete de Node.js de la misma manera que cualquier otro paquete de Ubuntu.

sudo apt-get install nodejs

Creación de un usuario específico para Ghost

Ghost no se puede ejecutar como el usuario administrador, así que es necesario crear un usuario específico, pero ha de ser añadido al grupo de sudoers ya que requiere algunos permisos especiales.

adduser <user>
usermod -aG sudo <user>

Cambiamos al nuevo usuario y el resto del proceso de instalación lo realizamos con él, ejecutando sudo cuando necesitemos algun permiso de administrador.

su - <user>

Crear base de datos mysql y usuario

Craremos la base de datos <ghostdb> y el usuario <ghostdb_user> en el mySQL local

Yo lo he realizado desde phpMyAdmin pero los scripts de creacion podrian ser estos:

CREATE DATABASE IF NOT EXISTS '<ghostdb>' DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER '<ghostdb_user>'@'%' IDENTIFIED BY '<ghostdb_user_password>';
GRANT USAGE ON <ghostdb>.* TO '<ghostdb_user>'@'%';
GRANT ALL PRIVILEGES ON <ghostdb>.* TO '<ghostdb_user>'@'%';

Instalar Ghost-CLI

Ghost-CLI es la herramienta de gestión de sitios Ghost. Tambien se utiliza para instalar sitios nuevos por lo que la necesitamos para los siguientes pasos.

sudo npm install ghost-cli@latest -g

Instalar Ghost

Una vez instalada la herramienta Ghost-CLI podemos usarla para instalar Ghost.

Instalar Ghost en la carpeta /root o en /home no funcionará correctamente, por lo que hemos de crear un directiorio específico en otra ruta. Siguiendo el modelo de Ubuntu crearemos un directorio con los permisos adecuados en /var/www

sudo mkdir -p /var/www/ghost
sudo chown <user>:<user> /var/www/ghost
sudo chmod 775 /var/www/ghost

Entramos en el directorio creado e iniciamos la instalación dentro del mismo

cd /var/www/ghost
ghost install

Un asistente chequeará que el entorno es correcto y nos irá preguntando los datos necesarios para la instalación.

Blog URL

Indicaremos la URL con HTTPS en la que vamos a publicar el blog en internet, por ejemplo https://blog.example.com

MySQL hostname

Indicaremos el nombre de host donde se haya la base de datos que creamos anteriormente, en nuestro caso localhost

MySQL username / password

Indicamos el usuario y la contraseña creados anteriormente, <ghostdb_user> y <ghostdb_user_password>

Ghost database name

Indicamos el nombre de la base de datos creada anteriormente <ghostdb>

Set up NGINX? (Recommended)

Si no tenemos instalado NGINX este paso se omitirá automaticamente, si lo tuviesemos indicariamos que NO, ya que vamos a configurar el acceso desde Apache

Set up SSL? (Recommended)

Igual que el paso anterior, si no tenemos NGINX se omite automaticamente.

Set up systemd? (Recommended)

Indicaremos YES para que se creen los scripts de inicio mediante systemd.

Start Ghost?

Indicamos YES para que se lance el servicio y empiece a funcionar el blog.

El resultado deberia ser similar a este

ghost setup
? Enter your blog URL: https://blog.example.com
? Enter your MySQL hostname: localhost
? Enter your MySQL username: <ghostdb_user>
? Enter your MySQL password (skip to keep current password): [hidden]
? Enter your Ghost database name: <ghostdb>
✔ Configuring Ghost
+ sudo chown -R <user>:<user> /var/www/ghost/content
✔ Setting up "ghost" system user
ℹ Setting up "ghost" mysql user [skipped]
Nginx is not installed. Skipping Nginx setup.
ℹ Setting up Nginx [skipped]
Nginx setup task was skipped, skipping SSL setup
ℹ Setting up SSL [skipped]
Systemd service has already been set up. Skipping Systemd setup
ℹ Setting up Systemd [skipped]

Veremos que Ghost se ejecuta en http://localhost:2368

Obtener certificado en Let’s Encrypt para servir el blog por HTTPS

Para publicar nuestro blog encriptado por https necesitaremos un certificado válido. Para ello generaremos uno nuevo con Let’sEncrypt

Si no tuviesemos letsencrypt ya instalado lo añadiriamos con

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-apache

Generamos el nuevo certificado con

sudo certbot --apache -d blog.example.com

Esto nos generará un certificado para blog.example.com en /etc/letsencrypt/live/blog.example.com/

Configurar Apache como proxy inverso de Ghost

Finalmente configuraremos Apache para que haga de proxy inverso del blog.

Hemos de configurarlo para que sirva la url https://blog.example.com usando el certificado generado anteriromente, pero en lugar de servir contenido desde un directorio hará de proxy inverso y redireccionará las peticiones al servidor Ghost en http://localhost:2368

Pare ello crearemos el fichero de configuración del sitio en /etc/apache2/sites-available/blog.example.com.conf

Editamos el fichero

sudo vi /etc/apache2/sites-available/blog.example.com.conf

E introducimos lo siguiente

<VirtualHost *:80>

  ServerName blog.example.com

  # Force http to https
  Redirect permanent http://blog.example.com https://blog.example.com

</VirtualHost>

<VirtualHost *:443>

  ServerName blog.example.com

  # Configuracion HTTPS
  SSLEngine on
  SSLProtocol all -SSLv2
  SSLCipherSuite HIGH
  SSLCertificateFile /etc/letsencrypt/live/blog.example.com/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/blog.example.com/privkey.pem

  # Configuracion proxy inverso
  ProxyPass / http://localhost:2368/
  ProxyPassReverse / http:/127.0.0.1:2368/
  ProxyPreserveHost On

  RequestHeader set X-Forwarded-Proto "https"

</VirtualHost>

Grabamos el fichero y activamos el sitio

sudo a2ensite blog.example.com.conf

Finalmente reiniciamos Apache para tomar los cambios

sudo service apache restart

Nuestro blog en Ghost ya deberia estar accesible en https://blog.example.com

Ghost

Nuevo blog Ghost

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.