Ir al contenido
Acecore

Cómo añadir comentarios a un blog Astro usando solo Cloudflare

by Gui
Índice
Cómo añadir comentarios a un blog Astro usando solo Cloudflare

Los sitios estáticos son sencillos hasta que necesitan guardar estado. Un sistema de comentarios es un buen ejemplo.

En Acecore no usamos un servicio externo de comentarios. En PR #101 lo resolvimos solo con Cloudflare:

  • Astro muestra la UI.
  • Cloudflare Pages Functions expone /api/comments.
  • Cloudflare D1 guarda los comentarios.
  • Cloudflare Turnstile protege el POST.
  • wrangler.jsonc separa preview y production.

La ventaja es que el comentario no queda como una isla de terceros dentro de la página.

Arquitectura

CapaArchivo o servicio
UIsrc/components/BlogComments.astro
Inserción en artículosrc/views/BlogPostPage.astro
APIfunctions/api/comments.ts
DatosD1 binding COMMENTS_DB
ProtecciónCloudflare Turnstile
Schemamigrations/0001_create_blog_comments.sql

La UI lee con GET /api/comments?slug=...&locale=... y publica con POST /api/comments.

La Function valida origin, payload, Turnstile, límites, duplicados y contenido bloqueado antes de insertar.

D1 como almacenamiento

Los comentarios necesitan consultas simples pero relacionales:

  • filtrar por post_slug
  • ordenar por created_at
  • ocultar con deleted_at
  • detectar duplicados con body_hash
  • limitar por client_hash

Por eso D1 es más cómodo que un almacén key-value. Además, las consultas usan prepared statements con bind(), evitando concatenar input del usuario en SQL.

Configuración por Wrangler

El binding COMMENTS_DB se define en wrangler.jsonc. Preview apunta a acecore-comments-preview; production apunta a acecore-comments-production.

Esta separación evita que una preview de Pull Request escriba en la base real.

Turnstile en servidor

El widget del navegador no basta. El token se envía a Pages Functions y allí se valida contra Cloudflare Siteverify con TURNSTILE_SECRET_KEY.

También se comprueba el hostname devuelto. Esto es importante para aceptar previews legítimas y rechazar tokens emitidos desde orígenes inesperados.

Controles anti-spam

La primera versión es estricta:

  • rechaza URLs
  • rechaza emails
  • rechaza HTML
  • rechaza enlaces Markdown
  • rechaza texto repetitivo
  • rechaza palabras promocionales
  • usa honeypot

También combina límites en memoria con límites persistentes en D1. El identificador del cliente se guarda como hash con salt, no como IP sin procesar.

SEO

Los comentarios se cargan en cliente y la sección usa data-pagefind-ignore. Por tanto, no se indexan como contenido principal.

Para un blog corporativo, esto es razonable: el artículo es contenido revisado; los comentarios son interacción.

Resumen

Un servicio externo puede ser práctico, pero si el sitio ya vive en Cloudflare Pages, una función de comentarios ligera puede vivir enteramente en Cloudflare.

Pages Functions, D1, Turnstile y Wrangler son suficientes para mantener UI, datos, seguridad y entornos bajo el mismo modelo operativo.

Referencias

Preguntas frecuentes
¿Por qué no usar un widget externo?
Porque la UI, los datos, la carga de scripts, la moderación y la migración quedan bajo control del servicio. Aquí todo queda dentro del sitio y Cloudflare.
¿D1 basta para comentarios?
Para leer por post_slug, ordenar por created_at, ocultar con deleted_at, limitar por cliente y detectar duplicados, D1 encaja bien.
¿Turnstile en el cliente es suficiente?
No. La Function debe validar el token con Siteverify antes de escribir en D1.

Comentarios

Cargando comentarios...

No se pueden publicar enlaces, correos ni textos promocionales.

G

Gui

CEO de Acecore. Lidera sistemas de negocio, web, bases de datos e infraestructura, calidad y adopción de IA desde la definición de problemas de negocio hasta el diseño, la puesta en marcha y la mejora posterior. Se apoya en capacidad práctica con C#/.NET y también cubre PHP/JavaScript, SQL Server/PostgreSQL/MySQL y Linux/Windows Server, diseñando requisitos, selección tecnológica, estándares de calidad y operaciones de desarrollo basadas en GitHub como un flujo coherente. Incorpora la IA generativa en procesos de desarrollo, verificación y organización de información, como una base práctica para que equipos pequeños entreguen más rápido y con mayor fiabilidad.

Definición de problemas de negocioSelección tecnológicaDiseño de sistemasC#/.NETDiseño de bases de datos/infraestructuraOperaciones de desarrollo en GitHubIA generativaDiseño de flujos de IADiseño de calidadIntegración en sitio

¿Quiere saber más sobre nuestros servicios?

Ofrecemos soporte integral en desarrollo de sistemas, diseño web, diseño gráfico y educación IT.

Artículos relacionados

Buscar artículos