Cómo armar un blog con Amazon EC2 y Ghost

Pongo en marcha este blog a través de Ghost, una plataforma de publicación digital orientada a creadores de contenido, lanzada en 2013.

Ghost es un CMS (sistema de gestión de contenidos) que ofrece varias opciones de alojamiento en la web. La solución más rápida y sencilla pasa por suscribirse a su servicio Ghost Pro. Al ser un software de código abierto, también puede ubicarse en servidores ajenos; eso sí, con una configuración más compleja.

Para su instalación y ejecución, Ghost necesita un ordenador –una máquina local o remota– con al menos 1 GB de memoria RAM y que pueda gestionar los paquetes NPM y Node.js, entre otros requerimientos técnicos.

Como me gustan los retos elegí la alternativa difícil, pero a la vez menos costosa en inversión. En este post voy a explicar los pasos seguidos para lanzar mi blog de música: sona.ivanleis.eu.

Pantalla del servicio EC2 en AWS.

En primer lugar abrí una cuenta en AWS, el servicio de computación en la nube de Amazon (en otro post explicaré cómo se alquilan sus ordenadores virtuales o "instancias"). AWS ofrece un año de capa gratuita, ideal para hacer experimentos en la web como este mismo sitio. Nos conectamos a la consola de administración y accedemos al servicio EC2. Vemos en la imagen superior cómo ya tenemos una instancia abierta, es decir una máquina virtual.

Vamos a lanzar una nueva instancia, AWS nos presentará un listado de sistemas operativos disponibles y elegimos Ubuntu Server (64 bits).

Opciones de sistemas operativos para configurar instancias de AWS.

Nos preguntará el tipo de instancia que queremos según nuestras necesidades de CPU, memoria y almacenamiento. La capa gratuita ofrece td2.micro, con 1 GB de RAM, potencia suficiente para alojar Ghost. Lanzamos la instancia, revisamos los detalles, y acto seguido nos pedirá nuestro par de claves de AWS, o bien crearemos un nuevo par. Aquí aprovechamos unas claves que ya teníamos guardadas.

Regresamos al panel de EC2 y vemos la nueva instancia, con su propia dirección IP pública, en este caso 3.249.75.205. Esta será la máquina donde alojaremos el blog sona.ivanleis.eu.

Marcada en rojo, la IP de la instancia recién creada.

Bien, al lío. Abrimos en nuestro ordenador la consola (Terminal en Mac o Linux, en Windows se pueden usar otros programas SSH como Putty). Y nos conectamos con nuestra llave, o par de claves:

ssh -i "llave.pem" ubuntu@ec2-3-269-75-205.eu-west-1.compute.amazonaws.com

Pantalla de Terminal al acceder al servicio EC2 por SSH.

Estamos dentro del servidor. Vamos a mantener mismo usuario, ubuntu. Y ejecutaremos los comandos con sudo. Primero actualizamos el sistema:

# Update package lists
sudo apt-get update

# Update installed packages
sudo apt-get upgrade

Finalizado el proceso, instalamos la herramienta Nginx para habilitar un servidor web: sudo apt-get install nginx. Siguiendo el tutorial de Ghost, le otorgamos permisos: sudo ufw allow 'Nginx Full'. Instalamos además MySQL, un gestor de bases de datos: sudo apt-get install mysql-server.

Como estamos en Ubuntu 20.04, continuamos con la recomendación de aplicar una contraseña a MySQL para asegurar la compatibilidad con Ghost

# To set a password, run
sudo mysql

# Now update your user with this command
# Replace 'password' with your password, but keep the quote marks!
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

# Then exit MySQL
quit

Siguiente paso es instalar Node.js

# Add the NodeSource APT repository for Node 14
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash

# Install Node.js
sudo apt-get install -y nodejs

Y ahora viene la parte divertida; descargamos la herramienta de instalación Ghost-CLI con el comando sudo npm install ghost-cli@latest -g

¡Lo tenemos! Vamos a crear un directorio o carpeta donde irá nuestro blog, dentro de /var/www que es la opción idónea para servir los contenidos a Internet. Aquí la denomino sona, le damos los permisos a nuestro usuario y accedemos:

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

Ubicados en la carpeta, corremos el instalador con ghost install. Al tiempo que descarga los paquetes nos hará algunas preguntas:

  • Enter your blog URL: ponemos la IP de nuestra instancia http://3.249.75.205
  • Enter your MySQL username: root
  • Enter your MySQL password: [tucontraseña]
  • Enter your Ghost database name: sona_prod
  • Do you wish to set up "ghost" mysql user?: Yes
  • Do you want to set up Nginx?: Yes
  • Do you wish to set up Systemd? Yes
  • Do you want to start Ghost? Yes
  • ✔ Starting Ghost

Bien, tenemos iniciado el servidor Ghost en nuestra carpeta sona. Solo nos queda un último detalle, asignar permisos de seguridad a la instancia EC2 para que pueda servir el tráfico a la web. Para ello nos dirigimos a nuestra consola de AWS y localizamos "Grupos de seguridad".

Debemos añadir reglas de entrada pulsando en el botón editar reglas de entrada y abrir los puertos 80 y 443 para el acceso por http y https. En total son 4 reglas más la que viene por defecto para habilitar el SSH por el puerto 22.

Reglas de entrada en nuestra instancia.

Si todo ha ido bien, en cuanto accedamos a nuestra IP pública, voilà! Tenemos un blog de Ghost público y listo para ser utilizado.

Sona!
Revista de artículos musicales por Iván Leis. Una selección de entrevistas a grupos de rock, pop, tecno o rap; crónicas de conciertos y críticas de discos.

Y esto es todo por hoy. Si tienes comentarios que hacer sobre este post o alguna otra cuestión en la que te pueda ayudar, te espero en la página de Contacto. Toda la información sobre instalación Ghost la puedes encontrar en inglés aquí:

Ghost Resources — Stories & Ideas About Indie Publishing
A library of resources to help you share content, grow your audience, and build an independent subscription business in the creator economy!