ISSO как замена Disqus
Как показывает практика каждый более ли менее современный ресурс использует такую вещь как систему комментариев. Решений в данной области целая куча, начиная от встроенных комментариев в различных CMS, заканчивая исключительно платными решениями, использующимися на очень крупных ресурсах.
И казалось бы чего еще желать? Поставил тот же WordPress – вот тебе готовые комментарии. Не нравятся? Ставь комментарии от Facebook или ВКонтакте. Тоже не нравятся, но и платить не хочешь? Тогда ставь Disqus. И именно последний зачастую фигурирует как реальная замена встроенным комментариям WP и конечно он вполне этого заслуживает.
Однако, не все так просто. Да, все эти готовые системы предлагают все и сразу, и даже больше чем нужно (например, Disqus из коробки поддерживает ряд социальных сетей для регистрации). Но вместе с тем они приносят много головной боли, увеличивая нагрузку на сервер и в бонус сливая данные различного рода рекламщикам, которые по факту и оплачивают все эти бесплатные системы комментирования.
И вот чуть больше года назад на Хабре была опубликована статья под названием “Переходим с Disqus на комментарии Github”, в которой достаточно подробно проанализирована ситуация с Disqus и почему с нее желательно сваливать. Конечно менять Disqus на GitHub – это дело очень гиковское и подойдет далеко не всем (точнее почти никому оно не подойдет), да и в общем-то, на мой взгляд, такой вариант можно рассматривать только как интересный эксперимент. В комментариях к этой статье и был упомянут некий ISSO, сервер для комментариев. Тогда то он меня и заинтересовал, но опробовать руки дошли только сейчас.
Что такое этот ISSO?
ISSO – это сервер для комментариев похожий на Disqus написанный на Python. Поддерживает аватарки, ветви, голоса, а вместо визуального редактора используется Markdown. Проект предусматривает импортирует данных из Disqus и WordPress. Сами комментарии подключаются также с помощью JavaScript. В бонус не так давно он обзавелся собственной админкой, которая позволяет достаточно удобно заниматься модерацией комментариев.
Полная информация и документация представлены на официальном сайте. Исходники проекта и поддержка находятся на GitHub.
Проект не мертвый и постоянно развивается, поэтому рассматривать его как реальную альтернативу тому же Disqus не только можно, но и нужно!
Ну и как его использовать?
В виду того, что ISSO – это сервер, то этот самый сервер нужно где-то устанавливать, соответственно для начала вам понадобится какой-никакой, но сервер: VPS за пару баксов в месяц будет более чем достаточен.
Если рассмотреть процесс установки кратко, то его можно свести к выполнению инструкции, размещенной вот тут. А можно и сделать чуть более развернуто (далее решение для Ubuntu/Debian).
Для начала установим необходимые библиотеки:
apt-get install python-dev python-pip sqlite3 build-essential
Далее лично мне еще потребовалось установить python-cffi:
apt-get install python-cffi
Теперь создадим для ISSO отдельного пользователя:
adduser isso --disabled-login --disabled-password
При задании параметра –disabled-login, учётная запись будет создана, но пока не будет определён пароль, доступ через неё останется заблокированным.
При задании параметра –disabled-password пароль не нужен, но вход в систему всё равно возможен (например с помощью SSH RSA ключей).
Установим сам сервер ISSO:
pip install isso
Тут к сожалению не все так просто. Лично мне пришлось еще потанцевать с бубном ибо та версия pip, которая была установлена у меня почему-то вызывала какие-то глюки при установке и мне пришлось еще копаться на GitHub в поисках ответа. Поэтому тут как повезет – в идеальных условиях никаких проблем быть не должно.
Зададим для нашего сервера комментариев необходимые настройки. Для этого создадим файл /etc/isso.conf. В качестве примера можно использовать дефолтный файл с GitHub, расположенный по адресу isso/share/isso.conf. Финальный файл у меня выглядит так:
[general] dbpath = /var/lib/isso/comments.db host = https://my-project.com/ max-age = 15m notify = smtp log-file = /var/log/isso.log admin_password = please_choose_a_strong_password gravatar = false [moderation] enabled = true purge-after = 30d [server] listen = http://localhost:8080 reload = off profile = off [guard] enabled = true ratelimit = 2 direct-reply = 3 reply-to-self = false require-author = false require-email = false [smtp] username = site@my-project.com password = password host = smtp.server.com port = 465 security = ssl to = admin@my-project.com from = "ISSO"<site@my-project.com> timeout = 10 [markup] options = strikethrough, autolink, fenced_code, no_intra_emphasis allowed-elements = allowed-attributes = [hash] salt = Eefh7co8Ohlofpo9el6baimh algorithm = pbkdf2
Думаю, что тут не лишним будет немножко прокомментировать код:
- host – адрес сайта, к которому вы подключаете комментарии;
- admin_password – задает пароль к админке и его нужно делать действительно сложным, дабы систему просто не поломали всякие доморощенные хакеры из Поднебесной;
- dbpath – указанная директория должна быть доступна пользователю isso для записи;
- moderation – в принципе модерацию можно отключить и удалять спам в свободное время через админку;
- smtp – этот блок нужен только в том случае, если в блоке general вы установили notify = smtp;
Теперь неплохо было бы сделать ISSO в виде системной службы, которая могла бы запускаться вместе со всякими NGINX и другими важными службами. Для этого создаем файл /etc/systemd/system/isso.service и заполняем его следующим образом:
[Unit] Description=lightweight Disqus alternative [Service] User=isso Environment="ISSO_SETTINGS=/etc/isso.conf" ExecStart=/usr/local/bin/isso -c $ISSO_SETTINGS run [Install] WantedBy=multi-user.target
Теперь вы сможете выполнять управление сервером с помощью вот таких стандартных команд:
systemctl enable isso systemctl start isso
Дальше необходимо настроить NGINX. Если вы используете Apache, то его настройки лучше поискать где-то на официальном сайте ISSO. Итак, создаем конфигурацию для нашего сервера ISSO:
server { listen 80; listen [::]:80; server_name isso.my-project.com; return 301 https://isso.my-project.com$request_uri; access_log /dev/null; error_log /dev/null; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name isso.my-project.com; access_log /var/log/nginx/isso-access.log; error_log /var/log/nginx/isso-error.log; ssl_certificate /etc/nginx/https/fullchain.pem; ssl_certificate_key /etc/nginx/https/key.pem; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://localhost:8080; } }
Приведенная настройка – это только пример и не более. По сути все можно свести к тому, что нам нужно для нашего сервера создать субдомен (называть его isso – не обязательно), прописать его настройки и самое главное предусмотреть все заморочки с кросс-доменами для заголовков, в ином случае ничего работать не будет. В качестве SSL можно использовать сертификат от Let’s Encrypt, который можно получить как на основной домен, так и на все нужные поддомены совершенно бесплатно. Хорошая статья про получение сертификатов есть тут.
По сути на этом настройка заканчивается! Если все сделано правильно, то можно разместить комментарии на нашем сайте.
А где комментарии?
Самое интересное, что для подключения комментариев на стороне клиента (фронтенд так сказать) не нужно писать сотни строк кода!!! Достаточно всего две строчки:
<script data-isso="https://isso.my-project.com/" src="https://isso.my-project.com/js/embed.min.js"></script> <section id="isso-thread"></section>
Т.е. если буквально, то все, что нам нужно – это подключить скрипт ISSO и в нужном месте вставить секцию для комментариев. Как видно из кода скрипт поддерживает ряд настроек, которые полностью приведены в документации сервера.
Понятно, что для того же WordPress даже плагина никакого не нужно: просто подключаем скрипт embed.min.js через functions.php или header.php и добавляем секцию в файл, отвечающий за вывод отдельного поста (в случае WooCommerce делаем тоже самое, но в файле, отвечающим за вывод отдельного товара). В качестве небольшой оптимизации можем и подключение скрипта делать только для нужных страниц, например так:
if(is_product() || is_single()) { echo '<script data-isso-lang="en" data-isso-css="false" data-isso="https://isso.my-project.com/" src="https://isso.my-project.com/js/embed.min.js"></script>'; echo '<link rel="stylesheet" href="https://isso.my-project.com/css/isso.css" type="text/css" media="all">'; }
В приведенном выше примере подключение скрипта и стилей для ISSO произойдет только для записей блога и товаров WooCommerce.
Ну и конечно же нам доступна админка, например, по адресу: https://isso.my-project.com/admin. Стоит оговориться, что потребуется еще разместить файл admin.css из исходников ISSO в папке css поддомена, что бы админка стала красивой!
Мини-вывод
Конечно, при установке может пойти не все так гладко: придется лезть в документации, проклинать эту статью за неточность и все в этом же духе. Но результат вас должен порадовать. Теперь вы и только вы будете управлять комментариями и для их работы не нужно будет подключать тучу сторонних сервисов, перегружать все ненужными функциями и поставлять клиентов для промывания мозгов левой рекламой.