Установка Rocket.Chat на Ubuntu 16.04 с Nginx — пошагово

Краткий план
- Подготовка сервера и зависимостей
- Установка MongoDB и настройка ReplicaSet
- Установка Node.js и npm (специфическая версия для Rocket.Chat)
- Размещение Rocket.Chat в /var/www и запуск
- Настройка Nginx как обратного прокси и HTTPS
- Тестирование и создание первого администратора
Требования
- Сервер Ubuntu 16.04 (LTS)
- root-доступ или sudo
- Доменные имена и доступ к DNS для production (опционально тестовый IP)
- Понимание командной строки и базовых средств администрирования
Важно: тестируйте на отдельной машине или в изолированной среде прежде чем переходить в production.
Шаг 1 — Установка зависимостей Rocket.Chat
Подключитесь к серверу по SSH и получите привилегии root:
ssh [email protected]
sudo su
Обновите список пакетов:
apt-get update
Установите требуемые пакеты:
apt-get install curl graphicsmagick build-essential
Примечание: graphicsmagick нужен для обработки миниатюр и изображений в Rocket.Chat.
Шаг 2 — Установка MongoDB
Rocket.Chat использует MongoDB. В этом руководстве устанавливается MongoDB 3.2 из официального репозитория.
Добавьте GPG-ключ MongoDB:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
Добавьте репозиторий MongoDB (команда формирует запись на основе вашей версии Ubuntu):
echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
Обновите репозитории и установите MongoDB:
apt-get update
apt-get install mongodb-org
Включите автозапуск и запустите службу:
systemctl enable mongod
systemctl start mongod
По умолчанию MongoDB слушает порт 27017.
Шаг 3 — Настройка ReplicaSet MongoDB
Коротко: ReplicaSet повышает устойчивость и обеспечивает правильную работу oplog, необходимого для синхронизации Rocket.Chat. ReplicaSet можно настроить даже на одном узле для работы oplog.
Откройте конфигурацию mongod:
vim /etc/mongod.conf
Найдите блок сетевых настроек и закомментируйте bindIp, чтобы MongoDB не была жёстко привязана только к localhost:
net:
port: 27017
#bindIp: 127.0.0.1
Добавьте секцию replication и задайте имя набора rs0:
#replication:
replication:
oplogSizeMB: 1
replSetName: rs0
Сохраните файл и перезапустите MongoDB:
systemctl restart mongod
Инициализируйте ReplicaSet в оболочке mongo:
export LC_ALL=C
mongo
rs.initiate()
Ожидаемый ответ содержит поле “ok” со значением 1. Это означает успешную инициализацию.
Важно: оставлять bindIp закомментированным в production без дополнительных мер не рекомендуется. Убедитесь, что доступ к MongoDB ограничен файерволом и только доверенные хосты могут подключаться.
Шаг 4 — Установка npm и Node.js
Rocket.Chat в указанной версии требует Node.js 4.5. Мы установим nodejs/npm из репозиториев, затем установим утилиту n для управления версиями Node и переключимся на 4.5.
Установка из репозитория Ubuntu:
apt-get install nodejs npm
Установите n глобально и примените нужную версию Node:
npm install -g n
sudo n 4.5
Проверьте версии:
node --version
npm -v
Примечание: в более новых релизах Rocket.Chat используются другие версии Node.js. Для production проверяйте требования совместимости в официальной документации перед апгрейдом.
Шаг 5 — Установка сервера Rocket.Chat
Скачайте последнюю сборку и распакуйте в /var/www/:
curl -L https://rocket.chat/releases/latest/download -o rocket.chat.tgz
tar -xzvf rocket.chat.tgz
Создайте директорию и переместите bundle:
mkdir -p /var/www/
mv bundle Rocket.Chat
mv Rocket.Chat /var/www/
Установите зависимости и запустите приложение в текущей сессии (для теста):
cd /var/www/Rocket.Chat/
cd programs/server/
npm install
cd ../../
export ROOT_URL=http://192.168.1.110:3000/
export MONGO_URL=mongodb://nyanko-sensei:27017/rocketchat?replicaSet=rs0
export PORT=3000
node main.js
После запуска откройте http://192.168.1.110:3000 в браузере для теста.
Важно: запуск node main.js в интерактивной сессии подходит для теста. Для долгосрочной работы используйте системный сервис (systemd) или менеджер процессов (pm2). Пример systemd приведён ниже.
Шаг 6 — Установка и настройка Nginx как обратного прокси
Мы будем запускать Rocket.Chat за Nginx, чтобы организовать HTTPS, виртуальные хосты и улучшенную производительность.
Установите Nginx:
apt-get install nginx
Создайте папку для SSL и перейдите в неё:
mkdir -p /etc/nginx/ssl/
cd /etc/nginx/ssl/
Сгенерируйте самоподписанный сертификат (в production используйте Let’s Encrypt или другой удостоверяющий центр):
openssl req -new -x509 -days 365 -nodes -out /etc/nginx/ssl/rocket-chat.crt -keyout /etc/nginx/ssl/rocket-chat.key
chmod 400 rocket-chat.key
Создайте файл виртуального хоста:
cd /etc/nginx/sites-available/
vim rocket-chat
Вставьте конфигурацию (замените rocket-chat.co на ваш реальный домен):
# Upstreams
upstream backend {
server 127.0.0.1:3000;
}
# Redirect Options
server {
listen 80;
server_name rocket-chat.co;
# enforce https
return 301 https://$server_name$request_uri;
}
# HTTPS Server
server {
listen 443;
server_name rocket-chat.co;
error_log /var/log/nginx/rocketchat.access.log;
ssl on;
ssl_certificate /etc/nginx/ssl/rocket-chat.crt;
ssl_certificate_key /etc/nginx/ssl/rocket-chat.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # dont use SSLv3 ref: POODLE
location / {
proxy_pass http://192.168.1.110:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forward-Proto http;
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
}
Активируйте сайт и проверьте конфигурацию:
ln -s /etc/nginx/sites-available/rocket-chat /etc/nginx/sites-enabled/rocket-chat
nginx -t
systemctl restart nginx
Примечание: в конфигурации выше proxy_pass направляет трафик на внутренний IP 192.168.1.110:3000. Замените на 127.0.0.1:3000 при локальном запуске.
Шаг 7 — Тестирование Rocket.Chat за Nginx
Запустите Rocket.Chat с новыми переменными среды (ROOT_URL должен быть https):
cd /var/www/Rocket.Chat/
export ROOT_URL=https://rocket-chat.co
export MONGO_URL=mongodb://nyanko-sensei:27017/rocketchat?replicaSet=rs0
export PORT=3000
node main.js
Откройте в браузере https://rocket-chat.co (замените на ваш домен). При первом запуске создайте администратора через форму регистрации.
В результате вы получите рабочий интерфейс администрирования и возможность создать каналы для команды.
Запуск Rocket.Chat как системной службы (systemd)
Рекомендуется управлять приложением через systemd или pm2. Пример простого systemd unit-файла:
[Unit]
Description=Rocket.Chat server
After=network.target mongod.target
[Service]
Type=simple
Environment=ROOT_URL=https://rocket-chat.co
Environment=MONGO_URL=mongodb://nyanko-sensei:27017/rocketchat?replicaSet=rs0
Environment=PORT=3000
User=www-data
WorkingDirectory=/var/www/Rocket.Chat
ExecStart=/usr/bin/node /var/www/Rocket.Chat/main.js
Restart=always
[Install]
WantedBy=multi-user.target
Сохраните файл как /etc/systemd/system/rocketchat.service, затем выполните:
systemctl daemon-reload
systemctl enable rocketchat
systemctl start rocketchat
systemctl status rocketchat
Важно: убедитесь, что пользователь (в примере www-data) имеет доступ к файлам и правам в каталоге приложения.
Безопасность и эксплуатация
- SSL: в production используйте бесплатные сертификаты Let’s Encrypt или коммерческие сертификаты.
- Ограничьте доступ к MongoDB через файервол (UFW/iptables) только с доверенных хостов.
- Обновления: тестируйте обновления на staging перед применением в production. Бэкапьте MongoDB.
- Логи: настройте ротацию логов для Nginx и Rocket.Chat.
- Мониторинг: интегрируйте базовые метрики и алерты по доступности сервиса.
Типичные ошибки и способы решения
- Проблема: при инициализации rs.initiate() поле ok != 1 — проверьте сетевые настройки и bindIp.
- Проблема: прокси не передаёт WebSocket — проверьте proxy_set_header Upgrade и Connection, а также proxy_http_version 1.1.
- Проблема: приложение не запускается после смены Node.js — убедитесь, что зависимости пересобраны: зайдите в programs/server и выполните npm install.
Критерии приёмки
- Сервис Rocket.Chat отвечает по HTTPS и доступен по заданному домену.
- Веб‑интерфейс позволяет зарегистрировать администратора и создать канал.
- MongoDB работает с ReplicaSet и oplog доступен.
- Служба запущена как systemd unit или под управлением pm2 и автоматически рестартует приложение.
Чек-лист для ролей
Администратор:
- Проверить DNS и сертификаты
- Убедиться в доступности порта 443
DevOps:
- Настроить systemd/pm2
- Настроить бэкапы MongoDB
- Настроить мониторинг и логирование
Специалист по безопасности:
- Ограничить доступ к MongoDB
- Обновить TLS конфигурацию и использовать современные протоколы
Мини-методология быстрого развертывания (4 шага)
- Подготовить сервер и установить зависимости. 2. Установить и инициализировать MongoDB с ReplicaSet. 3. Развернуть Rocket.Chat и проверить локально. 4. Настроить Nginx и SSL, запустить как службу.
Краткая памятка по ключевым значениям
- Порт MongoDB: 27017
- Порт Rocket.Chat по умолчанию: 3000
- Самоподписанный сертификат в примере действителен 365 дней
- Директория приложения: /var/www/Rocket.Chat
Миграция и совместимость
Перед обновлением Node.js или MongoDB проверьте официальную документацию Rocket.Chat на предмет минимально поддерживаемых версий. В крупных апгрейдах используйте промежуточный стенд и тестовую миграцию данных.
Ресурсы и ссылки
- Официальная документация установки Rocket.Chat: https://rocket.chat/docs/installation/manual-installation/ubuntu/
Резюме
Rocket.Chat можно быстро развернуть на Ubuntu 16.04: достаточно установить MongoDB с ReplicaSet, настроить нужную версию Node.js, развернуть bundle в /var/www и поставить Nginx в качестве обратного прокси с HTTPS. Для production рекомендованы systemd/pm2, ограничение доступа к базе данных и использование доверенных SSL-сертификатов.
Extras: результаты после обновления переменных окружения и экранные снимки приведены в статье для наглядности.
Похожие материалы

Установка Redmine 4.2.3 на Rocky Linux с PostgreSQL и Apache

Вырезать изображение в Xara Xtreme

One UI 8 Beta — как присоединиться и что нового

Исправить медленный отклик OnePlus 9/9R/9 Pro

Экспорт из digiKam в Flickr, PicasaWeb, Facebook
