Перейти к содержанию
Acecore

Как добавить комментарии в Astro-блог только на Cloudflare

by Gui
Содержание
Как добавить комментарии в Astro-блог только на Cloudflare

Комментарии добавляют состояние в статический сайт.

Acecore не стал подключать внешний сервис комментариев. В PR #101 функция реализована только на Cloudflare.

  • Astro показывает UI.
  • Cloudflare Pages Functions предоставляет /api/comments.
  • Cloudflare D1 хранит комментарии.
  • Cloudflare Turnstile защищает POST.
  • wrangler.jsonc разделяет preview и production.

Главное преимущество: комментарии не становятся сторонним виджетом внутри страницы.

Архитектура

СлойФайл или сервис
UIsrc/components/BlogComments.astro
Вставка в статьюsrc/views/BlogPostPage.astro
APIfunctions/api/comments.ts
ХранилищеD1 binding COMMENTS_DB
ЗащитаCloudflare Turnstile
Schemamigrations/0001_create_blog_comments.sql

UI читает через GET /api/comments?slug=...&locale=... и отправляет через POST /api/comments.

Function проверяет origin, payload, Turnstile, лимиты, дубликаты и запрещенный контент.

Почему D1

Комментарии удобно хранить в SQL: фильтр по статье, сортировка по времени, soft delete через deleted_at, дубликаты через body_hash, лимиты через client_hash.

Видимые строки имеют deleted_at IS NULL. Spam можно скрыть без физического удаления.

Запросы используют prepared statements и bind(), поэтому пользовательский ввод не склеивается с SQL.

Wrangler и окружения

COMMENTS_DB задается в wrangler.jsonc. Preview пишет в acecore-comments-preview, production — в acecore-comments-production.

Это защищает production от случайных записей из PR preview.

Turnstile на сервере

Widget в браузере недостаточен.

Pages Function отправляет token в Cloudflare Siteverify с TURNSTILE_SECRET_KEY, а также проверяет hostname из результата.

Anti-spam

Первая версия строгая:

  • без URL
  • без email
  • без HTML
  • без Markdown-ссылок
  • без длинных повторов
  • без рекламных слов
  • honeypot поле

Rate limit есть в памяти и в D1. IP не сохраняется напрямую; используется salted hash.

SEO

Комментарии загружаются на клиенте, а блок помечен data-pagefind-ignore. Они не индексируются как основной текст статьи.

Для корпоративного блога это безопаснее: статья — редакционный контент, комментарии — взаимодействие.

Итог

Внешний сервис комментариев удобен, но не обязателен.

Если сайт уже работает на Cloudflare Pages, Pages Functions + D1 + Turnstile + Wrangler достаточно для легкой системы комментариев.

Ссылки

Вопросы
Почему не внешний виджет?
Внешний сервис быстро подключается, но UI, данные, скрипты, модерация и миграция зависят от него. Здесь все остается в сайте и Cloudflare.
Достаточно ли D1?
Для выборки по post_slug, сортировки, soft delete, rate limit и дубликатов D1 хорошо подходит.
Достаточно ли Turnstile в браузере?
Нет. Pages Function должна проверить token через Siteverify перед записью в D1.

Комментарии

Загрузка комментариев...

Ссылки, email-адреса и рекламный текст публиковать нельзя.

G

Gui

Генеральный директор Acecore. Руководит бизнес-системами, вебом, базами данных и инфраструктурой, качеством и внедрением ИИ от формулирования бизнес-задач до проектирования, запуска и дальнейшего улучшения. Опирается на практическую экспертизу C#/.NET и также учитывает PHP/JavaScript, SQL Server/PostgreSQL/MySQL и Linux/Windows Server, проектируя требования, технологический выбор, стандарты качества и GitHub-ориентированные процессы разработки как единую систему. Встраивает генеративный ИИ в процессы разработки, проверки и организации информации как практическую основу, помогающую небольшим командам быстрее и надежнее достигать результата.

Формулирование бизнес-задачТехнологический выборПроектирование системC#/.NETПроектирование БД/инфраструктурыGitHub-процессы разработкиГенеративный ИИПроектирование ИИ-процессовПроектирование качестваИнтеграция на местах

Хотите узнать больше о наших услугах?

Мы обеспечиваем комплексную поддержку: разработка систем, веб-дизайн, графический дизайн и IT-образование.

Похожие статьи

Поиск статей