Краткое описание: В данном руководстве рассматривается установка Rocket.Chat на CentOS 7. Текстовый мессенджер для Andoid, IOS, Windows, Linux, Web. Также рассматривается настройка Nginx, выпуск сертификата SSL и настройка переадресации на HTTPS.

Нужна консультация или помощь в решении IT вопроса?


Корпоративный мессенджер Rocket.Chat

В начале этого года я принимал участие во внедрении Skype for Bussiness 2015 и интеграции в наши будние бизнес-процессы Битрикс24. Как коммуникаторы корпоративного сегмента оба продукта отлично справляются с возложенным функционалом, но так случилось, что на новом месте работы нет возможности иметь в арсенале ни S4B ни Битрикс24. Остается только OpenSource и наличие XMPP на почтовом сервере Mdaemon. Почему бы нет, доменное имя и сертификат оплачены. Именно с таким настроением начал тестирование клиентской части. Windows и andoid клиенты так произвольно отрабатывали, что порой казалось «а интернет вообще работает?!». Но кривизну рук исправлять я не стал и сразу же приступил к поиску альтернативы, который привел меня к аналогичной статье как эта, итоговый выбор которой пал на Rocket.Chat.

Установка Rocket.Chat на CentOS 7

На Hypervisor-е был установлен минимальный пакет CentOS и собственно сам Rocket.Chat. При установке активно обращался к инструкции разработчиков. Следующим важным шагом была синхронизация с LDAP, ну куда же без него. AD у меня крутится на Windows Server 2016 и по прошлому опыту с Битрикс24 я создал группу, по которой в расписании будут добавляться пользователи. Это было удобно тогда и оказалось удобным и сейчас. Фильтр запроса будет расширен исключением отключенных учётных записей, сейчас он такой memberOf=cn=Rocket.Chat,ou=Groups,dc=DOMEN,dc=COM.

Набор пакетов: CentOS+Rocket.Chat+MongoDB+Nginx+LetsEncrypt

yum -y install epel-release nano && yum -y update
nano /etc/yum.repos.d/mongodb-org.repo

[mongodb-org]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc

yum install -y nodejs curl GraphicsMagick npm mongodb-org-server mongodb-org gcc-c++
npm install -g inherits n
n 8.9.3

cd /opt
curl -L https://releases.rocket.chat/latest/download -o rocket.chat.tar.gz
tar zxvf rocket.chat.tar.gz
mv bundle Rocket.Chat
cd Rocket.Chat/programs/server
npm install
cd ../..

export PORT=3000
export ROOT_URL=http://your-host-name.com-as-accessed-from-internet:3000/
export MONGO_URL=mongodb://localhost:27017/rocketchat

chkconfig mongod on
systemctl start mongod
/etc/init.d/mongod start
node main.js

nano /usr/lib/systemd/system/rocketchat.service
  [Unit]
  Description=The Rocket.Chat server
  After=network.target remote-fs.target nss-lookup.target nginx.target mongod.target
  [Service]
  ExecStart=/usr/local/bin/node /opt/Rocket.Chat/main.js
  StandardOutput=syslog
  StandardError=syslog
  SyslogIdentifier=rocketchat
  User=root
  Environment=MONGO_URL=mongodb://localhost:27017/rocketchat ROOT_URL=http://your-host-name.com-as-accessed-from-internet:3000/ PORT=3000
  [Install]
  WantedBy=multi-user.target

systemctl enable rocketchat.service
systemctl start rocketchat.service

systemctl stop rocketchat.service
yum install nginx
yum install certbot-nginx
делаем backup конфигурации nginx
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup
certbot --authenticator standalone --installer nginx -d domain.name
конфигурации виртуальных хостом будут работать через ссылку
mkdir /etc/nginx/sites-available
mkdir /etc/nginx/sites-enabled
адаптируем конфигурацию nginx
nano /etc/nginx/nginx.conf
добавляем в директиву http
include /etc/nginx/sites-enabled/*.conf;
и комментируем блок server, виртуальные хосты сохраним в отдельных папках.

Создаем конфигурацию виртуального хоста. Из основного она будет содержать переадресацию с портов 80,443 на 3000 и ссылки на сертификаты.
nano /etc/nginx/sites-available/domain.name.conf
server {
  listen 80;
  server_name domain.name;
    return 301 https://$server_name$request_uri;
}
server {
    listen 443;
    server_name domain.name;

    error_log /var/log/nginx/rocketchat.access.log;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/domain.name
/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domain.name
/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # don’t use SSLv3 ref: POODLE
    location / {
        proxy_pass http://domain.name: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/domain.name.conf /etc/nginx/sites-enabled/domain.name.conf
обновляем конфигурацию RocketChat для доступа по https и 3000 порту
Environment="ROOT_URL=https://domain.name"
Environment="PORT=3000"
Environment="MONGO_URL=mongodb://localhost:27017/rocketchat"
firewall-cmd --add-service=https
firewall-cmd --runtime-to-permanent
systemctl daemon-reload
полезная привычна тестирования конфигурации nginx
nginx -t
systemctl start nginx
systemctl enable nginx
systemctl start rocketchat.service
cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
semodule -i mynginx.pp

добавление расписания на обновление сертификата
nano /etc/crontab
0 0 15 * * /usr/bin/certbot renew --quiet

Rocket.Chat обновление версии

cd /opt/Rocket.Chat/programs/server/npm/node_modules
npm rebuild sharp
npm i -g npm
npm rebuild sharp

Общее описание установки Rocket.Chat

  1. Установка Nginx, LetsEncrypt и получение сертификата.
  2. Создание базовой конфигурации для http и https.
  3. Обновление конфигурации Rocket.Chat для работы по https и на 3000-ом порту.

Эта конфигурация была перенесена в продуктивную среду с разных источников и вызывала у меня небольшую радость, когда запустилось с первого раза. Заняло это не более 30мин.

Тестирование Rocket.Chat на Android, IOS, Web

По регистрации оборудования в сети половина клиентов это смартфоны. Поэтому тестирование крутилось в основном на возможности доставки push-сообщение и одновременной работы нескольких клиентов под одной учётной записью. В админ-панели есть переключать именно этого режима, когда сообщения одновременно приходят и на смартфон и на ПК. Отдельное спасибо за работу внешнего сервера для push(иначе нужно иметь свой).

Во второй день работы в системе было зарегистрировано 26 пользователей, больше заниматься презентацией не было сил и я написал инструкцию)) Это ещё одна палочка-выручалочка в подобных делах.

Спустя месяц…Все это время меня беспокоило отсутствие сертификата, в воздухе витало правило о том, что корпоративные сервисы должны иметь максимально доступный уровень защиты\шифрования. Самый доступный выбор — LetsEncrypt. Начиналось все в тестовой среде, т.к. выбор между Nginx и Apache не был сделан. На старте у меня Centos и Rocket.Chat на 80-ом порту по официальной инструкции.Последующие цели самые обычные — сделать доступ по https.

Преимущества использования SSL

  1. Приложения на мобильных устройствах стали работать лучше. В более легкой версии приложения(RocketChat+) исчезла постоянная авторизация после очередного выхода из сна. Присутствие этой авторизации напоминало использование мобильное интернета, когда между подключением к сети и первым доступом может пройти 10-20 сек.. А на IOS это приложение по http вообще отказывалось запускаться. Появились аватары и возможность передачи смайлов.
  2. Не так тревожно по сравнению с http.

Пример работы Rocket.Chat

А дальше я хочу обновиться, за месяц у разработчиков появилась новая stable версия. На практике это выглядит так:

1.Goto the installation folder in this case: cd /opt/
2.Remove or move the Rocket.Chat folder.

Успешный запуск:

Установка RocketChat, обновление версии
Так выглядит мой рабочий чат.Установка RocketChat, windows клиент

Если у вас есть профессиональный интерес в расширении данной статьи — заполните форму запроса.