Как установить и настроить Commento на VPS
Disqus тянет за собой рекламу, трекеры и лишние килобайты JS, которые тормозят страницу и раздражают читателей. Если у вас статичный блог на Hugo, Jekyll или обычный HTML-сайт, а комментарии нужны без слежки за посетителями — Commento закрывает эту задачу: лёгкий self-hosted движок на Go с одним бинарником и PostgreSQL под капотом. Дальше — пошаговая установка на VPS через Docker Compose, с Nginx как реверс-прокси и SSL.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Commento и зачем он нужен
Commento — открытый (BSD-3) сервис комментариев, который встраивается в статью одним <script>-тегом и iframe-виджетом. В отличие от Disqus, он не собирает данные читателей для рекламных сетей и не показывает баннеры. Из коробки есть:
- голосование за комментарии (up/down), сортировка по популярности и времени;
- модерация: одобрение, бан по IP, спам-фильтр (базовый, встроенный);
- вход через email, Google, GitHub, GitLab или анонимно (настраивается);
- импорт существующих комментариев из Disqus (есть готовый парсер экспорта);
- Markdown в комментариях с превью.
Важный нюанс: официальный проект commento/commento на GitHub с 2021 года не получает активных фичей — команда переключилась на форк commento-plus (по факту допиливает баги комьюнити), а часть пользователей вообще ушла на Isso или Remark42. Commento по-прежнему рабочий вариант, если вам нужна простая вещь без лишней сложности, но учитывайте это при выборе на годы вперёд.
Требования к серверу
Commento — лёгкий сервис, для блога на несколько тысяч посетителей в сутки хватит минимальной конфигурации:
| Параметр | Минимум | Комфортно |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 512 МБ | 1 ГБ |
| Диск | 10 ГБ SSD | 20 ГБ SSD |
| ОС | Ubuntu 22.04/24.04, Debian 12 | — |
Основная нагрузка — не сам Commento (он написан на Go, ест мало), а PostgreSQL рядом с ним. Если на том же VPS уже крутится сайт на Hugo или Jekyll, отдельного сервера под комментарии заводить не нужно — Commento спокойно живёт бок о бок.
Понадобится домен или поддомен (например, comments.example.com) — комментарии подгружаются с отдельного origin через iframe, и для этого нужен собственный SSL-сертификат.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка через Docker Compose
Самый предсказуемый способ развернуть Commento — Docker Compose: сразу поднимается и сам сервис, и база данных, без ручной настройки PostgreSQL на хосте.
Если Docker ещё не стоит:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
Создаём рабочую директорию и файл окружения:
mkdir -p /opt/commento && cd /opt/commento
docker-compose.yml:
services:
commento-db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: commento
POSTGRES_USER: commento
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- commento_db_data:/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
restart: unless-stopped
depends_on:
commento-db:
condition: service_healthy
ports:
- "127.0.0.1:8080:8080"
environment:
COMMENTO_ORIGIN: "https://comments.example.com"
COMMENTO_PORT: "8080"
COMMENTO_POSTGRES: "postgres://commento:${DB_PASSWORD}@commento-db:5432/commento?sslmode=disable"
COMMENTO_COOKIE_SECURE: "true"
COMMENTO_SMTP_ENABLED: "true"
COMMENTO_SMTP_HOST: "${SMTP_HOST}"
COMMENTO_SMTP_PORT: "587"
COMMENTO_SMTP_USERNAME: "${SMTP_USER}"
COMMENTO_SMTP_PASSWORD: "${SMTP_PASSWORD}"
COMMENTO_SMTP_FROM_ADDRESS: "comments@example.com"
volumes:
commento_db_data:
Обратите внимание: официальный образ Commento публикуется в GitLab Container Registry (registry.gitlab.com/commento/commento), а не в Docker Hub — если тянете вручную через docker pull, указывайте полный путь, иначе получите "not found".
.env рядом с compose-файлом:
DB_PASSWORD=сгенерируйте_длинный_пароль
SMTP_HOST=smtp.yourprovider.com
SMTP_USER=comments@example.com
SMTP_PASSWORD=пароль_от_smtp
SMTP нужен для писем подтверждения регистрации и уведомлений о новых ответах — без него можно жить, но тогда пользователи не смогут подтвердить email при регистрации напрямую (только через OAuth-провайдеров).
Поднимаем:
docker compose up -d
docker compose logs -f commento
В логе должно появиться что-то вроде commento is now running. Если контейнер сразу падает — почти всегда причина в строке подключения к базе (проверьте, что commento-db успел подняться и healthcheck прошёл) или в неверном формате COMMENTO_ORIGIN (должен быть полный URL с https://, без слэша в конце).
Nginx как реверс-прокси и SSL
Commento слушает 127.0.0.1:8080 — наружу его отдаёт Nginx. Если Nginx ещё не настроен как реверс-прокси, см. отдельный разбор: как установить и настроить Nginx как реверс-прокси на VPS.
Конфиг для поддомена 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;
}
}
ln -s /etc/nginx/sites-available/commento /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
Затем выпускаем сертификат через certbot — подробная инструкция есть в статье как установить и настроить Let's Encrypt SSL на VPS:
certbot --nginx -d comments.example.com
После выпуска сертификата certbot сам допишет блок listen 443 ssl и редирект с 80 на 443 в конфиг. Проверьте, что COMMENTO_ORIGIN в .env точно совпадает с итоговым HTTPS-адресом — расхождение (http вместо https, лишний www) даёт белый экран вместо виджета комментариев на фронте.
Если сайт с комментариями и сама база на одном VPS без запаса по CPU, не забудьте открыть только нужные порты — конфигурация UFW разобрана в статье как установить и настроить фаервол UFW на VPS: наружу нужны только 80/443, порт 8080 должен слушать исключительно 127.0.0.1.
Первичная настройка: домен, виджет, права
Открываем https://comments.example.com, регистрируем первого пользователя — он автоматически становится владельцем инстанса (Owner). Дальше:
- В панели Dashboard → Domains добавляем домен вашего блога (не поддомен комментариев, а сам сайт — например,
example.com). - Настраиваем разрешённые способы входа: email/пароль, анонимные комментарии (Guest), OAuth-провайдеры при желании.
- Копируем сниппет для встраивания — обычно это:
<div id="commento"></div>
<script defer src="https://comments.example.com/js/commento.js"></script>
Для Hugo вставьте сниппет в partial темы (layouts/partials/comments.html) внутри одиночного поста:
{{ if .Params.comments | default true }}
<div id="commento"></div>
<script defer src="https://comments.example.com/js/commento.js"></script>
{{ end }}
Для Jekyll — аналогично, в _includes/comments.html, подключаемом из post.html. Если Jekyll ещё не развёрнут, есть отдельная статья: Jekyll — статичный сайт на VPS.
Модерация комментариев доступна в разделе Moderation — новые комментарии по умолчанию публикуются сразу (без премодерации), это можно изменить в настройках домена, если ожидаете спам или токсичность в обсуждениях.
Импорт комментариев из Disqus
Если вы уже вели блог с Disqus и не хотите терять историю обсуждений, Commento умеет импортировать экспорт:
- В админке Disqus: Settings → Export → скачиваете
.xml.gzс полной историей (файл присылают на почту, обычно в течение часа). - В Commento: Dashboard → выбранный домен → Import → Disqus, загружаете полученный файл.
Импорт сопоставляет комментарии по URL страниц — если у вас изменилась структура ссылок (например, при переезде с WordPress на Hugo), часть тредов может не привязаться автоматически. В этом случае проще проверить вручную несколько ключевых страниц после импорта, чем полагаться на то, что всё встало на место идеально.
Бэкапы и обновление
Все данные Commento (комментарии, пользователи, настройки) живут в PostgreSQL — бэкапить нужно именно её.
Простой скрипт для дампа по cron:
#!/bin/bash
docker compose -f /opt/commento/docker-compose.yml exec -T commento-db \
pg_dump -U commento commento | gzip > /backups/commento-$(date +%F).sql.gz
find /backups -name "commento-*.sql.gz" -mtime +14 -delete
Обновление до новой версии образа:
docker compose pull
docker compose up -d
Перед мажорным обновлением обязательно снимайте свежий дамп — миграции схемы БД в Commento идут автоматически при старте контейнера, и откат назад без бэкапа не всегда тривиален.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Commento бесплатен?
Да, self-hosted версия с открытым кодом (BSD-3) бесплатна полностью. Была ещё платная облачная версия (commento.io), но проект в её нынешнем виде фактически заброшен — для новых проектов используйте self-hosted вариант на своём VPS.
Можно ли обойтись без отдельного поддомена?
Технически можно проксировать Commento на путь вроде example.com/comments, но это усложняет конфиг Nginx (нужны правильные rewrite для статики виджета) и куки-политику. Поддомен — заметно проще и надёжнее.
Нужен ли SMTP обязательно?
Нет, но без него не будет работать email-регистрация с подтверждением и уведомления о новых ответах на комментарий. Анонимные комментарии (Guest-режим) работают и без SMTP.
Чем Commento отличается от Isso и Remark42?
Isso написан на Python и ещё легче по ресурсам, но у него менее удобная админка. Remark42 активно развивается и умеет больше (соцвход, RSS, экспорт), но требует чуть больше ресурсов. Commento — золотая середина по простоте разворачивания, но с более медленным темпом развития проекта.
Что делать, если виджет не подгружается на сайте?
В первую очередь проверьте консоль браузера на CORS-ошибки и убедитесь, что домен вашего блога добавлен в Dashboard → Domains в самом Commento — без этого шага скрипт молча откажется рендерить форму.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →