Система комментариев для сайта 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
Если у вас в консоли не появились ошибки и вывод примерно такой:
Значит все ок, можно остановить выполнение комбинацией клавиш 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-документ:
Настройка 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 и дополню статью.