MAATRIX / Блог / Как установить и настроить Isso на VPS

Как установить и настроить Isso на VPS

MAATRIX

Статический сайт на Hugo, Jekyll или голом HTML не умеет принимать комментарии — это плата за отсутствие бэкенда. Disqus и аналоги решают проблему ценой чужой рекламы и слежки за читателями, а самописный форум — это overkill для блога. Isso закрывает именно эту нишу: лёгкий Python-демон с SQLite, который встраивается в статическую страницу через JS-виджет и не требует ничего, кроме VPS с парой сотен мегабайт памяти.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

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

Что такое Isso и когда он подходит

Isso — это open-source сервис комментариев, написанный как замена Disqus для тех, кто хочет держать данные у себя. Работает как отдельный HTTP-сервис (WSGI-приложение), хранит комментарии в SQLite, отдаёт JS-виджет, который подключается к статичным HTML-страницам одной строкой.

Разумные ожидания:

  • Проект зрелый, но развивается медленно — крупных обновлений годами не бывает, зато и ломаться нечему.
  • Из коробки — модерация, антиспам через контрольную сумму (guard), поддержка Markdown в комментариях, e-mail-уведомления о новых репликах.
  • Нет из коробки: соцавторизации (OAuth), лайков сложнее простого +/-, богатой админки — только текстовый конфиг и CLI.

Если вам нужна максимально простая, приватная и не прожорливая система комментариев к статическому блогу — это она. Если нужны реакции, соцвход и премодерация через веб-панель — присмотритесь к более тяжёлым альтернативам (Commento, Remark42).

Требования и подготовка сервера

Isso — однопоточный Python-сервис, ресурсов ему нужно немного: 512 МБ RAM хватает с запасом, 1 vCPU достаточно даже при нескольких тысячах комментариев в день. Для блога с посещаемостью до 10-20 тысяч в сутки минимальный VPS закроет вопрос полностью.

Понадобится:

  • VPS на Ubuntu 24.04 (в инструкции — она; на Debian 12 шаги идентичны с поправкой на имена пакетов).
  • Домен или поддомен для сайта (сам Isso будет работать на том же домене, за отдельным location в Nginx, либо на отдельном поддомене типа comments.example.com).
  • Уже настроенный Nginx, отдающий статический сайт (если ещё нет — сначала разверните Hugo на VPS или любой другой статический движок).

Обновите систему и поставьте базовые пакеты:

sudo apt update && sudo apt upgrade -y
sudo apt install -y python3 python3-venv python3-pip git build-essential libffi-dev libssl-dev

python3-venv обязателен — Isso ставится в изолированное виртуальное окружение, чтобы не конфликтовать с системным Python и его пакетами.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Установка Isso в virtualenv

Создаём отдельного системного пользователя — сервис не должен работать от root:

sudo useradd --system --create-home --shell /usr/sbin/nologin isso
sudo mkdir -p /opt/isso
sudo chown isso:isso /opt/isso

Разворачиваем виртуальное окружение и ставим Isso из PyPI:

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

Версию пакета не называю намеренно — на PyPI периодически подтягиваются патч-релизы, и то, что установится у вас в конце августа 2026 года, может отличаться на минорную цифру от того, что видел я на момент написания статьи. Логика установки от этого не меняется.

Создаём директорию под данные (SQLite-базу):

sudo mkdir -p /opt/isso/data
sudo chown isso:isso /opt/isso/data

Конфигурация isso.cfg

Isso настраивается через INI-файл. Создайте /opt/isso/isso.cfg:

[general]
dbpath = /opt/isso/data/comments.db
host = https://example.com/
log-file = /opt/isso/data/isso.log
reply-notifications = true

[server]
listen = http://127.0.0.1:8080/
reload = off

[smtp]
username = your-smtp-user
password = your-smtp-password
host = smtp.example.com
port = 587
security = starttls
to = you@example.com
from = Isso <isso@example.com>
timeout = 10

[moderation]
enabled = false
purge-after = 30d

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

[markup]
options = strikethrough, superscript, autolink
allowed-elements =
allowed-attributes =

[hash]
algorithm = pbkdf2
salt = поменяйте-эту-строку-на-случайную

[admin]
enabled = false
password = 

Ключевые моменты:

  • host — обязательно полный URL сайта с https:// и завершающим слэшем. Isso сверяет Origin запросов с этим значением — если не совпадёт, комментарии молча не будут отправляться.
  • listen — слушаем только на loopback (127.0.0.1:8080), наружу сервис не торчит, весь внешний трафик пойдёт через Nginx.
  • [moderation] enabled — если true, каждый новый комментарий уходит на модерацию и не публикуется сразу. Для блога с небольшим потоком комментариев разумно включить на старте, чтобы отсечь спам-волну в первые недели.
  • [guard] — встроенный антиспам: лимит на количество комментариев с одного адреса в единицу времени (ratelimit), ограничение на прямые ответы (direct-reply).
  • salt в [hash] — обязательно смените на случайную строку, она используется для хэширования email при генерации Gravatar-иконок. Сгенерировать: openssl rand -hex 32.
  • Секцию [smtp] заполняйте, только если хотите получать email-уведомления о новых комментариях — без неё сервис тоже работает.

Владелец файла — пользователь isso:

sudo chown isso:isso /opt/isso/isso.cfg
sudo chmod 640 /opt/isso/isso.cfg

systemd-юнит для автозапуска

Ручной запуск через терминал не переживёт перезагрузку сервера, поэтому оборачиваем Isso в systemd-сервис.

Создайте /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 /opt/isso/isso.cfg run
Restart=on-failure
RestartSec=5

NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ReadWritePaths=/opt/isso/data
ProtectHome=true

[Install]
WantedBy=multi-user.target

Директивы ProtectSystem=strict и ReadWritePaths ограничивают процессу запись только каталогом с данными — даже если в самом Isso найдут уязвимость, урон будет ограничен.

Применяем и запускаем:

sudo systemctl daemon-reload
sudo systemctl enable --now isso.service
sudo systemctl status isso.service

Если статус active (running) — сервис поднялся. Проверьте лог на всякий случай:

sudo journalctl -u isso.service -n 50 --no-pager

Локально можно дополнительно постучаться напрямую:

curl -s http://127.0.0.1:8080/ | head -c 200

Пустой ответ с кодом 200 или редиректом — нормально, Isso без запроса от JS-виджета отдаёт немного.

Nginx: reverse proxy и SSL

Isso слушает только localhost, наружу его открывает 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 использует long-polling для live-обновлений — не обрывайте соединение по таймауту
        proxy_read_timeout 90s;
        proxy_buffering off;
    }
}

Активируем и получаем сертификат Let's Encrypt через certbot:

sudo ln -s /etc/nginx/sites-available/comments.example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d comments.example.com

Про выбор между certbot и acme.sh для автоматического продления есть отдельный разбор — certbot или acme.sh: что выбрать для сервера. Если вы уже используете Caddy вместо Nginx, у него автоматический SSL встроен и настройка ещё короче — см. Caddy с авто-SSL на Ubuntu 24.04.

После выпуска сертификата обновите host в isso.cfg на https://comments.example.com/ (если сервис живёт на отдельном поддомене — на его адрес; если встроен в основной домен через location — на адрес основного сайта) и перезапустите сервис:

sudo systemctl restart isso.service

Встраивание виджета в статический сайт

На каждой странице, где нужны комментарии, добавьте перед закрывающим </body>:

<script data-isso="https://comments.example.com/"
        src="https://comments.example.com/js/embed.min.js"></script>
<section id="isso-thread"></section>

Атрибут data-isso указывает базовый URL сервиса, а <section id="isso-thread"> — контейнер, куда виджет отрисует форму и список комментариев. ID должен быть именно isso-thread.

Для Hugo это обычно частичный шаблон (partial), подключаемый в single.html:

{{ if not .Params.hideComments }}
<script data-isso="https://comments.example.com/"
        src="https://comments.example.com/js/embed.min.js"></script>
<section id="isso-thread"></section>
{{ end }}

Полезные data-атрибуты, которые можно добавить к тегу <script>:

АтрибутНазначение
data-isso-cssподключить/отключить встроенные стили (true/false)
data-isso-langязык интерфейса, например ru
data-isso-reply-to-selfразрешить автору отвечать самому себе
data-isso-avatarвключить генерируемые аватарки (true/false)
data-isso-voteпоказывать кнопки голосования за комментарий

Готовые CSS Isso по умолчанию довольно нейтральны, но почти всегда их придётся подправить под тему сайта — файл стилей отдаётся тем же сервисом по пути /css/isso.css, переопределить проще собственным CSS с более высоким приоритетом, чем лезть в исходники пакета.

Модерация, импорт и обслуживание

Если включили [moderation] enabled = true, для одобрения комментариев есть CLI:

sudo -u isso /opt/isso/venv/bin/isso -c /opt/isso/isso.cfg import --help

Практичнее для повседневной модерации — включить в конфиге [admin] enabled = true и задать пароль (хэшированный через isso hash), тогда появится страница /admin с очередью на подтверждение. Это единственный веб-интерфейс, который вообще есть у Isso, — держите его закрытым Basic Auth дополнительно на уровне Nginx, лишний слой не помешает:

location /admin {
    auth_basic "Isso admin";
    auth_basic_user_file /etc/nginx/.htpasswd;
    proxy_pass http://127.0.0.1:8080;
}

Резервное копирование — это просто копирование одного файла SQLite:

sudo -u isso cp /opt/isso/data/comments.db /opt/isso/data/comments.db.bak-$(date +%F)

Для регулярных бэкапов добавьте это в cron или используйте общий подход из статьи про бэкап Docker volume на сервере — принцип «остановить запись, скопировать, возобновить» тот же, просто без контейнера.

Если переезжаете с Disqus, у Isso есть встроенный импортёр экспортированного XML:

sudo -u isso /opt/isso/venv/bin/isso -c /opt/isso/isso.cfg import disqus.xml

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Isso работает без JavaScript на стороне читателя?

Нет, виджет — это JS-приложение, без него комментарии не отобразятся и форма не появится. Это архитектурное ограничение любой системы комментариев для статических сайтов, включая аналоги.

Нужен ли отдельный поддомен, или можно на том же домене?

Можно и на том же — тогда вместо отдельного server-блока в Nginx добавьте location /isso/ с тем же proxy_pass и поправьте data-isso в виджете на этот путь. Отдельный поддомен просто чище с точки зрения конфигурации и логов.

Isso поддерживает вход через соцсети или Google?

Нет, из коробки — только имя, email (опционально) и сайт, которые вводит сам комментатор. Это осознанное решение авторов ради простоты и приватности.

Как перенести комментарии на новый сервер?

Достаточно скопировать файл comments.db из /opt/isso/data/ на новый сервер в ту же директорию и поднять сервис с тем же конфигом — база самодостаточна.

Что если сайт получает всплеск трафика — выдержит ли Isso?

Однопоточный WSGI-сервер сам по себе не рассчитан на очень высокую нагрузку, но для блога, а не новостного портала с миллионными хайлоадами, штатной конфигурации хватает; при росте нагрузки поможет запуск через несколько worker-процессов (Gunicorn/uWSGI) перед Nginx.

Isso хранит IP-адреса комментаторов?

Да, для работы антиспам-фильтра ([guard]) IP используется, но не публикуется в комментарии — только email при желании автора и его отображаемое имя.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

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