Chatwoot
Chatwoot - чат для сайта и общая очередь обращений на своем сервере: несколько операторов отвечают клиентам, передают диалоги и видят историю; замена чат-части Intercom. Развернули CE v4.19.1 на Fatmetal Cloud Server и проверили сайт и почту.
В Chatwoot CE, в отличие от Intercom, нет лицензионной платы за каждого оператора. Оплачивать сервер и обслуживать установку придется самой команде.
Вердикт
Подходит, если обращения уже теряются между сайтом и общей почтой
- Магазину, где несколько операторов отвечают на вопросы о заказах и передают диалог коллеге.
- Сервисной команде, которой нужны история писем, внутренние заметки и готовые ответы в одном окне.
- Поддержке, которая покупает Intercom ради автоматических ответов Fin.
- Команде, ожидающей приема писем сразу после запуска сервера без настройки почтового ящика.
Одна очередь вместо отдельных переписок
Посетитель пишет через виджет, оператор отвечает из общей очереди. Диалог можно назначить коллеге, снабдить внутренней заметкой и закрыть после решения вопроса. Следующий оператор видит историю.
Почтовый канал помещает письма туда же. На стенде письмо с вложением появилось через 33 секунды, ответ оператора дошел до отправителя. Для клиента это остается обычной перепиской.
Если нужен Telegram, учтите границу проверки этого канала.
Chatwoot заменяет чат и командную обработку обращений в Intercom. Help Center хранит опубликованные инструкции отдельно от личных сообщений: посетитель читает статью, а поддержка отправляет ссылку.
Русский язык выбирается в настройках профиля и пространства. Перевод частичный: в редакторе базы знаний и отдельных настройках остаются английские подписи. Лицензия бесплатной CE - MIT.
Сколько стоит общая очередь
У CE нет платы за место оператора. Экономия появляется, когда команда использует общую очередь, но не нуждается в оплачиваемых возможностях конкретного облачного сервиса.
| Вариант | Цена на 28.10.2026 | Что оплачивается отдельно |
|---|---|---|
| Chatwoot CE | Лицензия 0 ₽; сервер 1100 ₽/мес | Почта, администрирование, резервные копии |
| Chatwoot Cloud Startups | $19 за оператора/мес | Следующие уровни возможностей |
| Intercom Essential | $29 за место/мес | Fin: $0,99 за результат |
| Zendesk Suite Team | $55 за оператора/мес при годовой оплате | Дополнения к выбранному плану |
Для пяти операторов Intercom Essential стоит $145 в месяц до дополнительных услуг. Сервер Chatwoot стоит фиксированно, но его обслуживание остается на вашей стороне: это разные статьи расходов.
Zendesk объявлял о приостановке продаж в России и Беларуси. У Intercom перечислены зарубежные способы оплаты; МИР и СБП в документации не перечислены. Прямую оплату из России заранее уточняйте.
Источники цен: Chatwoot, Intercom, Zendesk. Собственный сервер позволяет выбрать место хранения обращений, но сам по себе не делает службу поддержки соответствующей требованиям законодательства.
Что хранится в каждом контейнере
Rails обслуживает интерфейс и API, Sidekiq выполняет фоновые задачи: получение почты и отправку уведомлений. Оба используют один образ приложения и общий том с вложениями.
PostgreSQL 16 хранит пользователей, обращения и сообщения. Официальный Compose использует образ с расширением pgvector. Redis обслуживает очереди задач. Потеря базы или файлового тома означает потерю части переписки.
Caddy принимает HTTPS на портах 80 и 443 и передает запросы Rails. Порт 3000 доступен только с самого сервера; порты базы и Redis тоже привязаны к localhost.
Файл .env содержит пароли и три ключа шифрования Active Record. Сохраняйте его вместе с базой: новый набор ключей при восстановлении не заменит прежний.
Какой сервер брать
Для этой инструкции берем Ubuntu 24.04 и CPU4-RAM8-DISK100: четыре процессорных ядра, 8 ГБ памяти и диск 100 ГБ. Подробные требования вендора рекомендуют четыре CPU и 4 ГБ RAM.
| Память процессов пяти контейнеров после работы | 989 МиБ без памяти ОС |
| Наблюдавшийся максимум при отправке файла 8 МиБ | 1058 МиБ |
| Четыре уникальных распакованных образа | 2,38 ГиБ |
| Занято на системном диске, включая ОС и swap | 7,79 ГиБ |
| Скачивание образов | 132 секунды |
| Повторный запуск до ответа приложения | 45 секунд |
| Ответ HTML страницы входа | 180 мс |
Один диагностический файл размером 8 МиБ увеличил том вложений на 8 МиБ. Поэтому резервируйте место под присланные документы, а не только под сообщения в PostgreSQL.
От подготовки сервера до ответа посетителю прошло 18 минут, включая настройку и разбор ошибки сертификата. Отведите отдельное время на почтовый канал: его реквизиты не появляются вместе с Chatwoot.
Проверено на версии v4.19.1, 28 октября 2026. На новых версиях результаты могут отличаться.
В маркетплейсе Fatmetal
Не хотите ставить руками?
Этот стек есть в маркетплейсе Fatmetal - можно не повторять установку из этого разбора вручную. Заказываете сервер, за пару минут получаете рабочий домен, валидный TLS и файл с доступами.
Рекомендуемая конфигурация:
4 vCPU · 8 ГБ RAM · 100 ГБ NVMe от 990 ₽/мес
Развертывание на Fatmetal Cloud Server
Домен должен разрешаться в публичный адрес сервера. Выполняйте шаги в одной SSH-сессии: переменные и текущий каталог используются в следующих командах.
Установите Docker
Подключитесь к чистой Ubuntu 24.04 по SSH и выполните sudo -i. Все команды дальше запускаются от root; установим пакеты из репозитория Docker.
apt-get update && apt-get install -y ca-certificates curl install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable" > /etc/apt/sources.list.d/docker.list apt-get update && apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin fallocate -l 2G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile echo '/swapfile none swap sw 0 0' >> /etc/fstabЗакрепите CE v4.19.1
Берем официальный Compose из тега релиза. Замена latest обязательна: иначе при следующем скачивании установится другая версия.
mkdir -p /opt/chatwoot && cd /opt/chatwoot curl -fsSL https://raw.githubusercontent.com/chatwoot/chatwoot/v4.19.1/docker-compose.production.yaml -o docker-compose.yaml sed -i 's|chatwoot/chatwoot:latest|chatwoot/chatwoot:v4.19.1-ce|; s|redis:alpine|redis:7-alpine|' docker-compose.yamlЗадайте домен и секреты
Замените ваш-домен на адрес, чья A-запись указывает на сервер. Откройте входящие 80/443; сохраните все ключи. Саморегистрация отключена, первое создание администратора остается доступным.
DOMAIN=ваш-домен REDIS_PASSWORD=$(openssl rand -hex 24) umask 077 cat > .env <<EOF FRONTEND_URL=https://$DOMAIN SECRET_KEY_BASE=$(openssl rand -hex 64) POSTGRES_HOST=postgres POSTGRES_DATABASE=chatwoot_production POSTGRES_USERNAME=postgres POSTGRES_PASSWORD=$(openssl rand -hex 24) REDIS_PASSWORD=$REDIS_PASSWORD REDIS_URL=redis://:$REDIS_PASSWORD@redis:6379 FORCE_SSL=false DEFAULT_LOCALE=ru ENABLE_ACCOUNT_SIGNUP=false ENABLE_PUSH_RELAY_SERVER=false ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=$(openssl rand -hex 16) ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=$(openssl rand -hex 16) ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=$(openssl rand -hex 16) EOF umask 022Добавьте HTTPS и пароль PostgreSQL
Пустой пароль в upstream Compose перекрывает значение из .env. Исправим его отдельным файлом; проверка готовности базы нужна перед созданием таблиц.
cat > docker-compose.override.yaml <<'EOF' services: postgres: environment: POSTGRES_DB: chatwoot_production POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}" healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d chatwoot_production"] interval: 5s retries: 30 caddy: image: caddy:2-alpine restart: unless-stopped ports: ["80:80", "443:443"] volumes: ["./Caddyfile:/etc/caddy/Caddyfile:ro", "caddy_data:/data"] volumes: caddy_data: EOF printf '%s { reverse_proxy rails:3000 } ' "$DOMAIN" > CaddyfileПоднимите сервисы
Сначала готовим базу штатной задачей Chatwoot, затем запускаем приложение. Сервис base служит шаблоном: отдельный контейнер из него поднимать не нужно.
docker compose pull docker compose up -d --wait postgres redis docker compose run --rm rails bundle exec rails db:chatwoot_prepare docker compose up -d rails sidekiq caddy docker compose ps
Откройте на своем HTTPS-домене страницу /installation/onboarding, задайте имя, организацию, email и пароль администратора. Завершите этот шаг сразу: до первого администратора форма установки доступна по публичному адресу.
После входа заполните профиль пространства, язык и часовой пояс. Адрес сайта редактируется кнопкой с карандашом рядом с полем.
Как принять сообщение и ответить
В настройках откройте «Источники» и добавьте виджет онлайн-чата. Укажите название сайта и его адрес, выберите оператора. Скопируйте предложенный JavaScript на страницы сайта перед закрывающим тегом body.
Откройте сайт как посетитель, начните разговор и отправьте вопрос. В Chatwoot выберите появившийся диалог, напишите ответ и проверьте его в виджете. Назначьте ответственного, чтобы коллега видел, кто ведет обращение.
Для почты добавьте источник Email, выберите другого провайдера и откройте дополнительные параметры. В настройках канала включите IMAP: имя сервера, порт 993, SSL, полный адрес ящика и пароль.
Для отправки включите SMTP, укажите сервер, порт 587, STARTTLS и учетные данные почтового провайдера. Выберите проверку сертификата peer. Пригласительные письма самого приложения требуют отдельного системного SMTP.
Отправьте письмо с вложением с другого адреса, дождитесь его в очереди и ответьте из Chatwoot. Получение письма без успешной обратной доставки еще не означает, что канал настроен.
Макросы, поиск и Help Center
Создайте макрос в настройках: добавьте действие отправки сообщения с готовым ответом, затем действие закрытия диалога. Примените его из меню разговора, когда вопрос действительно решен.
Help Center создается в разделе базы знаний. Добавьте портал, категорию и статью; переведите ее в опубликованное состояние. Публичная страница открывается посетителю без учетной записи оператора.
Глобальный поиск переключается между типами результатов. После публикации статья находится по тексту; сообщение из переписки появляется в результатах диалогов. Это удобнее ручного просмотра всех обращений одного клиента.
Администратор видит сводный отчет и может перейти от показателя к обращениям, из которых он составлен. Так проще разобрать конкретный долгий ответ, а не спорить о средней цифре.
Где может сломаться
PostgreSQL получил пустой пароль из исходного Compose. Добавьте override из инструкции, затем повторите запуск базы. Непустой POSTGRES_PASSWORD в одном .env этого не исправляет.
cd /opt/chatwoot
docker compose up -d --wait postgres redis
docker compose logs --tail=50 postgresПараметры исходящего канала задаются отдельно от IMAP. Проверьте SMTP в настройках источника, режим STARTTLS и сертификат peer; затем найдите ошибку фоновой задачи.
cd /opt/chatwoot
docker compose logs --since=10m sidekiq railsЦентр сертификации ограничил выдачу для домена. Посмотрите Retry-After в журнале и дождитесь указанного срока. Повторная установка приложения не снимает ограничение.
docker compose logs --tail=100 caddyПосле изменения Caddyfile через редактор с заменой файла пересоздайте контейнер: прежнее файловое подключение может продолжать читать старое содержимое.
docker compose up -d --force-recreate caddyСохраните базу, вложения и ключи
Остановите прием обращений на время копирования. Эти команды сохраняют согласованную базу, файловый том и настройки, затем возвращают приложение в работу. Каталог backup содержит секреты: храните его закрытым.
cd /opt/chatwoot
umask 077
mkdir -p backup
docker compose stop rails sidekiq
docker compose exec -T postgres pg_dump -U postgres -Fc chatwoot_production > backup/db.dump
tar czf backup/config.tgz .env docker-compose.yaml docker-compose.override.yaml Caddyfile
docker run --rm --entrypoint tar -v chatwoot_storage_data:/data:ro -v "$PWD/backup":/backup redis:7-alpine czf /backup/storage.tgz -C /data .
docker compose start rails sidekiqСкопируйте весь каталог backup на отдельное хранилище. Копия на том же диске не переживет потерю сервера. Ниже восстановление на установленном стеке: оно заменяет текущую базу.
cd /opt/chatwoot
docker compose stop rails sidekiq
tar xzf backup/config.tgz
docker compose exec -T postgres dropdb -U postgres chatwoot_production
docker compose exec -T postgres createdb -U postgres chatwoot_production
docker compose exec -T postgres pg_restore -U postgres -d chatwoot_production --no-owner --exit-on-error < backup/db.dump
docker run --rm --entrypoint tar -v chatwoot_storage_data:/data -v "$PWD/backup":/backup redis:7-alpine xzf /backup/storage.tgz -C /data
docker compose start rails sidekiqПосле восстановления войдите оператором, откройте прежний разговор и скачайте вложение. Сохранение только PostgreSQL оставляет в переписке ссылки на файлы, которых уже нет.
Как сменить версию без потери обращений
Сначала сделайте резервную копию предыдущими командами. В docker-compose.yaml замените тег v4.19.1-ce на выбранный выпущенный тег CE. Сохраните .env, включая старые ключи шифрования.
cd /opt/chatwoot
docker compose pull rails sidekiq
docker compose stop rails sidekiq
docker compose run --rm rails bundle exec rails db:chatwoot_prepare
docker compose up -d rails sidekiq caddyЗадача db:chatwoot_prepare выполняет миграции перед запуском новой версии. После обновления проверьте вход оператора, ответ посетителю и доставку почты. Возврат старого образа не отменяет миграцию базы.
Для отката восстановите конфигурацию, базу и вложения из одной копии. Не применяйте db:schema:load к действующей установке: эта команда не заменяет последовательное обновление схемы.
Уязвимости прошлых версий
CE v4.19.1 из этой инструкции содержит исправления перечисленных ошибок. Если установлен затронутый выпуск, сделайте резервную копию и обновитесь по разделу выше. Здесь серьезность взята из бюллетеней.
| Бюллетень | Уровень | Затронуты | Исправлено | Риск |
|---|---|---|---|---|
| CVE-2025-21628 | Critical | >2.16.1, <3.16.0 | 3.16.0 | SQL-инъекция через фильтры |
| CVE-2026-44706 | High | ≥2.2.0, <4.11.2 | 4.11.2 | Доступ к чужим данным через SQL-инъекцию |
| CVE-2026-44707 | Medium | ≥2.14.0, <4.13.0 | 4.13.0 | Сохранение доступа через заранее созданный email |
| CVE-2026-72719 | Medium | <4.9.0 | 4.9.0 | Обращение к ресурсам другого аккаунта |
В v4.19.1 усилили защиту: проверку уведомлений Twilio, очистку CSS и обработку сессионных cookies на публичных страницах. Отдельные CVE и уровни риска для этих изменений в заметках релиза не указаны.
Защита этой установки также зависит от закрытых портов базы, сохранности секретов и своевременного обновления образов.
Когда это НЕ ваш выбор
Вы рассчитываете получить весь Intercom бесплатно
Captain, SLA, SSO и другие возможности платных редакций не входят в бесплатную CE. Для очереди сайта и почты они не нужны; для автоматических ответов придется выбирать другой бюджет.
В документации Telegram заявлен как канал общей очереди; на этом стенде подтверждены сайт и почта, подключение Telegram не проверено.
У вас один оператор и несколько вопросов в неделю
Общая очередь помогает передавать обращения между людьми. Если передавать некому, обслуживание Rails, очередей и базы может стоить дороже простого почтового ящика.
Вы обещаете полностью изолированный контур
Собственный сервер не исключает внешние обращения: интерфейс запрашивает аватары Gravatar. Для закрытой сети потребуется отдельная проверка исходящих соединений и настроек подключенных каналов.
Частые вопросы
Можно ли использовать CE в коммерческой поддержке?
Да. Community Edition распространяется по MIT; платные компоненты enterprise имеют отдельную лицензию.
Почему Redis есть даже без бота?
Он обслуживает фоновые задания Sidekiq, включая получение почты. Это часть основного стека поддержки.
Почему после перезагрузки сайта пропала переписка виджета?
Вставляйте JavaScript из настроек источника, а не отдельный iframe. SDK сохраняет идентификатор разговора на родительском сайте; после обновления страницы нажмите продолжение диалога.
Где лежат присланные документы?
В Docker-томе chatwoot_storage_data. База хранит сведения о вложениях; для переноса нужны оба хранилища.
Как понять, что сервер снова запустился?
Запрос curl http://127.0.0.1:3000/api возвращает 200. Затем проверьте вход через свой HTTPS-адрес и реальный ответ посетителю.
Итог
Chatwoot CE подходит для общей поддержки сайта и почты: ответственные, внутренние заметки, макросы и Help Center уже собраны вместе. Первый практический шаг - подключить канал и проверить ответ с обеих сторон.
Рекомендуемая конфигурация для установки:
4 vCPU · 8 ГБ RAM · 100 ГБ NVMe
Не хотите устанавливать вручную?
Запустите Chatwoot на этой конфигурации автоматически - от 990 ₽/мес.
Этот стек у нас запущен на тарифе CPU4-RAM8-DISK100. Нашли баг в гайде - напишите, поправим в течение дня.