Установка и настройка Rocket Chat на Ubuntu Server 20 с подключением к Active Directory

Будет описан процесс установки Rocket Chat с версией сервера 4.3.1 и версией клиента 3.7.6 на Ubuntu Server 20

Установка сервера

Все следующие команды выполняются с правами суперпользователя

Обновление списка пакетов
apt-get update
Добавление ключа репозитория mongoDB, вместо 4.4 можно указать другую версию, например 5.0
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add - 
Добавление репозитория mongoDB, вместо 4.4 так же можно указать другую версию
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
Добавление репозитория Node.js, вместо 12 можно указать другую версию, например 14
curl -sL https://deb.nodesource.com/setup_12.x | sudo bash -
Установка необходимых компонентов
apt-get install -y build-essential mongodb-org nodejs graphicsmagick
Rocket Chat требует определенную версию Node.js, какая конкретно версия Node.js нужна можно посмотреть в описании к релизу по |ссылке| в разделе Engine versions. Чтобы выбрать нужную версию нужно сначала установить инструмент под названием "n" командой
npm install -g inherits n
И можно установить нужную версию Node.js командой
n 12.22.1
Для установки самого Rocket Chat нужно скачать архив
curl -L https://releases.rocket.chat/latest/download -o /tmp/rocket.chat.tgz
Распаковать его
tar -xzf /tmp/rocket.chat.tgz -C /tmp
Можно удалить архив
rm /tmp/rocket.chat.tgz
Перейти в каталог для установки
cd /tmp/bundle/programs/server
И установить
npm install
Переместить и переименовать каталог с Rocket Chat
mv /tmp/bundle /opt/Rocket.Chat
Создать пользователя для запуска Rocket Chat и запретить логиниться под ним
useradd -M rocketchat
usermod -L rocketchat
Изменить владельца каталога
chown -R rocketchat:rocketchat /opt/Rocket.Chat
Создать юнит, для этого
Нужно создать файл
touch /lib/systemd/system/rocketchat.service
И записать в него следующее
[Unit]
Description=The Rocket.Chat server
After=network.target remote-fs.target nss-lookup.target mongod.service
[Service]
ExecStart=/usr/local/bin/node /opt/Rocket.Chat/main.js
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=rocketchat
User=rocketchat
Environment=MONGO_URL=mongodb://localhost:27017/rocketchat?replicaSet=rs01 MONGO_OPLOG_URL=mongodb://localhost:27017/local?replicaSet=rs01 ROOT_URL=http://rocketchat:3000 PORT=3000
[Install]
WantedBy=multi-user.target
В параметре ROOT_URL указывается hostname сервера, на котором устанавливается Rocket Chat, по этому имени можно будет осуществлять подключение клиента, вместо ip-адреса сервера
Посте установки mongoDB нужно провести еще одну настройку - настройку механизма хранения и репликации
Для mongoDB 4.0 и ниже выполнить
sed -i "s/^#  engine:/  engine: mmapv1/"  /etc/mongod.conf
sed -i "s/^#replication:/replication:\n  replSetName: rs01/" /etc/mongod.conf
Для mongoDB 4.2 и выше выполнить
sed -i "s/^#replication:/replication:\n  replSetName: rs01/" /etc/mongod.conf
Эти команды изменяют конфигурацию в файле /etc/mongod.conf
Добавление в автозагрузку и запуск mongoDB
systemctl enable mongod
systemctl start mongod
Если mongod не запускается и в выводе команды
systemctl status mongod
Есть такие ошибки
mongod.service: Main process exited, code=dumped, status=4/ILL
mongod.service: Failed with result 'core-dump'.
Возможно дело в том, что mongoDB последних версий не поддерживает старые процессоры и нужно удалить установленную версию mongoDB командами
apt-get purge mongodb-org*
apt-get purge mongodb*
rm -rf /var/log/mongodb /var/lib/mongodb
apt-get autoremove
Удалить репозиторий
/etc/apt/sources.list.d/mongodb-org-4.4.list
И провести установку более старой версии.
Проверить работу mongoDB можно выполнив
mongo --eval "printjson(rs.initiate())"
Должен быть примерно следующий вывод
MongoDB shell version v4.0.27
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("51d6857c-ebb9-474c-aeb1-c64bd2c03c71") }
MongoDB server version: 4.0.27
{
  "operationTime" : Timestamp(1642588702, 3),
  "ok" : 0,
  "errmsg" : "already initialized",
  "code" : 23,
  "codeName" : "AlreadyInitialized",
  "$clusterTime" : {
    "clusterTime" : Timestamp(1642588702, 3),
    "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
    }
  }
}
Если вывод не полный нужно перезапустить службу mongod
Добавление в автозагрузку и запуск Rocket chat
systemctl enable rocketchat
systemctl start rocketchat
Если проверить статус командой
systemctl status rocketchat
Вывод должен быть примерно таким
|    MongoDB Engine: wiredTiger                  |
|          Platform: linux                       |
|      Process Port: 3000                        |
|          Site URL: http://rocketchat:3000      |
|  ReplicaSet OpLog: Enabled                     |
|       Commit Hash: 21045735b2                  |
|     Commit Branch: HEAD                        |
Если появляется примерно такая ошибка
/opt/Rocket.Chat/programs/server/node_modules/fibers/future.js:313
#011#011#011#011#011#011throw(ex);
#011#011#011#011#011#011^
MongoServerSelectionError: Server selection timed out after 30000 ms
at Timeout._onTimeout (/opt/Rocket.Chat/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/core/sdam/topology.js:437:30)
at listOnTimeout (internal/timers.js:554:17)
at processTimers (internal/timers.js:497:7) {
reason: TopologyDescription {
type: 'ReplicaSetNoPrimary',
setName: null,
maxSetVersion: null,
maxElectionId: null,
servers: Map {},
stale: false,
compatible: true,
compatibilityError: null,
logicalSessionTimeoutMinutes: null,
heartbeatFrequencyMS: 10000,
localThresholdMS: 15,
commonWireVersion: 9
Значит стоит неправильная версия Node.js

Установка клиента

Скачать нужную версию можно с |сайта|.

После установки нужно провести первоначальную настройку.

При запуске нужно ввести адрес сервера указав имя хоста или ip-адрес и порт, то есть строка подключения будет выглядеть следующим образом
http://rocketchat:3000
Или
http://192.168.10.15:3000

Затем нужно создать учетную запись администратора

Информацию об организации можно не указывать

В информации о сервере нужно указать тип - Закрытое сообщество

В регистрации сервера - Сохранять автономность

Подключение к домену

Если нет домена, можно создать пользователей Rocket Chat вручную, а если домен есть, можно настроить получение пользователей из него. Можно создать в домене пользователя для обмена данными с Rocket Chat или использовать существующего.

    Пусть домен имеет следующие характеристики:
  • Название домена: office.domain.com
  • Ip-адрес контроллера домена: 192.168.10.25
  • Пользователь домена: rocket_domain
  • Папка в которой создан пользователь rocket_domain: Users
Для настройки получения пользователей из домена, нужно под учетной записью администратора чата в меню нажать иконку пользователя, зайти в Администрирование Вход в настройки Rocket Chat Найти пункт Протокол LDAP Пункт Протокол LDAP
    и сделать следующие настройки:
  • Включить LDAP
  • Server Type: Active Directory
  • Хост: 192.168.10.25
  • LDAP порт: 389
  • Включить: Переподключение
  • Включить: Резервная авторизация
    • Раздел Authentification
    • Включить
    • User DN: cn = rocket_domain, cn = Users, dc = office, dc = domain, dc = com
    • Пароль: пароль указанного пользователя
Настройки LDAP
На вкладке User Search, в разделе Search Filter указать параметр
Base DN: dc = office, dc = domain, dc = com Установка параметра Base DN
На вкладке Data Sync указать домен по умолчанию, если его не будет, пользователи, у которых в AD не указана почта - не добавятся
  office.domain.com Указать домен по умолчанию

Теперь можно выполнить проверку соединения нажав на соответствующую кнопку и введя имя доменного пользователя. Затем можно нажать Запуск фоновой синхронизации.

Другие полезные настройки которые можно добавить

    Раздел Внешний вид ⇒ Пользовательский интерфейс
  • Использовать инициалы полного имени для создания аватара (ВКЛ)
  • Использовать настоящее имя (ВКЛ)
  • Показывать роли пользователей (ВЫКЛ)
    Раздел Общие настройки ⇒ Уведомления
  • Максимальное количество участников комнаты до отключения всех текстовых уведомлений
    Раздел Учетные записи
  • Истечение срока авторизации в днях: 0 (без истечения срока)
  • Разрешить смену имени (ВЫКЛ)
  • Разрешить изменять логин (ВЫКЛ)
  • Разрешить пользователю изменять настройки профиля (ВЫКЛ)
  • Разрешить изменение пароля для пользователей OAuth (ВЫКЛ)
  • Разрешить уведомления по электронной почте (ВЫКЛ)
    Раздел Учетные записи ⇒ Регистрация
  • Отправить электронное письмо пользователю, когда пользователь активирован (ВЫКЛ)
  • Отправить письмо пользователю, когда пользователь деактивирован (ВЫКЛ)
    Раздел Учетные записи ⇒ Пользовательский интерфейс
  • Использовать инициалы полного имени для создания аватара (ВКЛ)
  • Использовать настоящее имя (ВКЛ)
  • Показывать роли пользователей (ВЫКЛ)
    Раздел Учетные записи ⇒ Настройка пользователя по умолчания
  • Установка статуса "Нет на месте" (ВКЛ)
  • Требовать взаимодействия для отклонения уведомления на рабочем столе (ВКЛ)
  • Скрывать роли пользователей (ВКЛ)
  • Офлайн уведомления по Email (ВЫКЛ)
  • Уведомление о новой публичной комнате (ВЫКЛ)
    Раздел Учетные записи ⇒ Двухфакторная аутентификация
  • Включить двухфакторную аутентификацию (ВЫКЛ)
    Раздел Сообщение
  • Скрыть Системные Сообщения

Настройка времени показа уведомлений о новых сообщениях

В данной версии нельзя указать время показа уведомлений о новых сообщениях через настройки, можно изменить его через реестр windows, той системы на которой будет стоять клиент, для этого нужно сделать файл с расширением .reg и выполнить его со следующим содержимым
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Control Panel\Accessibility]
"MessageDuration"=dword:00002710
где 2710 - это количество секунд в шестнадцатиричном виде или 10000 секунд в десятичном виде.
После записи значения в реестр все сообщения системы и чата будут отображаться, пока не пройдет 10000 секунд от получения сообщения. Эту настройку так же можно распространить через групповые политики.

Установка клиента Rocket Chat через групповые политики(gpo) Active directory

Нужно сформировать bat файл со следующим содержимым (два двоеточия - это комментарий)
:: Проверка, установлен ли Rocket Chat
if not exist %LOCALAPPDATA%\Programs\rocketchat\ (goto GO) else (goto STOP)
:GO
if not exist %APPDATA%\Rocket.Chat\ md %APPDATA%\Rocket.Chat\
:: Копирование конфигурационного файла
copy /y \\192.168.10.25\netlogon\config.json %APPDATA%\Rocket.Chat\
:: Установка
msiexec /i \\192.168.10.25\netlogon\rocketchat-setup-3.7.6.msi /quiet
TIMEOUT /T 30
:: Добавление в автозапуск
copy /y "%USERPROFILE%\desktop\Rocket.Chat.lnk" "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\"
:STOP
Копирование конфигурационного файла config.json позволяет после установки не вводить на каждом компьютере адрес сервера.
Сам файл config.json можно взять из папки %APPDATA%\Rocket.Chat на компьютере где установлен и настроен Rocket Chat.
Для установки через домен нужно поместить bat файл, установочный пакет msi клиента Rocket Chat и файл config.json в общедоступную папку. Затем создать групповую политику, в которую по пути
Конфигурация пользователя
  Политики
    Конфигурация Windows 
      Сценарии
Добавить путь к bat файлу описанному выше. После применения политики Rocket Chat будет установлен и в него можно будет залогиниться.

Алгоритм установки на сайте Rocket Chat: |ссылка|
Алгоритм установки MongoDB: |ссылка|
Серверная часть Rocket Chat: |ссылка|
Клиентская часть Rocket Chat: |ссылка|