Cómo desplegar Ghost Blog con Nginx en Ubuntu 20.04

Ghost es una plataforma de blogs gratuita, de código abierto y ligera, construida sobre Node.js. Es sencilla, personalizable y te permite crear y publicar tus contenidos en Internet. Está especialmente diseñada para bloguear, por lo que es mucho más rápida que otras plataformas de blogueo. Ofrece un rico conjunto de funciones, algunas de las cuales se enumeran a continuación:

  • Editor Markdown
  • Publicación programada
  • Proporciona aplicaciones para Linux, Mac y Windows
  • Proporciona cientos de temas gratuitos y premium
  • Analítica incorporada
  • Proporciona un plugin de migración para migrar de WordPress a Ghost

Este tutorial explicará cómo instalar Ghost con Nginx y Let’s Encrypt SSL en Ubuntu 20.04.

Requisitos previos

  • Un servidor con Ubuntu 20.04.
  • Un nombre de dominio válido apuntando a la IP de tu servidor.
  • Una contraseña de root configurada en tu servidor.

Cómo empezar

En primer lugar, se recomienda actualizar la caché de paquetes de APT a la última versión. Puedes actualizarla con el siguiente comando:

apt-get update -y

Una vez actualizada la caché de APT, instala otras dependencias necesarias utilizando el siguiente comando:

apt-get install gnupg2 curl unzip git acl -y

A continuación, también tendrás que instalar el Node.js en tu sistema.

En primer lugar, añade el repositorio de Node.js con el siguiente comando:

curl -sL https://deb.nodesource.com/setup_12.x | bash -

Una vez instalado el repositorio, ejecuta el siguiente comando para instalar el Node.js en tu sistema.

apt-get install nodejs -y

Una vez finalizada la instalación, verifica la versión de Node.js con el siguiente comando:

node -v

Deberías obtener la siguiente salida:

v12.22.1

A continuación, verifica la versión de NPM con el siguiente comando:

npm -v

Deberías obtener el siguiente resultado:

6.14.12

Instalar Nginx y MariaDB

A continuación, tendrás que instalar el servidor web Nginx y el servidor de bases de datos MariaDB en tu sistema. Puedes instalar ambos paquetes con el siguiente comando:

apt-get install mariadb-server nginx -y

Una vez finalizada la instalación, asegura la instalación de MariaDB y establece la contraseña raíz de MariaDB con el siguiente comando:

mysql_secure_installation

Responde a todas las preguntas para asegurar la instalación de MariaDB:

Enter current password for root (enter for none): 
Set root password? [Y/n] Y
New password: 
Re-enter new password: 
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

A continuación, inicia sesión en MariaDB con el siguiente comando:

mysql -u root -p

Una vez iniciada la sesión, crea una base de datos y un usuario para Ghost con el siguiente comando:

MariaDB [(none)]> CREATE DATABASE ghostdb;
MariaDB [(none)]> CREATE USER 'ghostuser'@'localhost' IDENTIFIED BY 'password';

A continuación, concede todos los privilegios a la base de datos de Ghost con el siguiente comando:

MariaDB [(none)]> GRANT ALL ON ghostdb.* TO 'ghostuser'@'localhost';

A continuación, vacía los privilegios y sal de MariaDB con el siguiente comando:

MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT;

Una vez que hayas terminado, puedes pasar al siguiente paso.

Instalar Ghost Cli

A continuación, tendrás que instalar el Ghost Cli para instalar y gestionar el Ghost. Puedes instalarlo utilizando el NPM como se muestra a continuación:

npm install -g ghost-cli@latest

Una vez instalado, verifica la versión instalada de Ghost Cli con el siguiente comando:

ghost version

Deberías ver la siguiente salida:

Ghost-CLI version: 1.16.3

Instalar Ghost

En primer lugar, crea un usuario independiente para Ghost con el siguiente comando:

adduser user1

A continuación, añade el usuario1 al grupo sudo y www-data con el siguiente comando:

adduser user1 sudo
adduser user1 www-data

A continuación, inicia sesión con user1 y crea un directorio para Ghost con el siguiente comando:

su - user1
sudo mkdir /var/www/ghost

A continuación, establece el permiso y la propiedad adecuados con el siguiente comando:

sudo chown -R www-data:www-data /var/www/ghost
sudo chown -R www-data:www-data /var/www/
sudo chmod 775 /var/www/ghost
sudo setfacl -R -m u:user1:rwx /var/www/ghost/

A continuación, cambia el directorio a ghost e instala la plataforma de blogs Ghost con el siguiente comando:

cd /var/www/ghost
ghost install

Se te pedirá que proporciones la URL de tu blog, el nombre de la base de datos, el nombre de usuario, la contraseña y otra información, como se muestra a continuación:

? Enter your blog URL: https://ghost.linuxbuz.com
? Enter your MySQL hostname: localhost
? Enter your MySQL username: ghostuser
? Enter your MySQL password: [hidden]
? Enter your Ghost database name: ghostdb
? Configuring Ghost
? Setting up instance
+ sudo useradd --system --user-group ghost
+ sudo chown -R ghost:ghost /var/www/ghost/content
? Setting up "ghost" system user
? Setting up "ghost" mysql user [skipped]
? Do you wish to set up Nginx? Yes
+ sudo mv /tmp/ghost-linuxbuz-com/ghost.linuxbuz.com.conf /etc/nginx/sites-available/ghost.linuxbuz.com.conf
+ sudo ln -sf /etc/nginx/sites-available/ghost.linuxbuz.com.conf /etc/nginx/sites-enabled/ghost.linuxbuz.com.conf
+ sudo nginx -s reload
? Setting up SSL [skipped]
? Do you wish to set up Systemd? Yes
+ sudo mv /tmp/ghost-linuxbuz-com/ghost_ghost-linuxbuz-com.service /lib/systemd/system/ghost_ghost-linuxbuz-com.service
+ sudo systemctl daemon-reload
? Setting up Systemd
+ sudo systemctl is-active ghost_ghost-linuxbuz-com
? Do you want to start Ghost? (Y/n) 

En este punto, Ghost está instalado e iniciado.

Proteger Ghost con Let’s Encrypt SSL

A continuación, tendrás que proteger Ghost con Let’s Encrypt SSL.

En primer lugar, instala el cliente Certbot con el siguiente comando:

sudo apt-get install certbot python3-certbot-nginx -y

Una vez instalado, ejecuta el siguiente comando para descargar Let’s Encrypt SSL y configurar Nginx para que utilice ese certificado:

sudo certbot --nginx -d ghost.linuxbuz.com

Se te pedirá que proporciones tu dirección de correo electrónico y que aceptes las condiciones del servicio, como se muestra a continuación:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for ghost.linuxbuz.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/ghost.linuxbuz.com.conf

A continuación, elige si deseas o no redirigir el tráfico HTTP a HTTPS:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Escribe 2 y pulsa Intro para completar la instalación.

Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/ghost.linuxbuz.com.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://ghost.linuxbuz.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=ghost.linuxbuz.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/ghost.linuxbuz.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/ghost.linuxbuz.com/privkey.pem
   Your cert will expire on 2021-07-13. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Ahora, puedes verificar el sitio web de Ghost con el siguiente comando;

ghost ls

Deberías ver la siguiente salida:

+ sudo systemctl is-active ghost_ghost-linuxbuz-com
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? Name               ? Location       ? Version ? Status               ? URL                        ? Port ? Process Manager ?
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? ghost-linuxbuz-com ? /var/www/ghost ? 4.2.1   ? running (production) ? https://ghost.linuxbuz.com ? 2368 ? systemd         ?
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

También puedes verificar el servicio Ghost con el siguiente comando:

sudo systemctl status ghost_ghost-linuxbuz-com

Deberías ver la siguiente salida:

? ghost_ghost-linuxbuz-com.service - Ghost systemd service for blog: ghost-linuxbuz-com
     Loaded: loaded (/lib/systemd/system/ghost_ghost-linuxbuz-com.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2021-04-14 07:05:33 UTC; 9min ago
       Docs: https://ghost.org/docs/
   Main PID: 7546 (node)
      Tasks: 22 (limit: 2353)
     Memory: 134.3M
     CGroup: /system.slice/ghost_ghost-linuxbuz-com.service
             ??7546 ghost run
             ??7590 /usr/bin/node current/index.js

Apr 14 07:13:44 ubuntu node[7590]: [2021-04-14 07:13:44] INFO "GET /ghost/assets/img/dashboard/start-membership-baafa2c6558d118ae59cb1fddab045>
Apr 14 07:13:44 ubuntu node[7590]: [2021-04-14 07:13:44] INFO "GET /ghost/assets/img/dashboard/the-browser-f5e7e199fe82d8435913e84d022fa7e1.pn>
Apr 14 07:13:44 ubuntu node[7590]: [2021-04-14 07:13:44] INFO "GET /ghost/assets/img/dashboard/join-community-bb5478f7dca6c04a2d0baf2b02f880fb>
Apr 14 07:13:44 ubuntu node[7590]: [2021-04-14 07:13:44] INFO "GET /ghost/api/canary/admin/members/?filter=status%3Apaid&order=created_at%20as>
Apr 14 07:14:11 ubuntu node[7590]: [2021-04-14 07:14:11] INFO "GET /" 200 475ms
Apr 14 07:14:11 ubuntu node[7590]: [2021-04-14 07:14:11] INFO "GET /" 200 480ms
Apr 14 07:14:15 ubuntu node[7590]: [2021-04-14 07:14:15] INFO "GET /members/api/site/" 200 12ms
Apr 14 07:14:18 ubuntu node[7590]: [2021-04-14 07:14:18] INFO "GET /" 304 142ms
Apr 14 07:14:25 ubuntu node[7590]: [2021-04-14 07:14:25] INFO "GET /members/api/site/" 304 4ms
Apr 14 07:14:26 ubuntu node[7590]: [2021-04-14 07:14:26] INFO "GET /members/api/member/" 401 4ms

Accede a la interfaz de administración de Ghost

Ahora, abre tu navegador web y accede a la interfaz de administración de Ghost utilizando la URL https://ghost.linuxbuz.com/ghost/. Deberías ver la siguiente página:

Instalador del Blog Fantasma

Haz clic en el botón Crea tu cuenta para crear tu primera cuenta:

Crea tu cuenta

Proporciona los datos de tu cuenta y haz clic en «Lo haré más tarde » en la parte inferior de la pantalla. Deberías ver la interfaz de administración de Ghost en la página siguiente:

Panel de control de Ghost CMS

También puedes acceder a tu sitio web de Ghost utilizando la URL https://ghost.linuxbuz.com/. Deberías ver la siguiente página:

Ghost CMS Frontend

Conclusión

Enhorabuena! has instalado correctamente la plataforma de blogs Ghost en Ubuntu 20.04. Ahora puedes crear y publicar tus propios contenidos desde la interfaz de Ghost.

También te podría gustar...