Как добавить комментарии в Astro-блог только на Cloudflare
Содержание
Комментарии добавляют состояние в статический сайт.
Acecore не стал подключать внешний сервис комментариев. В PR #101 функция реализована только на Cloudflare.
- Astro показывает UI.
- Cloudflare Pages Functions предоставляет
/api/comments. - Cloudflare D1 хранит комментарии.
- Cloudflare Turnstile защищает POST.
wrangler.jsoncразделяет preview и production.
Главное преимущество: комментарии не становятся сторонним виджетом внутри страницы.
Архитектура
| Слой | Файл или сервис |
|---|---|
| UI | src/components/BlogComments.astro |
| Вставка в статью | src/views/BlogPostPage.astro |
| API | functions/api/comments.ts |
| Хранилище | D1 binding COMMENTS_DB |
| Защита | Cloudflare Turnstile |
| Schema | migrations/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 достаточно для легкой системы комментариев.
Ссылки
Почему не внешний виджет?
Достаточно ли D1?
Достаточно ли Turnstile в браузере?
Комментарии
Gui
Генеральный директор Acecore. Руководит бизнес-системами, вебом, базами данных и инфраструктурой, качеством и внедрением ИИ от формулирования бизнес-задач до проектирования, запуска и дальнейшего улучшения. Опирается на практическую экспертизу C#/.NET и также учитывает PHP/JavaScript, SQL Server/PostgreSQL/MySQL и Linux/Windows Server, проектируя требования, технологический выбор, стандарты качества и GitHub-ориентированные процессы разработки как единую систему. Встраивает генеративный ИИ в процессы разработки, проверки и организации информации как практическую основу, помогающую небольшим командам быстрее и надежнее достигать результата.
Хотите узнать больше о наших услугах?
Мы обеспечиваем комплексную поддержку: разработка систем, веб-дизайн, графический дизайн и IT-образование.
Похожие статьи
Как развивать сайт на Astro + Cloudflare по функциям 7 июня 2026 г. в 19:00
Руководство по внедрению Sveltia CMS 7 июня 2026 г. в 16:00