Isso на Ubuntu 24.04: пошаговая установка
Если у вас статический сайт на Hugo, Jekyll или просто набор HTML-страниц, готовой формы для комментариев там нет — и подключать ради неё Disqus с его трекерами и рекламой не хочется. Isso закрывает эту задачу без лишнего: маленький Python-сервис, SQLite вместо тяжёлой СУБД, никакой аналитики со стороны, экспорт из Disqus одной командой. Ниже — установка на чистый VPS с Ubuntu 24.04, от системного пользователя до рабочего JS-виджета на странице.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Isso и когда он уместен
Isso — открытый (BSD) движок комментариев, написанный на Python, изначально задуманный как замена Disqus для тех, кто не хочет отдавать данные читателей третьей стороне. Хранит комментарии в одном файле SQLite, отдаёт их через небольшое REST API, а на странице рисует форму и дерево реплаев через JS-виджет isso.js без jQuery и прочих зависимостей.
Он подходит, если:
- сайт статический (Hugo, Jekyll, Pelican, Zola, руками собранный HTML) и своей БД под комментарии нет;
- трафик комментариев умеренный — блог, документация, персональный сайт, а не новостной портал с тысячами комментариев в час;
- важна приватность читателей: Isso не ставит сторонние куки и не тянет чужие скрипты.
Не подходит, если нужна модерация в духе крупной CMS с ролями, спам-фильтрами уровня Akismet «из коробки» и веб-панелью для десятков модераторов — тут проще брать что-то вроде Commento или самописную интеграцию. Для одного-двух авторов встроенной email-модерации Isso вполне хватает.
Проект давно не самый активный по коммитам, но стабилен и по факту «доделан» — новых фич немного, зато и ломающих изменений почти нет. На конец августа 2026 года последний релиз в PyPI по-прежнему в районе 0.12.x, дальше версию проверяйте сами перед установкой.
Подготовка сервера
Понадобится VPS с Ubuntu 24.04, доменное имя (или поддомен) для комментариев или для основного сайта, и доступ по SSH с правами sudo. Isso — сервис лёгкий, 1 vCPU / 1 ГБ RAM с запасом хватает даже под несколько сайтов одновременно; для старта подойдёт минимальный тариф.
Обновите систему и поставьте базовые пакеты:
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3 python3-venv python3-pip build-essential python3-dev nginx
build-essential и python3-dev нужны для сборки зависимостей Isso (в частности misaka для рендеринга Markdown) — без них пакет соберётся с ошибкой на этапе компиляции C-расширений.
Заведите отдельного системного пользователя — не запускайте сервис от root:
sudo useradd --system --shell /usr/sbin/nologin --home /opt/isso --create-home isso
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка Isso в виртуальном окружении
Isso ставится через pip, поэтому изолируем его в venv — это убережёт системный Python от конфликтов версий и позволит спокойно обновлять пакет отдельно от ОС.
sudo -u isso python3 -m venv /opt/isso/venv
sudo -u isso /opt/isso/venv/bin/pip install --upgrade pip
sudo -u isso /opt/isso/venv/bin/pip install isso
Проверьте, что бинарник встал на место:
sudo -u isso /opt/isso/venv/bin/isso --version
Если на этапе установки падает сборка misaka с ошибкой компиляции — почти всегда не хватает заголовков Python (python3-dev) или компилятора (build-essential), которые мы поставили выше. Убедитесь, что версия пакетов соответствует установленному python3 (Ubuntu 24.04 идёт с Python 3.12).
Создайте директорию под конфиг и базу:
sudo mkdir -p /etc/isso /opt/isso/data
sudo chown isso:isso /opt/isso/data
Конфигурация isso.cfg
Isso читает настройки из ini-файла. Создайте /etc/isso/isso.cfg:
[general]
dbpath = /opt/isso/data/comments.db
host = https://example.com/
https://www.example.com/
notify = smtp
log-file = /var/log/isso/isso.log
[server]
listen = http://127.0.0.1:8080/
reload = false
[smtp]
username = your-smtp-user
password = your-smtp-password
host = smtp.example.com
port = 587
security = starttls
to = you@example.com
from = isso@example.com
[markup]
options = strikethrough, superscript, autolink
[moderation]
enabled = true
purge-after = 30d
Ключевые моменты:
host— список доменов, с которых разрешено встраивать виджет (CORS). Перечислите все варианты, включаяwwwиhttp, если у вас ещё нет редиректа на HTTPS.listen— Isso слушает локально на 127.0.0.1, наружу его отдаёт nginx (об этом ниже). Порт 8080 условный, можно взять любой свободный.moderation.enabled = true— новые комментарии уходят в очередь на подтверждение, вам на email (через SMTP-секцию) приходит ссылка «одобрить / удалить». Для личного блога с невысоким трафиком это разумный компромисс между спамом и удобством.- Если SMTP не настроен, модерация всё равно работает через веб-интерфейс
/admin, но без email-уведомлений вы просто не узнаете о новом комментарии вовремя.
Создайте директорию для лога:
sudo mkdir -p /var/log/isso
sudo chown isso:isso /var/log/isso
systemd-юнит
Запускать Isso вручную неудобно — заведите юнит, чтобы сервис поднимался автоматически и перезапускался при падении. Создайте /etc/systemd/system/isso.service:
[Unit]
Description=Isso comment server
After=network.target
[Service]
Type=simple
User=isso
Group=isso
WorkingDirectory=/opt/isso
ExecStart=/opt/isso/venv/bin/isso -c /etc/isso/isso.cfg run
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ReadWritePaths=/opt/isso/data /var/log/isso
[Install]
WantedBy=multi-user.target
ProtectSystem=strict вместе с явным ReadWritePaths — минимальная защита: сервис не сможет писать никуда, кроме своей базы и лога, даже если в нём найдут уязвимость.
Включите и запустите:
sudo systemctl daemon-reload
sudo systemctl enable --now isso
sudo systemctl status isso
В статусе должно быть active (running). Если сервис падает сразу после старта, смотрите причину:
sudo journalctl -u isso -n 50 --no-pager
Частая причина — опечатка в isso.cfg (Isso чувствителен к отступам в ini-секциях) или занятый порт: проверьте sudo ss -tlnp | grep 8080.
nginx как обратный прокси
Isso слушает только локально, наружу его открывает nginx — тот же паттерн, что и в настройке nginx как реверс-прокси. Создайте конфиг /etc/nginx/sites-available/comments.example.com:
server {
listen 80;
server_name comments.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $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;
}
}
Если Isso обслуживает комментарии для того же домена, что и основной сайт (например, /comments/ как отдельный location на основном сервере), используйте вложенный location:
location /comments/ {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $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;
}
При таком варианте не забудьте синхронизировать host в isso.cfg с реальным путём и в JS-виджете указать data-isso="/comments/".
Активируйте конфиг и проверьте синтаксис:
sudo ln -s /etc/nginx/sites-available/comments.example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
HTTPS через Let's Encrypt
Комментарии — форма с пользовательским вводом, отдавать её без HTTPS не вариант: браузеры блокируют смешанный контент, да и cookie для анти-спам защиты Isso без Secure-флага работать не будет корректно. Ставится сертификат так же, как описано в установке Let's Encrypt SSL на VPS:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d comments.example.com
Certbot сам допишет listen 443 ssl и настроит редирект с 80 на 443. После выпуска сертификата обновите host в isso.cfg на https:// и перезапустите сервис:
sudo systemctl restart isso
Автопродление certbot ставит через systemd-таймер по умолчанию, вручную ничего делать не нужно — можно проверить командой sudo certbot renew --dry-run.
Подключение виджета на статический сайт
На стороне статики достаточно двух вещей: подключить isso.js и разметить <div> под комментарии на странице поста.
<script data-isso="https://comments.example.com/"
src="https://comments.example.com/js/embed.min.js"></script>
<section id="isso-thread"></section>
Для Hugo это обычно добавляется в partial comments.html и подключается в шаблоне одиночного поста:
{{ if .Site.Params.isso }}
<script data-isso="{{ .Site.Params.isso }}"
src="{{ .Site.Params.isso }}js/embed.min.js"></script>
<section id="isso-thread" data-title="{{ .Title }}"></section>
{{ end }}
data-title полезен, если URL страницы может меняться (например, при переезде на новую структуру ссылок) — Isso привязывает нить комментариев к URL по умолчанию, но можно переопределить идентификатор.
Проверьте в консоли браузера (F12 → Network), что запрос к https://comments.example.com/count.js или /js/embed.min.js уходит без CORS-ошибок. Если видите Access-Control-Allow-Origin mismatch — почти наверняка домен сайта не совпадает с тем, что прописан в host внутри isso.cfg (частая ошибка — забыли добавить www.-вариант или HTTP рядом с HTTPS).
Импорт комментариев из Disqus и бэкапы
Если сайт раньше жил на Disqus, экспортируйте архив (Disqus Admin → Export) и импортируйте его штатной утилитой:
sudo -u isso /opt/isso/venv/bin/isso -c /etc/isso/isso.cfg import disqus-export.xml
Команда сама разберёт XML и создаст записи в SQLite-базе, дублирующего импорта можно не бояться — Isso сверяет ID комментариев.
Раз в базе всё содержимое обсуждений, бэкапить стоит не реже раза в сутки — это один файл, cron справится без затей:
0 3 * * * cp /opt/isso/data/comments.db /opt/isso/data/backups/comments-$(date +\%F).db
Добавьте ротацию (например, хранить последние 14 копий) — на объёме личного блога это займёт мегабайты, но привычка бэкапить единственный файл с данными читателей стоит одной строки в crontab.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Isso поддерживает несколько сайтов на одном сервере?
Да, один инстанс может обслуживать несколько доменов — все они просто перечисляются в host через отступ на новой строке, а на стороне nginx можно поднять несколько server-блоков, проксирующих на один и тот же порт Isso.
Как включить капчу или другую защиту от спама?
Isso по умолчанию использует лёгкую proof-of-work защиту (не требует настройки) плюс модерацию первого комментария от нового IP/куки. Полноценной капчи в коробке нет — если спама много, добавляйте fail2ban поверх nginx-логов по паттерну частых POST-запросов, принцип тот же, что в настройке fail2ban для nginx.
Можно ли редактировать или удалять свой комментарий без регистрации?
Да, при отправке комментария в куки браузера сохраняется токен, по которому можно редактировать или удалять запись в течение времени, заданного в конфиге (edit-timeout в секции [general], по умолчанию 15 минут).
Isso работает без JavaScript у читателя?
Нет — форма и дерево комментариев рендерятся клиентским скриптом isso.js. Полностью безъяскриптовой альтернативы у проекта нет, это осознанный компромисс ради простоты бэкенда.
Что делать, если после обновления Ubuntu Isso перестал стартовать?
Чаще всего дело в несовместимой версии Python в venv после апгрейда системного пакета — пересоздайте окружение (python3 -m venv заново) и переустановите Isso тем же способом, база SQLite при этом не трогается и данные не теряются.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →