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