Система комментариев для сайта Isso

Система комментариев для сайта Isso

Когда блог работал на Wordpress, на нем были комментарии, они были реализованы с помощью стороннего модуля (не помню какого). Недавно я переделал блог и теперь он основан на Django (ссылка на заметку). После переноса блога я не стал добавлять комментарии поскольку помню, когда блог на Вордпрессе, было много спама. Но оказалось так, что без комментариев при возникновении вопросов пишут на почту и все-таки проще ответить один раз под комментарием в статье, чем отвечать много раз на однотипные вопросы по почте.

Выбор системы комментариев для блога на Django

Вначале посмотрел готовые модули комментариев для Джанго, но ничего подходящего не нашел, даже набросал простой модуль с нуля, но постоянно возникали новые доработки и стало лень (потом хочу все-таки закончить и выложить на гитхаб), в итоге забросил.

Дальше я посмотрел облачные решения. Везде в первых рядах идет Disqus, он есть как платная версия, так и бесплатная. Отпугнуло большое количество негативных статей о медленной скорости работы и сбора данных пользователей. Посмотрел российские системы для комментариев, но не одна не понравилась. В итоге решил отказаться от облачных решений в пользу self-hosted.

Быстро сузил выбор до Commento https://commento.io/ и Remark42 https://remark42.com/ В итоге выбрал Commento, понравилось что она более “легкая” система, и начал внедрять. Но сразу столкнулся со сложностью, она не работала нужной мне версией PostgreSQL — 14 и судя по “активности” ее разработки, так и не заработает.
Далее попробовал Remark42, но что-то у меня постоянно было с ним не так, скорее всего из-за моих кривых рук. В итоге выбрал вариант, который отбросил в самом начале, простую и легкую систему комментариев — Isso.

Ниже опишу процесс ее установки, как добавил ее к блогу и настроил.

На сервере уже работал блог на Джанго, поэтому сам Python и pip были установлены, поэтому все эти моменты я опущу. 

Установка Isso

В домашней директории создал папку comments и в ней добавил виртуальное окружение:

mkdir comments
cd comments
python3 -m venv venv

Далее необходимо активировать виртуальное окружение, обновить его и установить Isso:

source venv/bin/activate
pip install --upgrade pip
pip install isso

Можно деактивировать виртуальное окружение:

deactivate

Создаем отдельдного пользователя для системы комментариев

Сделаем так, чтобы Isso запускалась отдельным непривилегированным пользователем, чтобы было меньше потенциальных проблем с безопасностью системы. Создадим отдельного пользователя:

sudo adduser isso

Каталоги для хранения данных

Теперь нужно создать папки для хранения комментариев и логов Isso, создадим их в каталоге var системы:

sudo mkdir /var/lib/isso
sudo mkdir /var/log/isso

Эти каталоги должны принадлежать пользователю "isso":

sudo chown isso:isso /var/lib/isso
sudo chown isso:isso /var/log/isso

Конфигурирование Isso

Настройки системы комментариев хранятся в файле конфигурации. Создайм файл /etc/isso.cfg:

sudo nano /etc/isso.cfg

И наполним его этим содержимым:

[general]
name = comments
dbpath = /var/lib/isso/comments.db
host = https://example.com/

[server]
listen = http://localhost:8081/

[guard]
enabled = true
ratelimit = 2
direct-reply = 3
reply-to-self = false

Это минимальный файл конфигурации, настроек у Isso гораздо больше, например можно указать smtp сервер для получения уведомлений по email. Подробнее об остальных настройках можно почитать в документации.

Этот файл  должен принадлежать пользователю root:

sudo chown root: /etc/isso.cfg
sudo chmod 644 /etc/isso.cfg

Теперь переключимся на пользователя isso и попробуем запустить:

su - isso
/home/alex/comments/venv/bin/isso -c /etc/isso.cfg

Если у вас в консоли не появились ошибки и вывод примерно такой:

Корректный запуск системы комментариев Isso

Значит все ок, можно остановить выполнение комбинацией клавиш CTRL+C и продолжить.

Создаем службу systemd

Сначала не забудем переключится на своего привилегированного (root) пользователя.

su - ИМЯПОЛЬЗОВАТЕЛЯ

Теперь мы можем создать службу systemd, чтобы Isso всегда была запущена и запускалась при загрузке вашего сервера. Для этого создаем файл /etc/systemd/system/isso.service командой

со следующим содержимым:

[Unit]
Description=Isso Commenting System

[Service]
User=isso
ExecStart=/home/alex/comments/venv/bin/isso -c /etc/isso.cfg run
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

Сохраняем файл.

Теперь включаем и запускаем службу, а так же убеждаемся, что все в порядке:

sudo systemctl enable isso
sudo systemctl start isso
sudo systemctl status isso

Чтобы убедиться, что все работает, выполним следующее и мы должны получить html-документ:

Система комментариев Isso

Настройка Nginx

Во всех примерах чаще всего систему комментариев делают на отдельном поддомене, например isso.mydomain.ru, но я хочу сделать ее в том же домене в директории /comments (в документации это описывается здесь).

Поэтому я не создаю новый хост в nginx, а отредактирую конфигурацию существующего хоста добавив туда следующий код:

location /comments {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Script-Name /comments;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://localhost:8081;
    }

Сохраняем и проверяем нет ли ошибок конфигурации в Nginx:

sudo nginx -t

Если все ок, перезапускаем nginx:

sudo systemctl restart nginx

Остался последний рывок, добавить комментарии на сайт )

Добавление Isso на сайт

Теперь, когда isso запущен осталось только добавить форму добавления и вывод комментариев на сайт. Если вы настроили все, как указано выше, то isso доступен не на поддомене, а в папке domain.ru/comments.

Добавте блок scripts на страницу:

<script data-isso="/comments" src="/comments/js/embed.min.js"></script>

И в том месте, где нужно выводить комментарии, добавте:

<section id="isso-thread"></section>

На этом все. Есть дополнительные конфигурации вывода, о них можно почитать в документации.

Выше мы запускали Isso используя встроенный веб-сервер, но у этого варианта есть недостатки, как указано на официальном сайте https://isso-comments.de/docs/reference/deployment/ встроенный сервер может использоваться на не очень загруженных сайтах — до 20 запросов в секунду.

Пока моему блогу такое количество запросов не грозит, поэтому решил оставить встроенный веб сервер. В будущем, если посещаемость вырастит, запущу Isso через gunicorn и дополню статью.

Хостинг для ваших проектов

Возможно, вас заинтересует

Делаем локальный сервер доступным всему интернету

При разработке веб проекта (не важно на PHP, Django, Flask) бывают случаи …