7 min

CMS Ghost en Docker con Nginx Proxy Manager (2)

CMS Ghost en Docker con Nginx Proxy Manager (2)
Imagen de Warren Umoh / Unsplash

Continuando con el artículo de instalación de Ghost, en esta segunda parte vamos a abordar la configuración del envío de las newsletters en Ghost.

Configuración de la Newsletter

Por desgracia, Ghost no permite utilizar un servidor de email propio para el envío de estos correos mencionando un riesgo de seguridad para las cuentas de los usuarios ya que existe la posibilidad de que las cuentas de email utilizadas de esta forma pasen a formar parte de una lista negra de correos electrónicos y acaben siendo inservibles.

La única opción que nos queda es utilizar el servicio de Mailgun.

Lo primero que debemos hacer es registrarnos en la página de Mailgun. Aunque parezca que nos toca pagar para poder utilizar el servicio, si desmarcamos la casilla de indicar un método de pago podemos comprobar como nos permiten registrar una cuenta gratuita (con un límite de envío de 100 correos al día).

Página de registro de Mailgun. Se observa que la opción de añadir información de pago está desactivada e indica un aviso de que se limita a 100 envíos al día
Página de registro de Mailgun

Terminado el registro, iniciada la sesión y seleccionando Europa como región (de esta forma cumplimos con la RGPD), vamos a ir a la sección Send > SENDING > Domains para registrar un dominio o subdominio desde el que se enviarán los correos:

Sección domains con mi subdominio creado

Continuando dentro de la sección SENDING vamos ahora a Domain Settings:

Se ve la como estamos ubicados en la sección Domain Setting de Mailgun.
Panel de control de Mailgun

Dentro de esta sección vemos en la barra superior que tenemos las opciones de Settings, DNS records, SMTP credentials, Sending keys y Setup.
En la primera opción de Settings yo no he activado nada. No me interesa añadir ningún seguimiento de apertura de correos. Este tipo de estadísticas ya me las incluirá el propio Ghost.
En DNS records sí que tendremos que seguir las indicaciones que nos indica Mailgun para añadir los registros necesarios en nuestro servicio DNS para la recepción y envío de los correos:

Registros de envíos
Registros de recepción
Registro de seguimiento
Registro de autenticación

En SMTP credentials crearemos las cuentas desde las que se van a enviar los correos. Para el envío de las newsletter es REQUISITO IMPRESCINDIBLE a día de escribir este artículo que se denomine noreply. A mayores, podemos registrar otro en caso de que queramos utilizar también este servicio para el envío de los correos de alta de usuarios (que vimos en el anterior artículo). Recordad conservar la contraseña que se genera con cada cuenta.

SMTP credentials con 2 cuentas creadas. Noreply e info

Ya solo necesitamos crear una clave API para añadir a nuestra instalación de Ghost. La encontraremos dentro del menú de nuestro usuario, en API Security:

Y generamos una clave:

Por último, accedemos a nuestra instalación de Ghost y, en la sección de Newsletters, añadimos los datos de nuestro Mailgun:

Configuración de Mailgun en Ghost

Configuración de Tinybird para habilitar estadísticas

Lo primero que debemos hacer es editar el archivo .env de la primera instalación de Ghost, que si habéis seguido estas guías, deberíais tenerlo en /opt/ghost/
Crearemos una línea para solo habilitar los contenedores necesarios para conectar con Tinybird:

# Use the below flags to enable the Analytics or ActivityPub containers as well
#COMPOSE_PROFILES=analytics,activitypub
COMPOSE_PROFILES=analytics 

Lanzamos el compose de nuevo:

 sudo docker compose pull
 sudo docker compose up -d
Lanzado comando docker compose pull

Ghost incluye una serie de comandos para configurar el servicio de Tinybird, empezamos lanzando el de login:

 sudo docker compose run --rm tinybird-login

Al lanzarlo, lo primero que nos pedirá será elegir una región. Para cumplir con la RGPD elegimos el primero ya que está ubicado en Europa.
Nos mostrará un código de un solo uso que debemos apuntar para enlazar después de crear el usuario.
Y como resultado final de este comando, nos arroja un enlace para acceder a Tinybird y crear un usuario:

Tinybird no utiliza cookies y respeta el gdpr para la generación de las estadísticas

Al abrir el enlace que nos indica, pasamos a crear nuestro usuario del servicio:

Ojo si tenéis algún bloqueador tipo Adguard o PiHole porque a mí me bloqueaba totalmente el acceso.

Y se nos abrirá la página para ingresar el código de un solo uso que anotamos anteriormente.

Si no os lleva a esa página, utilizad de nuevo el enlace que os arrojó el comando tras mostraros el código de un solo uso. En mi caso tuve que hacerlo así porque no me llevó a la página para introducirlo...

Pantalla de Tinybird para introducir un código temporal

Una vez introducido, en la terminal muestra el mensaje de que todo ha ido bien con los datos de vuestro Workspace en Tinybird:

Mensaje de la terminal en el que la autenticación ha sido correcta

Continuamos con el siguiente comando que debemos utilizar. Con este sincronizamos los datos generados en el anterior punto con nuestra instalación de Ghost

 sudo docker compose run --rm tinybird-sync
Mensaje de la terminal de que la sincronización de los archivos se ha realizado

El siguiente de los comandos será para lanzar el contenedor que usará para enlazarlo todo y permitirnos ver las estadísticas:

  sudo docker compose run --rm tinybird-deploy
Lanzado el comando, el sistema ya se pone a hacer sus cosas

Hasta que ya nos marque que está todo listo:

Mensaje de la terminal que nos informa que ya está en funcionamiento

Por último, necesitamos conocer los tokens para configurar nuestro Ghost. Los podemos conseguir mediante el comando:

 sudo docker compose run --rm tinybird-login get-tokens 
El comando nos muestra los datos para la API URL, ID del workspace, y los tokens de Admin y tracker

O accediendo a nuestra cuenta en la web de Tinybird. Por ejemplo, a mí no me mostró el ADMIN TOKEN, pero lo puedo obtener desde la web:

Detalle de la web. En la sección Tokens podemos acceder a ellos

Y ya, para terminar, debemos añadir estos tokens a la configuración de nuestro contenedor de Ghost en Docker:

Detalle del apartado de Portainer con las variables de entorno nuevas

Ya solo resta activar la opción en nuestro blog:

Sección Analytics dentro de la página de administración de nuestro Ghost

ActivityPub de Ghost

Ya solo nos queda configurar correctamente Nginx Proxy Manager para que nos podamos comunicar con el servicio ActivityPub que nos ofrece gratuitamente Ghost.

Debemos hacer que las peticiones a direccion_de_nuestro_blog.com/.ghost/activitypub/*, direccion_de_nuestro_blog.com/.well-known/webfinger y direccion_de_nuestro_blog.com/.well-known/nodeinfo sean redirigidas a https://ap.ghost.org.

Para ello nos vamos a la configuración de nuestro Nginx Proxy Manager y en la pestaña Advance del Proxy Host de nuestro blog añadimos la siguiente configuración:

 location ~ ^/\.ghost/activitypub/ {
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP         $remote_addr;
    proxy_set_header Host              $host;
    add_header X-Content-Type-Options  nosniff;
    proxy_ssl_server_name on;
    proxy_pass https://ap.ghost.org;
}


location ~ ^/\.well-known/(webfinger|nodeinfo)$ {
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP         $remote_addr;
    proxy_set_header Host              $host;
    add_header X-Content-Type-Options  nosniff;
    proxy_ssl_server_name on;
    proxy_pass https://ap.ghost.org;
}

Ahora activamos el apartado Network dentro de los ajustes de nuestro Ghost:

Y si todo ha ido bien, en la sección Network del panel de administración ya comenzaremos a ver cuentas a las que podemos seguir dentro del fediverso y a publicar en nuestro propio perfil:

Detalle del apartado perfil dentro de la seccion Network


Este artículo es una continuación de este otro:

CMS Ghost en Docker con Nginx Proxy Manager (1)
Como ya sabéis (y si no lo sabéis deberías leer mi anterior post) para escribir esto estoy usando una instancia de Ghost autoalojada en mi servidor y Nginx Proxy Manager como proxy inverso para llegar a él. En un primer momento iba a explicar en esta entrada tooooodo el proceso

CC BY NC SA