MAATRIX / Блог / Isso на Ubuntu 24.04: пошаговая установка

Isso на Ubuntu 24.04: пошаговая установка

MAATRIX

Если у вас статический сайт на 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 ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →