Блог умеет публиковаться, но он молчит. Статью можно прочитать, а сказать что-то в ответ — некуда. Письма и Telegram — это личное, а комментарии хочется держать рядом с текстом. Значит, нужны комментарии.
Что я перебрал
Первым делом я посмотрел, как это решают другие.
- giscus — комментарии живут в GitHub Discussions, на страницу вставляется
скрипт. Ноль сервера, но писать можно только с GitHub-аккаунтом, а данные — не у меня.
- Свой модуль — я уже так делал с блогом и каталогом данных. Максимальный
контроль, но это форма для ввода, БД, модерация, антиспам, вложенность и вся защита с нуля.
- Isso, Cusdis, Schnack — лёгкие, но либо стагнируют, либо просят
Postgres/Node.
- Remark42 — зрелый self-hosted сервер на Go, один контейнер, хранит всё у
меня, есть модерация, антиспам и вебхуки.
Я выбрал Remark42. Он не требует ни внешней БД, ни обязательных OAuth — достаточно анонимного входа, а данные лежат в обычном файле на моём сервере.
Подпапка вместо поддомена
С ntfy вышло так, что сервис потребовал отдельный поддомен. С Remark42 повезло: он умеет жить прямо под путём. Я отдал ему /comments/ — новый поддомен и сертификат не понадобились.
Конфигурация оказалась простой: серверу сообщается его базовый адрес, а nginx срезает префикс пути перед проксированием.
REMARK_URL = https://bagilov.tech/comments/
ALLOWED_HOSTS = 'self'
AUTH_SAME_SITE = strict
И в nginx:
location /comments/ {
rewrite /comments/(.*) /$1 break;
proxy_pass http://remark42:8080/;
}
Так комментарии работают только с моего домена и не превращаются в открытый форум для спамеров.
Вход без барьеров
Я включил анонимный вход. Читателю не нужно регистрироваться или иметь GitHub-аккаунт, чтобы оставить пару слов. Это сознательный размен: меньше трения для честных людей, но выше риск спама — поэтому модерация и вебхук на новые комментарии.
Под мой стиль
Виджет Remark42 встраивается одной строкой и принимает тему. Я синхронизировал её с переключателем темы сайта и подменил шрифт на свой, чтобы комментарии не выбивались из дизайна.
var remark_config = {
host: 'https://bagilov.tech/comments',
site_id: 'bagilov',
theme: currentTheme,
locale: 'ru'
};
Уведомления
Новые комментарии не должны ждать, пока я сам загляну на страницу. Remark42 умеет дёргать вебхук на каждый комментарий — я направил его в свой же relay, который уже умеет отправлять сообщения в ntfy. Теперь новый комментарий прилетает пуш-уведомлением на телефон, как и алерты Grafana.
Что понял
Комментарии — это не «добавить форму». Это выбор: чужой сервис против своего, логин против анонимности, простой скрипт против данных у себя. Здесь я снова выбрал «у себя» — и снова не пожалел: один контейнер, подпапка, свой вид и прямая связка с уведомлениями, которые у меня уже были.
Загрузка…