MAATRIX / Блог / Commento на сервере: частые ошибки и решения

Commento на сервере: частые ошибки и решения

MAATRIX

Commento — движок комментариев без рекламы, трекеров и слежки за читателями, который многие ставят как замену Disqus на статичный блог или Hugo-сайт. Проблема в том, что проект в основном заброшен, документация местами устарела, а типичные ошибки — от падающего при старте контейнера до немых комментариев — гуглятся с трудом. Ниже — рабочие решения по каждой из них и честный разговор о том, стоит ли вообще ставить Commento в 2026 году.

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

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

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

Контейнер Commento не стартует или сразу падает

Самая частая ситуация: docker compose up поднимает контейнер, он живёт пару секунд и уходит в Restarting. Смотрите логи первым делом:

docker compose logs commento --tail=50

Почти всегда там одна из двух причин. Первая — не задана или неверно оформлена переменная COMMENTO_POSTGRES. Commento ждёт строку подключения в формате libpq, а не разрозненные host/user/pass:

COMMENTO_POSTGRES=postgres://commento:пароль@db:5432/commento?sslmode=disable

Если вы скопировали переменные из старого мануала, где COMMENTO_POSTGRES_HOST и COMMENTO_POSTGRES_PORT заданы отдельными ключами — это формат древних версий, актуальный образ его не понимает и просто падает без внятного сообщения.

Вторая причина — Commento стартует раньше, чем PostgreSQL успел поднять кластер и принять соединения. Если в docker-compose.yml есть только depends_on: - db без healthcheck, Docker считает зависимость выполненной в момент, когда контейнер базы запущен, а не когда PostgreSQL реально готов принимать TCP-соединения. Добавьте healthcheck и условие:

services:
  db:
    image: postgres:16
    environment:
      POSTGRES_DB: commento
      POSTGRES_USER: commento
      POSTGRES_PASSWORD: пароль
    volumes:
      - commento_pg:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U commento"]
      interval: 5s
      timeout: 5s
      retries: 10

  commento:
    image: registry.gitlab.com/commento/commento:latest
    depends_on:
      db:
        condition: service_healthy
    environment:
      COMMENTO_ORIGIN: https://comments.example.com
      COMMENTO_PORT: 8080
      COMMENTO_POSTGRES: postgres://commento:пароль@db:5432/commento?sslmode=disable
    ports:
      - "127.0.0.1:8080:8080"
    restart: unless-stopped

volumes:
  commento_pg:

Обратите внимание на порт — публиковать его наружу не нужно, доступ в интернет даёт nginx поверх. Если общая структура docker-compose для вас в новинку или падают другие контейнеры рядом, разбор смежных проблем есть в статье про docker-compose для продакшена.

Виджет комментариев не отображается на сайте

Контейнер работает, curl http://127.0.0.1:8080 отвечает, а на странице сайта под статьёй пусто вместо формы комментариев. Откройте консоль браузера (F12) — там почти всегда одна из трёх ошибок.

Первая — виджет всё ещё грузится с cdn.commento.io, а не с вашего домена. Многие копируют сниппет из старой документации Commento, где путь ведёт на облачный SaaS:

<!-- неверно для self-hosted -->
<script src="https://cdn.commento.io/js/commento.js" data-timestamp="ISO_TIMESTAMP" defer></script>

Для собственного сервера скрипт нужно грузить со своего же домена, там же, где крутится сам Commento:

<div id="commento"></div>
<script src="https://comments.example.com/js/commento.js" data-timestamp="ISO_TIMESTAMP" defer></script>

Вторая частая причина — несовпадение COMMENTO_ORIGIN с реальным адресом, по которому открыт Commento. Если в переменной указано http://comments.example.com, а сайт открывается по https://, браузер блокирует запросы виджета как mixed content, а сам Commento может отклонять запросы как пришедшие не с того origin. Значение COMMENTO_ORIGIN должно быть ровно тем URL, который видит браузер — с протоколом, доменом и без завершающего слэша.

Третья — блокировщики рекламы и приватности (uBlock Origin, Brave Shields) иногда режут скрипты с именем commento.js по эвристике «похоже на трекер комментариев». Это ирония, учитывая, что Commento создавался как раз против трекинга, но фильтры такие фильтры. Проверьте страницу в режиме инкогнито без расширений, прежде чем тратить время на сервер.

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

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

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

Комментарии не сохраняются, ошибка при отправке

Форма показывается, но при отправке комментария появляется ошибка вида unknown-error или not-authorized, а в логах контейнера что-то про базу данных.

docker compose logs commento | grep -i error

Если там permission denied for schema public — роль commento создана, но не является владельцем базы или у неё нет прав на схему. Это особенно часто на PostgreSQL 15+, где права на public больше не выдаются всем ролям по умолчанию:

docker compose exec db psql -U postgres -d commento -c "GRANT ALL ON SCHEMA public TO commento;"
docker compose exec db psql -U postgres -d commento -c "ALTER DATABASE commento OWNER TO commento;"

Если ошибка про relation does not exist — миграции при первом старте не отработали. Обычно это следствие того, что контейнер Commento успел один раз запуститься до готовности базы (см. раздел про healthcheck выше), словил ошибку подключения и больше не пытался прогнать миграции повторно. Проще всего — остановить оба контейнера, убедиться, что база пустая или удалить volume, и поднять заново по порядку.

docker compose down
docker volume rm <project>_commento_pg
docker compose up -d

Учтите: это удалит все данные в базе, если она не пустая — на живом сервере с реальными комментариями сначала снимите бэкап через pg_dump. Общие принципы диагностики PostgreSQL — connection refused, нехватка прав, разросшийся диск — разобраны в статье про частые ошибки PostgreSQL на сервере, пригодится, если проблема глубже, чем сам Commento.

Не приходит письмо подтверждения и не работает модерация

Пользователь регистрируется, чтобы оставить комментарий, но письмо с подтверждением не приходит — и он навсегда застревает в статусе неподтверждённого аккаунта. То же самое с уведомлениями о новых комментариях для модератора.

Commento сам почту не отправляет без настроенного SMTP. Переменные окружения:

COMMENTO_SMTP_HOST=smtp.example.com
COMMENTO_SMTP_PORT=587
COMMENTO_SMTP_USERNAME=commento@example.com
COMMENTO_SMTP_PASSWORD=пароль_приложения
COMMENTO_SMTP_FROM_ADDRESS=commento@example.com

Если эти переменные не заданы вовсе, Commento в некоторых сборках тихо отключает отправку писем — ни ошибки в логах, ни явного предупреждения в интерфейсе, просто письма не уходят. Первым делом проверьте, что переменные действительно попали в контейнер:

docker compose exec commento env | grep SMTP

Дальше — стандартная диагностика SMTP: порт 587 может быть заблокирован у хостера (актуально для некоторых зарубежных провайдеров, но не для серверов, где 587/25 открыты явно), логин отличается от адреса FROM, или почтовый провайдer требует пароль приложения, а не основной пароль аккаунта. Если проблема не в самом Commento, а в том, что письма вообще не уходят с сервера — это отдельная и более общая тема, разобранная в статье не отправляется почта с сервера.

Как временный обход, пока SMTP не настроен: подтвердите пользователя вручную прямо в базе — это неидеальное решение для одного администратора, но рабочее для разработки:

docker compose exec db psql -U commento -d commento -c \
  "UPDATE commenters SET emailNotificationPolicy='pending-moderation' WHERE email='вы@example.com';"

Точные названия столбцов зависят от версии образа — свежую схему проще всего посмотреть командой \d commenters в psql, прежде чем писать UPDATE руками.

Ошибки за nginx: mixed content, 502, редиректы

Commento почти всегда стоит за nginx как reverse proxy на отдельном поддомене. Рабочий конфиг:

server {
    listen 443 ssl http2;
    server_name comments.example.com;

    ssl_certificate     /etc/letsencrypt/live/comments.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/comments.example.com/privkey.pem;

    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;
    }
}

Заголовок X-Forwarded-For важен не только для логов: Commento использует IP клиента для антиспам-эвристик, и без него все комментарии будут выглядеть как пришедшие с одного адреса — вашего сервера.

Если nginx отдаёт 502 Bad Gateway — контейнер либо не поднят, либо слушает не тот порт/адрес, либо упал под нагрузкой. Порядок диагностики (проверить процесс, проверить порт, проверить логи) общий для любого reverse proxy и подробно разобран в статье про ошибку 502 Bad Gateway в nginx. Отдельно проверьте, что домен comments.example.com открывается по HTTPS и сертификат не просрочен — иначе браузер заблокирует загрузку виджета как небезопасный ресурс, даже если основной сайт открыт по HTTPS. За автопродление сертификатов и типичные грабли certbot отвечает статья certbot или acme.sh — что выбрать для сервера.

Стоит ли использовать Commento в 2026 году

Здесь стоит сказать прямо: активная разработка открытого Commento практически остановилась несколько лет назад — автор проекта сосредоточился на других задачах, а сообщество продолжило развитие под именем Comentario (форк с той же идеей — комментарии без слежки, self-hosted, на Go с PostgreSQL). Если вы разворачиваете комментарии с нуля в конце 2026 года, разумно сразу посмотреть в сторону Comentario: там активнее чинят баги, обновляют зависимости и добавляют функции вроде SSO и модерации через веб-интерфейс, которых в оригинальном Commento не хватает.

Сам Commento при этом не «сломан» — миллионы строк комментариев на существующих сайтах продолжают работать без нареканий, база стабильна, а протокол виджета простой. Если у вас уже развёрнут Commento и он работает — ошибки из этой статьи с высокой вероятностью решат проблему без миграции. Но для нового проекта закладывать долгосрочную ставку на инструмент без активной поддержки — риск: следующая уязвимость в зависимостях Go или PostgreSQL-драйвере может не дождаться патча. Миграция между Commento и Comentario относительно прямолинейна, поскольку оба используют похожую схему данных и экспорт в JSON — но сверяйте её с актуальной документацией конкретной версии перед переносом, а не по памяти из старых статей.

Что не зависит от выбора движка — так это то, на чём он крутится. Лёгкому Go-бинарнику с PostgreSQL достаточно скромного VPS, но именно стабильность сети и диска определяют, будет ли форма комментариев открываться мгновенно или подвисать у части читателей. В MAATRIX можно арендовать VPS в России, США или Великобритании под такие сервисы и платить картой российского банка, по СБП, криптовалютой или токеном MAAT — без иностранной карты и подтверждений, которые обычно требует зарубежный хостинг.

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

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

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

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

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

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

Commento — это платный сервис или можно развернуть бесплатно?

Есть облачная платная версия на commento.io и открытый исходный код для self-hosted развёртывания под лицензией MIT — во второй статье речь именно о нём, разворачивается на своём сервере бесплатно.

Почему после docker compose up контейнер сразу уходит в Restarting?

В 9 случаях из 10 — неверный формат COMMENTO_POSTGRES или гонка со стартом PostgreSQL, когда контейнер базы ещё не готов принимать соединения. Смотрите логи и добавьте healthcheck в docker-compose.

Можно ли перенести существующие комментарии Commento в Comentario?

Да, проекты используют совместимую по духу схему и есть механизм экспорта/импорта, но перед переносом сверьтесь с документацией актуальной версии — детали менялись.

Нужен ли Commento доступ к SMTP, если модерация не важна?

Без SMTP пользователи не смогут подтвердить email при регистрации и будут зависать в неподтверждённом статусе — это ломает не только модерацию, но и саму возможность оставлять комментарии для новых читателей.

Почему виджет комментариев не грузится, хотя сервер отвечает на curl?

Чаще всего дело в несовпадении COMMENTO_ORIGIN с реальным адресом сайта или в том, что HTML-сниппет всё ещё указывает на cdn.commento.io вместо вашего домена — проверьте оба места и консоль браузера.

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

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

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