Saltearse al contenido

Cloudflare Pages

Cloudflare Pages es la plataforma de Cloudflare para alojar sitios estáticos conectados a un repositorio de Git: cada commit en la rama de producción dispara un build y un despliegue.

En esta guía vamos a desplegar un sitio estático que lee el contenido de Content Island en tiempo de build, y vamos a automatizar el rebuild con el Custom HTTP Webhook de Content Island: cuando publiques contenido, Content Island llamará al deploy hook de Cloudflare y la web se regenerará sola.

Qué vamos a montar

El flujo completo tiene cuatro piezas:

  1. Publicas contenido en Content Island.
  2. Content Island llama al Custom HTTP Webhook que vamos a configurar.
  3. Esa URL es un Deploy Hook de Cloudflare Pages, que lanza un nuevo build.
  4. El build vuelve a leer el contenido y despliega la versión nueva.

Antes de empezar

  • Tu proyecto en un repositorio de Git (GitHub o GitLab), con un comando de build que genere el sitio estático y que lea el contenido mediante alguna de las formas de snapshot estático de Content Island: exportar el snapshot con content-island export como paso previo al build, o leerlo desde snapshotPath si lo versionas en el repositorio.
  • Una cuenta de Cloudflare.
  • El access token de tu proyecto de Content Island, que el build necesita para exportar o leer el contenido.

Paso 1 · Crear el proyecto en Cloudflare Pages

  1. En el panel de Cloudflare, ve a Compute → Workers & Pages y pulsa Create application.

    Sección Workers & Pages del panel de Cloudflare con el botón Create application
  2. En la pantalla Make something new, baja hasta el final y pulsa Continue to Pages. Es el flujo clásico de Pages, que es el que trae los deploy hooks que vamos a usar después.

    Enlace Continue to Pages al pie de la pantalla Make something new
  3. En Get started, elige Import an existing Git repository.

    Pantalla Get started de Cloudflare Pages con la opción de importar un repositorio de Git
  4. Selecciona tu cuenta de GitHub, marca el repositorio del proyecto y pulsa Begin setup. Si no ves tu repositorio en la lista, usa el enlace Cloudflare Pages app on GitHub para darle acceso.

    Selección de cuenta de GitHub y repositorio en Cloudflare Pages

Paso 2 · Configurar el build

  1. Cloudflare te muestra la sección Build settings vacía. Deja Framework preset en None si prefieres controlar tú los comandos, o elige tu framework para que los rellene por ti.

    Sección Build settings de Cloudflare Pages con los campos vacíos
  2. Rellena el comando y el directorio de salida de tu proyecto:

    • Build command: npm run build
    • Build output directory: dist
    Campo Build command con el valor npm run build
  3. Despliega Environment variables (advanced) y añade las variables que tu build necesita. Como mínimo, el access token con el que el cliente lee el contenido de Content Island.

    Variables de entorno CONTENT_ISLAND_ACCESS_TOKEN y SNAPSHOT_REFRESH_SECRET en Cloudflare Pages

    En la captura se ven dos: CONTENT_ISLAND_ACCESS_TOKEN, que necesita cualquier proyecto, y SNAPSHOT_REFRESH_SECRET, que es propia del proyecto de ejemplo. Usa los nombres que espere tu código.

  4. Pulsa Save and Deploy. Cloudflare clona el repositorio, ejecuta el build y publica el sitio en una URL *.pages.dev.

Paso 3 · Crear el Deploy Hook en Cloudflare

Un deploy hook es una URL secreta que, al recibir un POST, lanza un nuevo build de una rama concreta. Es la pieza que vamos a darle a Content Island.

  1. En tu proyecto de Pages, entra en la pestaña Settings, busca el bloque Build y, en Deploy Hooks, pulsa el botón +.

    Pestaña Settings del proyecto con la fila Deploy Hooks y el botón para añadir uno
  2. Dale un nombre que te diga de dónde viene la llamada — por ejemplo content-island-webhook — y elige la rama que quieres construir, normalmente main. Pulsa Save.

    Formulario de creación de un deploy hook en Cloudflare Pages
  3. Cloudflare te muestra la URL del hook. Cópiala con Click to copy: la vas a pegar en Content Island en el siguiente paso.

    Panel Deploy hook created con la URL del hook y el enlace para copiarla

Paso 4 · Conectar el Custom HTTP Webhook en Content Island

  1. Abre tu proyecto en Content Island, ve a la pestaña Webhook, pulsa Add New Webhook y elige Custom HTTP.

    Menú Add New Webhook de Content Island con la opción Custom HTTP
  2. Rellena el formulario:

    • Name: un alias para reconocerlo, por ejemplo Custom Webhook Cloudflare.
    • Destination URL: la URL del deploy hook que copiaste en el paso anterior.
    • Headers: déjalos vacíos. El deploy hook de Cloudflare se autentica con la propia URL y Content Island envía un POST sin cuerpo, que es exactamente lo que espera.

    Pulsa Save.

    Formulario del Custom HTTP Webhook de Content Island con la URL del deploy hook de Cloudflare

Paso 5 · Probar que funciona

  1. Sin salir del webhook, pulsa Send Test. Content Island lanza la petición en ese momento, así que puedes comprobar el resultado sin publicar nada.

    Botón Send Test del formulario de webhook de Content Island
  2. Vuelve a tu proyecto de Cloudflare Pages, a la pestaña Deployments: verás un despliegue nuevo, recién empezado y marcado con el icono de nube que indica que lo ha lanzado un deploy hook en lugar de un commit.

    Lista de despliegues de Cloudflare Pages con un despliegue nuevo lanzado por el deploy hook
  3. La prueba definitiva es la real: cambia cualquier cosa en la pestaña Content y publícala. Content Island llamará al hook, Cloudflare reconstruirá el sitio y, cuando termine el build, tu web mostrará el contenido nuevo sin que hayas tocado nada.

Por qué el Custom HTTP Webhook y no el de GitHub

Puedes conseguir lo mismo con el webhook de GitHub, pero das un rodeo: Content Island lanza un repository_dispatch, una GitHub Action escucha ese evento y esa Action hace un curl contra el deploy hook. Tres saltos, un token de GitHub con permisos de escritura y un workflow que mantener, para acabar haciendo una única petición HTTP.

El Custom HTTP Webhook llama directamente a la URL de Cloudflare. Sin intermediarios y sin tokens de por medio.

Referencias