Краткое описание: В данном руководстве рассматривается установка Rocket.Chat на CentOS 7. Текстовый мессенджер для Andoid, IOS, Windows, Linux, Web. Также рассматривается настройка Nginx, выпуск сертификата SSL и настройка переадресации на HTTPS.
Корпоративный мессенджер 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
- Установка Nginx, LetsEncrypt и получение сертификата.
- Создание базовой конфигурации для http и https.
- Обновление конфигурации Rocket.Chat для работы по https и на 3000-ом порту.
Эта конфигурация была перенесена в продуктивную среду с разных источников и вызывала у меня небольшую радость, когда запустилось с первого раза. Заняло это не более 30мин.
Тестирование Rocket.Chat на Android, IOS, Web
По регистрации оборудования в сети половина клиентов это смартфоны. Поэтому тестирование крутилось в основном на возможности доставки push-сообщение и одновременной работы нескольких клиентов под одной учётной записью. В админ-панели есть переключать именно этого режима, когда сообщения одновременно приходят и на смартфон и на ПК. Отдельное спасибо за работу внешнего сервера для push(иначе нужно иметь свой).
Во второй день работы в системе было зарегистрировано 26 пользователей, больше заниматься презентацией не было сил и я написал инструкцию)) Это ещё одна палочка-выручалочка в подобных делах.
Спустя месяц…Все это время меня беспокоило отсутствие сертификата, в воздухе витало правило о том, что корпоративные сервисы должны иметь максимально доступный уровень защиты\шифрования. Самый доступный выбор — LetsEncrypt. Начиналось все в тестовой среде, т.к. выбор между Nginx и Apache не был сделан. На старте у меня Centos и Rocket.Chat на 80-ом порту по официальной инструкции.Последующие цели самые обычные — сделать доступ по https.
Преимущества использования SSL
- Приложения на мобильных устройствах стали работать лучше. В более легкой версии приложения(RocketChat+) исчезла постоянная авторизация после очередного выхода из сна. Присутствие этой авторизации напоминало использование мобильное интернета, когда между подключением к сети и первым доступом может пройти 10-20 сек.. А на IOS это приложение по http вообще отказывалось запускаться. Появились аватары и возможность передачи смайлов.
- Не так тревожно по сравнению с http.
Пример работы Rocket.Chat
А дальше я хочу обновиться, за месяц у разработчиков появилась новая stable версия. На практике это выглядит так:
1.Goto the installation folder in this case: cd /opt/
2.Remove or move the Rocket.Chat folder.
Успешный запуск:
Так выглядит мой рабочий чат.