Как установить и настроить Rocket.Chat на VPS
Slack и Teams требуют подписку на каждого сотрудника и хранят переписку на чужих серверах — для команды, которая работает с чувствительными данными или просто не хочет зависеть от зарубежного облака, это не вариант. Rocket.Chat закрывает эту потребность: полноценный self-hosted мессенджер с видеозвонками, ботами и интеграциями, который разворачивается на одном VPS за час. Ниже — рабочая установка через Docker Compose с MongoDB и Nginx, без лишних абстракций.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Rocket.Chat и чем он отличается от Mattermost
Rocket.Chat — открытый корпоративный мессенджер на Node.js с MongoDB в качестве хранилища. По функциям он ближе к Slack, чем к Mattermost: встроенные аудио- и видеозвонки (через WebRTC или интеграцию с Jitsi), омниканальность для поддержки клиентов, LDAP/SSO, боты через REST и Realtime API, мобильные и десктопные клиенты из коробки.
Если вы уже смотрели в сторону Mattermost — Rocket.Chat заметно тяжелее по требованиям к ресурсам (в первую очередь из-за MongoDB с репликасетом), зато богаче по функциям «из коробки»: видеозвонки и омниканальность у Mattermost либо платные, либо требуют отдельных модулей. Для команды до 30-50 человек это не критично, но на слабом VPS с 1 ГБ RAM Rocket.Chat будет работать со скрипом.
Требования к серверу и подготовка VPS
Минимум для комфортной работы:
- 2 vCPU, 4 ГБ RAM — для команды до 20-30 человек этого достаточно с запасом;
- 40 ГБ SSD — MongoDB и логи растут быстрее, чем кажется на старте;
- Ubuntu 24.04 LTS или Debian 12 — обе поддерживаются без танцев с бубном;
- домен, направленный на IP сервера (A-запись) — без него не получится нормально выпустить SSL и настроить видеозвонки, WebRTC требует HTTPS.
Обновите систему и поставьте базовые утилиты:
apt update && apt -y upgrade
apt install -y curl ufw
Откройте нужные порты в файрволе — 22 для SSH, 80 и 443 для HTTP/HTTPS:
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
Если сервер уже настроен с нуля и домен ещё не привязан, сначала разберитесь с DNS — этот шаг разобран в статье про настройку домена и DNS с нуля на Ubuntu 24.04.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка Docker и запуск MongoDB с репликасетом
Rocket.Chat официально распространяется как Docker-образ, и это самый предсказуемый способ его развернуть — без сборки из исходников и без танцев с зависимостями Node.js. Если Docker ещё не стоит:
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
Подробный разбор установки — в статье Docker на Ubuntu 24.04 с нуля.
Важный нюанс, из-за которого чаще всего спотыкаются новички: Rocket.Chat не работает с обычной одиночной MongoDB — ему нужен репликасет (даже из одного узла), потому что приложение читает изменения через oplog. Без него сервис либо не запустится, либо будет падать при первой попытке что-то записать.
Создайте рабочую директорию и файл docker-compose.yml:
mkdir -p /opt/rocketchat && cd /opt/rocketchat
nano docker-compose.yml
services:
rocketchat:
image: registry.rocket.chat/rocketchat/rocket.chat:latest
restart: unless-stopped
environment:
- MONGO_URL=mongodb://mongodb:27017/rocketchat?replicaSet=rs0
- MONGO_OPLOG_URL=mongodb://mongodb:27017/local?replicaSet=rs0
- ROOT_URL=https://chat.example.com
- PORT=3000
- DEPLOY_METHOD=docker
depends_on:
- mongodb
ports:
- "127.0.0.1:3000:3000"
volumes:
- ./uploads:/app/uploads
mongodb:
image: mongo:6.0
restart: unless-stopped
command: mongod --replSet rs0 --oplogSize 128 --bind_ip_all
volumes:
- ./mongo-data:/data/db
mongo-init-replica:
image: mongo:6.0
restart: "no"
depends_on:
- mongodb
command: >
bash -c "sleep 5 && mongosh mongodb://mongodb:27017 --eval
\"try { rs.status() } catch (e) { rs.initiate({_id:'rs0', members:[{_id:0, host:'mongodb:27017'}]}) }\""
Замените chat.example.com на ваш реальный домен и запустите:
docker compose up -d
docker compose logs -f rocketchat
Первый старт занимает 1-2 минуты — Rocket.Chat применяет миграции к базе. Дождитесь в логах строки о том, что сервер слушает порт 3000, прежде чем идти дальше.
Образ latest удобен для быстрого старта, но для продакшена лучше зафиксировать конкретный тег версии (посмотреть актуальные теги можно на странице образа в реестре) — так вы не поймаете неожиданный breaking change при пересоздании контейнера.
Обратный прокси Nginx и SSL-сертификат
Rocket.Chat слушает локальный порт 3000, наружу его отдаёт Nginx с SSL. Установите Nginx, если его ещё нет:
apt install -y nginx
Конфиг с учётом того, что видеозвонкам через WebRTC нужны заголовки для WebSocket-соединений:
server {
listen 80;
server_name chat.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
proxy_read_timeout 90s;
}
}
Активируйте конфиг и получите сертификат через certbot:
ln -s /etc/nginx/sites-available/rocketchat /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
apt install -y certbot python3-certbot-nginx
certbot --nginx -d chat.example.com
Certbot сам допишет секцию listen 443 ssl и настроит редирект с 80 на 443. Если хотите разобраться в механике Let's Encrypt подробнее или столкнётесь с ошибкой выпуска — это отдельно разобрано в статье про установку Let's Encrypt SSL на VPS. Общие принципы настройки Nginx как обратного прокси — в статье Nginx как реверс-прокси на VPS.
Без валидного SSL WebRTC-звонки в браузере работать не будут вообще — это ограничение самого протокола, а не Rocket.Chat, так что этот шаг пропускать нельзя.
Первый запуск, администратор и базовая настройка
Откройте https://chat.example.com в браузере. Rocket.Chat покажет мастер первоначальной настройки:
- создание аккаунта администратора (логин, email, пароль);
- базовая информация об организации (название, размер команды, отрасль — можно пропустить);
- вопрос про регистрацию в Rocket.Chat Cloud — для чисто локальной установки без облачной синхронизации смело отказывайтесь, это не обязательно для работы сервера.
После мастера вы попадаете в админ-панель (Administration → Workspace). Первое, что стоит проверить и поправить:
- General → Site URL — должен совпадать с
ROOT_URLиз docker-compose, иначе ссылки в уведомлениях и приглашениях будут битыми; - Accounts → Registration — по умолчанию регистрация открыта всем, для внутреннего мессенджера компании её стоит закрыть или ограничить приглашениями;
- Email → SMTP — без настроенного SMTP не будут работать восстановление пароля и приглашения по почте.
Приглашение сотрудников — через Administration → Users → Add User или простую ссылку-приглашение, если оставили открытую регистрацию для вашего домена почты.
Видеозвонки, интеграции, боты и резервное копирование
Видеозвонки. В базовой поставке Rocket.Chat умеет 1:1 видеозвонки через WebRTC без дополнительной настройки — достаточно валидного SSL, который вы уже настроили. Для групповых видеоконференций нужна интеграция с Jitsi: либо публичный meet.jit.si (включается в Administration → Video Conference в одну галочку), либо свой инстанс Jitsi на отдельном VPS — так вы не зависите от чужой инфраструктуры и не упираетесь в её лимиты.
Интеграции и боты. Rocket.Chat поддерживает Incoming/Outgoing Webhooks (Administration → Integrations) — через них заводятся уведомления из GitLab, Grafana, систем мониторинга и любых внутренних скриптов, отправляющих POST-запрос с JSON. Для более сложной логики есть Rocket.Chat Apps — устанавливаются из встроенного маркетплейса или загружаются вручную как zip-пакет.
Бэкапы. Всё состояние Rocket.Chat — это данные MongoDB плюс загруженные файлы в volume uploads. Минимальный рабочий вариант бэкапа:
docker compose exec mongodb mongodump --db rocketchat --archive=/data/db/backup.archive
docker cp rocketchat-mongodb-1:/data/db/backup.archive ./backup-$(date +%F).archive
tar -czf uploads-$(date +%F).tar.gz ./uploads
Для регулярных автоматических бэкапов удобнее не городить это на cron вручную, а посмотреть на решения из статьи про бэкап Docker volume на VPS — принцип с volume для файлов там разобран подробно, а дамп MongoDB просто добавляется отдельным шагом в тот же скрипт.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Rocket.Chat точно бесплатный?
Community-издание (то, что вы разворачиваете через Docker) полностью бесплатно и не имеет ограничений по числу пользователей. Платные Enterprise-тарифы добавляют SSO через SAML, аудит-лог и SLA-поддержку — для большинства команд это не требуется.
Можно ли обойтись без Docker и поставить напрямую на систему?
Технически да, через официальные .deb/.rpm-пакеты со Snap или ручную сборку из исходников на Node.js, но это заметно больше движущихся частей — версии Node, MongoDB, systemd-юнитов нужно синхронизировать вручную. Docker Compose проще поддерживать и обновлять.
Почему контейнер mongodb постоянно перезапускается?
Чаще всего причина — репликасет не инициализирован. Проверьте логи mongo-init-replica и вручную выполните rs.status() внутри контейнера MongoDB (docker compose exec mongodb mongosh --eval "rs.status()") — если он вернёт ошибку про отсутствие конфигурации, повторите rs.initiate().
Как перенести Rocket.Chat на другой сервер?
Перенести директорию /opt/rocketchat целиком (включая mongo-data и uploads) на новый сервер и поднять docker compose up -d — данные и настройки сохранятся, поскольку вся конфигурация живёт в MongoDB и на диске. Общий подход к переносу Docker-проектов между серверами описан отдельно.
Сколько человек выдержит сервер с 4 ГБ RAM?
Точных цифр без нагрузочного теста никто не даст — сильно зависит от активности (текстовый чат или постоянные видеозвонки), количества интеграций и ботов. Как ориентир: команда из 20-30 человек с обычной текстовой активностью на таком сервере работает без заметных тормозов, но при росте лучше следить за потреблением MongoDB через docker stats и увеличивать RAM заранее, а не по факту падения.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →