Простой комментарий
Simple Comment — это платформа комментариев для любого веб-сайта. Бесплатный, гибкий, с открытым исходным кодом, частный и масштабируемый.
Посмотрите демо: https://simple-comment.netlify.app.
Статус
NB: Инструменты модерации пока недостаточны. Нет никакого уведомления, когда пользователь разместил комментарий, и нет никакого способа удержать его на модерации до одобрения. Если вам нравится этот проект и вы хотели бы, чтобы он развивался дальше в определенные сроки, свяжитесь со мной. В противном случае этот проект все еще находится в стадии реализации, но на медленном пути.
MVP готов!
Минимальный функционал включен и работает!
Выполненные задачи: (нажмите, чтобы открыть)
- Возможность перекрестного происхождения
- Скрипт с фронтендом
- Все конечные точки API отвечают ожидаемым образом
-
Access-Control-Allow-Origin
реагирует на переменные .env
- Аутентификация и идентификация работают как положено.
- Аутентифицированные пользователи и администраторы могут взаимодействовать с Simple Comment, как и ожидалось.
- Анонимный пользователь может создавать темы
- Это полезно для сайтов с большим количеством страниц.
- Из соображений безопасности применяются ограничения:
- Заголовок
Referer
и topicId
должны сопоставляться правильно. -
Origin
должен находиться в списке Access-Control-Allow-Origin
- Проверка опубликованных пользователем данных на стороне сервера
- Инструкции по настройке
- Сложны, но работают, если следовать им.
- Посетитель может публиковать сообщения анонимно
- Комментарий включает гостя
- Сделали красивый значок!
- Посетители могут читать комментарии и отвечать на них.
Высший приоритет после MVP
- Дополнительная аутентификация и идентификация пользователя
- Модератор оставляет сообщения на одобрение
- Меры по предотвращению спама
- Интеграция со сторонней аутентификацией
- Уведомление по электронной почте и интеграция
- Интерфейсы, дружественные к фреймворку
- Обширные полезные комментарии!
- E2E-тесты
Приятно иметь
- Модератор изменил правила хранения сообщений на одобрение
- Посетитель может претендовать на право собственности на анонимные публикации
- Кнопка редактирования
- Удалить/изменить временные окна в политике
- Профили пользователей
Функции
- Легко использовать где угодно
- Безопасность, соответствующая отраслевым стандартам
- Полностью настраиваемый
- Масштабируемость: от бесплатного уровня до уровня предприятия!
- Использует преимущества бесплатного уровня от DBaaS и хостингов веб-сайтов.
- Полностью документированный API
- Этический, бесконтрольный контроль посетителей над данными
- Дружелюбное и гостеприимное сообщество разработчиков
Будущие функции
- CLI (интерфейс командной строки) для
- установка и настройка
- модерация контента
- администрирование пользователей
- Конечная точка GraphQL
- Соответствие GDPR
- Пользователи могут просматривать и удалять свои данные без модератора.
- Модераторы могут ограничить доступ посетителей на чтение и запись.
- Белые, серые и черные списки IP-адресов
- Белые, серые и черные списки пользователей
- Самопроверка пользователя
- Опциональное подключение к Fediverse
- Поддержка других баз данных (PostgreSQL, Firestore, CockroachDB и т. д.) и услуг хостинга (Heroku, AWS Lambda, GCS).
- Поддержка API веб-аутентификации https://w3c.github.io/weauthn/
- Профили пользователей
- Голосование за / Реакции
Настраивать
Simple Comment можно запустить на том же сервере, что и ваш веб-сайт, или на отдельном междоменном сервере.
Необходимо , чтобы Simple Comment подавался через https:
Следуйте этим инструкциям. Если что-то неясно, создайте новую тему.
- Форкните этот репозиторий на свою учетную запись
- Клонируйте свою вилку
- Скопируйте
example.env
в тот же корневой каталог проекта и переименуйте его в .env
- В
.env
введите свои собственные (придуманные или случайно сгенерированные) секретные значения для этих записей (т.е. замените все справа от =
в каждой строке).- SIMPLE_COMMENT_MODERATOR_CONTACT_EMAIL
- SIMPLE_COMMENT_MODERATOR_ID
- SIMPLE_COMMENT_MODERATOR_PASSWORD
- JWT_SECRET
- зарегистрируйте бесплатную учетную запись MongoDB Atlas
- Следуйте этим инструкциям
- В
.env
добавьте правильный DB_CONNECION_STRING
.
- Зарегистрируйте учетную запись Netlify, создайте новый веб-сайт и свяжите свой репозиторий с новым веб-сайтом.
- Просмотрите страницу переменных среды сборки Netlify.
- Перейдите к «Сборка и развертывание => Среда».
- В разделе
Environmental Variables
нажмите кнопку Edit Variables
- Для каждой записи в
.env
добавьте ключ и соответствующее значение для всех переменных. - Для
IS_CROSS_SITE
добавьте значение true
, если система комментариев размещена в собственном домене, и false
если это тот же домен.
- Измените свой сайт. Это простые инструкции, но не стесняйтесь их взломать.
- В HTML-код каждой страницы вашего веб-сайта, на которой вы хотите запускать Simple Comment, добавьте эти два тега:
-
<script src="[path-to]/simple-comment.js" defer></script>
( src
должен указывать на файл simple-comment.js
) -
<div id="simple-comment-display"></div>
- Загрузите файл
simple-comment.js
в папку сценариев вашего сайта.
- Теперь на вашем сайте должна быть возможность оставлять и читать комментарии.
Поиск неисправностей
- Ошибка:
Refused to connect to 'api/auth' because it violates the following Content Security Policy directive: connect-src 'self'
- Добавьте
https://<your-comment-app>.netlify.app
в заголовок Политики безопасности контента рядом с connect-src
(см. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers). /Content-Security-Policy/connect-src)
- Ошибка:
Access to fetch at 'https://<your-comment-app>.netlify.app/.netlify/functions/' from origin '<your-website>' has been blocked by CORS policy...
- Добавьте
<your-website>
к ключу ALLOW_ORIGIN
в .env
и в качестве переменной среды Netlify.
Модерирование
- Посетите страницу
login.html
которую вы загрузили в программу настройки , и - Войдите в систему, используя значения
SIMPLE_COMMENT_MODERATOR_ID
и SIMPLE_COMMENT_MODERATOR_PASSWORD
в вашем файле .env
Сборка по умолчанию
Стек по умолчанию использует Netlify + MongoDB для серверной части и клиент на основе минимальной fetch
для внешнего интерфейса, но его можно легко адаптировать для использования любого технологического стека, при условии, что тесты пройдены и API соответствует файлу схемы Open API 3.
Вы можете получить собственную облачную MongoDB бесплатного уровня, следуя этим инструкциям.
Местное развитие
Предполагается, что используется unix-подобная среда, такая как Ubuntu.
Установка
- Установить НВМ
-
nvm install
-
npm install -g yarn
-
yarn install
-
yarn run build
- Установите и запустите MongoDB Community Edition.
Тест
-
yarn run test
-
yarn run test:e2e
Использование
-
sudo systemctl start mongod
(см. Linux) -
yarn run start
- откройте http://localhost:7070/
API
Спецификация API описывается файлом simple-comment-openapi3.json в формате Open API 3 и предназначена для взаимозаменяемости с любой серверной, внешней и идентификационной системой.
Это обзор конечных точек Simple Comment API.
/comment
comment
— это текст, который пользователь публикует в ответ на другой comment
или topic
, и представление этих ответов — единственная причина существования этого проекта!
Конечная точка комментариев предназначена для создания, чтения, обновления и удаления (CRUD) отдельных комментариев. У всех комментариев должен быть родительский элемент, то есть то, на что они отвечают, будь то topic
или comment
/topic
Тема — это особый вид комментариев, который по умолчанию может создаваться только пользователями с правами администратора и образует организационную корзину для ответов на комментарии. Это своего рода корневой комментарий, поэтому у него нет родительского комментария.
Конечная точка /topic обрабатывает CRUD для этих корневых комментариев. Операция GET для /topic
получит список тем, а GET для /topic/{topicId}
получит все комментарии в ответ на эту тему и их потомков.
/user
По умолчанию комментарии могут публиковать анонимные пользователи, но Simple Comment имеет минимальную схему идентификации, чтобы комментаторы, которые решили это сделать, могли контролировать свои комментарии после публикации, в соответствии с политикой.
/auth
Auth — это конечная точка схемы аутентификации и идентификации. Пользователь отправляет свое имя пользователя и пароль в конечную точку аутентификации и получает веб-токен JSON (JWT), который аутентифицирует его как этого пользователя для других операций CRUD.
/verify
Возвращает идентификатор вошедшего в систему пользователя или 401
политика
policy
— это объект, содержащий пары ключ-значение, который управляет поведением простого комментария , определяя, например, максимальную длину комментария или возможность обычного пользователя удалять себя.
{
isGuestAccountAllowed : boolean , // if true, a visitor can post anonymously using a guest account. if false, only authenticated users can comment.
canFirstVisitCreateTopic : boolean , // if a discussion does not exist for a page, shall it be created when visited for the first time, or does admin create all topics?
canGuestCreateUser : boolean , // can a user with guest credentials create (their own) user profile? if 'canPublicCreateUser' is set to 'true' this setting is ignored
canGuestReadDiscussion : boolean , // can a user with guest credentials browse and read discussions? if 'canPublicReadDiscussion' is set to 'true' this setting is ignored
canGuestReadUser : boolean , // can a user with guest credentials view user profiles? if 'canPublicReadUser' is true, this setting is ignored
canPublicCreateUser : boolean , // can a user with no credentials create (their own) user profile?
canPublicReadDiscussion : boolean , // can a user with no credentials browse and read discussions?
canPublicReadUser : boolean , // can an anonymous visitor view any user's profile?
canUserDeleteSelf : boolean , // can a user delete their own profile?
maxCommentLengthChars : number , // Attempting to post a comment longer than this number of characters will be rejected by the API
}
Альтернативы
Здесь перечислено 34 решения, которые не включены в Simple Comment. Почти все они более зрелые, чем Simple Comment, и я бы рекомендовал рассмотреть один из них, если вы не ищете специально бессерверное решение с открытым исходным кодом, размещаемое на собственном хостинге. Ниже перечислены плюсы и минусы, которые отличают его от Simple Comment. Если в списке указано «Требуется доверие» , это означает, что использование службы требует доверия к компании, поскольку они будут предоставлять вашим пользователям закрытый исходный код, который вы не контролируете и который не можете легко проверить; кроме того, пользовательские данные будут храниться на серверах, которые они контролируют. Этот список основан на общедоступной документации, а не на опыте. Если что-то не так или отсутствует, пожалуйста, дайте мне знать.
- Поле для комментариев https://commentbox.io/
- Бесплатный уровень
- Конфиденциальность ориентирована
- Данные хранятся на стороннем сервере.
- Требуется доверие
- Комментарии https://www.commentics.org/
- Открытый исходный код: GPL
- Уровень бесплатного пользования с логотипом
- Требуется сервер с PHP и MySQL.
- Комментарий https://commento.io/
- Конфиденциальность ориентирована
- Открытый исходный код: Массачусетский технологический институт
- Самостоятельный хостинг или оплата хостингу
- Дискурс https://www.discourse.org/
- Открытый исходный код: GPL.
- Полнофункциональный
- Самостоятельная ИЛИ платная версия
- Нет бесплатного уровня
- Disqus https://disqus.com/ — 400-фунтовая горилла электронной
- Бесплатный уровень
- Полнофункциональный
- Закрытый исходный код
- Данные хранятся на стороннем сервере.
- Требуется вход пользователя
- Продает пользовательские данные
- Требуется доверие
- Плагин комментариев Facebook https://developers.facebook.com/docs/plugins/comments/
- Бесплатный уровень
- Полнофункциональный
- Закрытый исходный код
- Данные хранятся на стороннем сервере.
- Требуется Facebook
- Требуется вход пользователя
- Продает пользовательские данные
- Требуется доверие
- Быстрые комментарии https://fastcomments.com/
- Полнофункциональный
- Конфиденциальность ориентирована
- Общение в реальном времени
- HMAC-аутентификация
- Нет бесплатного уровня
- Требуется доверие
- Графкоммент https://graphcomment.com/
- Полнофункциональный
- Бесплатный уровень
- Закрытый исходный код
- Данные хранятся на стороннем сервере.
- Гарантирует «полное и полное владение» данными
- Серверы в Европе (Франция)
- Требуется вход пользователя
- Требуется доверие
- Поле комментариев HTML https://www.htmlcommentbox.com/
- Бесплатный уровень
- Закрытый исходный код
- Данные хранятся на стороннем сервере.
- Требуется доверие
- Политика конфиденциальности? Неизвестный.
- HashOver https://www.barkdull.org/software/hashover
- Открытый исходный код: AGPL
- Требуется сервер с PHP и MySQL.
- Обсуждение Хайвора https://talk.hyvor.com/
- Конфиденциальность ориентирована
- Нет бесплатного уровня
- Требуется вход пользователя
- Требуется доверие
- Интенседебате https://intensedebate.com/
- Полнофункциональный
- Закрытый исходный код
- Данные хранятся на стороннем сервере.
- Требуется вход пользователя
- Требуется доверие
- Иссо https://posativ.org/isso/
- Документация обширная
- Открытый исходный код: Массачусетский технологический институт
- Требуется сервер Linux с Python и SQLite3.
- Просто комментарии https://just-comments.com/
- Несуществующий https://just-comments.com/blog/2020-03-06-just-comments-is-shutting-down.html
- Муут https://muut.com
- Удобный для разработчиков https://muut.io
- Полнофункциональный
- Нет бесплатного уровня
- Требуется доверие
- Ремарк42 https://remark42.com/
- Полнофункциональный
- Открытый исходный код: Массачусетский технологический институт
- Требуется сервер
- Запускает автономный исполняемый файл, написанный на Go.
- Talkyard https://www.talkyard.io/
- Открытый исходный код: AGPL
- Самостоятельный хостинг ИЛИ платный хостинг
- Уровень почти бесплатного пользования (1,90 евро в месяц + дополнительные дополнения)
- Скидки для некоммерческих организаций и развивающихся стран.
- Валин https://valine.js.org/en/index.html
- Открытый исходный код: GPL.
- Бессерверный
- Требуется учетная запись Leancloud
- Сервера находятся в Китае
- Безопасность/конфиденциальность данных неясна
- шнак! https://schnack.cool/
- Открытый исходный код: Lil License v1.
- Требуется сервер с Node и SQLite3.
- Подробнее: список систем комментирования, которые я не оценивал
- Комментарии кактуса https://gitlab.com/cactus-comments
- Комментатор https://github.com/mcorbin/commentator
- Комнтр https://github.com/comntr
- Коралловый проект https://github.com/coralproject/talk
- Комментарии Github http://donw.io/post/github-comments/
- Глоса https://github.com/glosa
- Гиперкомментарии https://www.hypercomments.com/
- Мастадон https://carlschwan.eu/2020/12/29/adding-comments-to-your-static-blog-with-mastodon/
- Формы Netlify https://bsdnerds.org/comments-static-site/
- Ремаркбокс https://www.remarkbox.com/
- Ответный ящик https://getreplybox.com/
- Социальные сети https://brid.gy/
- Статикмен https://github.com/eduardoboucas/staticman
- Веб-упоминание https://webmention.io/
- подробнее https://news.ycombinator.com/item?id=25571253
- высказывания https://github.com/utterance/utterances