Тестирование GIT-версии Rocket.Chat (Обновление Rocket.Chat)

by Anton Chernousov aka GITA-DEV


Опубликовано: 04 Май 2018 (последние правки 1 месяц, 2 недели)


Тестирование GIT-версии Rocket.Chat (Обновление Rocket.Chat)

Я активно использую в своей работе Rocket.Chat и честно говоря меня все устраивает, но недавно мне преподнесли небольшой сюрприз объявив мобильную версию для Android устаревшей фактически принудительно ее обновив, точнее они навязчиво рекомендовали обновиться при каждом запуске приложения и однажды я все же случайно нажал на обновление и в общем зря я это сделал ...

После того как мне обновили Android-версию мобильного клиента Rocket.Chat до 2.1.0 он перестал работать и постоянно пытается подключиться, но естественно у него ничего не получается и я таким образом лишился удобного инструмента.

Rocket.Chat не может подключится к серверу

Что интересно, я использую стабильную версию с их официального сайта и как оказалось не такая уж она и стабильная. Теперь в принципе осталось два варианта, первый это собрать из исходных кодов старую версию для Android, отвязать ее от маркета и пользоваться дальше, а второй, это попробовать обновиться до последней версии сервера из репозитория. Если обновление не поможет, то будем переходить к первой версии плана и начнем переписку с разработчиками.

В логах при сбое подключения мобильного клиента мы видим запись:

Rocket.Chat[6118]: Can't mix remove and get fields

Для чистоты эксперимента проведем сборку GIT-версии Rocket.Chat и заодно посмотрим как собирать эти Meteor.js приложения. Особенностью сборки этих приложений является то, что сборка будет проходить от имени непривилегированного пользователя, например от имени пользователя rocket_chat от имени которого у меня сервис и работает. Тестирование я буду проводить на копии контейнера и если, что сломать Rocket.Chat мне не жалко и я смогу быстро восстановить контейнер web-приложения целиком.

Начнем с подготовки окружения для сборки Rocket.Chat:

# mkdir /opt/Developmet
# mkdir /opt/Developmet/source
# mkdir /opt/Developmet/build
# git clone https://github.com/RocketChat/Rocket.Chat.git /opt/Developmet/source
# chown -R rocket_chat:rocket_chat /opt/Developmet

В корне пакета исходных кодов имеется файл example-build-run.sh, который мы и будем использовать для сборки, но в этом файле необходимо закомментировать запуск сервиса после сборки и изменить путь к каталогу куда поместить собранный проект:

# Requires Node.js version 4.x
# Do not run as root

DEPLOY_DIR=/opt/Developmet/build
...
#cd $DEPLOY_DIR/bundle
#NODE_ENV=production \
#PORT=3000 \
#ROOT_URL=http://localhost:3000 \
#MONGO_URL=mongodb://localhost:27017/rocketchat \
#MONGO_OPLOG_URL=mongodb://localhost:27017/local \
#node main.js

Если посмотреть скрипт сборки, то вы увидите что для сборки используется утилита meteor которой в штатной поставке дистрибутива Ubuntu нет и вам потребуется ее установить при помощи команды:

# curl https://install.meteor.com/ | sh

После того как мы установили Meteor.js, нам необходимо остановить запущенную службу Rocket.Chat, перелогиниться в требуемого пользователя и задать переменные окружения необходимые для запуска нашего приложения:

# systemctl stop rocketchat
# su rocket_chat
$ export NODE_ENV=production 
$ export PORT=3000 
$ export ROOT_URL=https://chat.gita-dev.ru 
$ export MONGO_URL=mongodb://localhost:27017/gita-rocket
$ export MONGO_OPLOG_URL=mongodb://localhost:27017/local?replicaSet=001-rs

Для сборки нам потребуется запустить модифицированный скрипт сборки и все дальнейшие операции будут выполнены полностью автоматически:

$ ./example-build-run.sh

У меня при сборке приложения вышла ошибка:

While minifying app stylesheet:               
packages/modules-runtime.js:231:12: Cannot find module 'postcss-import'

В принципе это оказалось не существенным и приложение в любом случае было собрано успешно, хотя конечно разумнее добавить недостающий пакет в файл конфигурации package.json при помощи команды:

$ npm install postcss-import --save

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

$ node ./main.js

Как вы наверное обратили внимание, в сборочном скрипте имеется комментарий:

# Requires Node.js version 4.x

Но это не правда и как вы можете видеть в собранном приложении имеется файл node_version.txt в котором указывается требуемая для работы версия 8.11.1 и установить ее можно при помощи команды:

# n 8.11.1

Если при старте приложения вы получили ошибку:

module.js:549
    throw err;
    ^
Error: Cannot find module 'fibers'

То это означает, что вы забыли выполнить установку зависимых модулей при помощи команды:

$ cd ./programs/server/
$ npm install

При первом запуске сервера Rocket.Chat будет произведено обновление базы данных и пути назад у вас уже не будет:

connect deprecated limit: Restrict request size at location of read npm/node_modules/connect/lib/middleware/multipart.js:86:15
{"line":"160","file":"rocketchat_migrations.js","message":"Migrations: Migrating from version 109 -> 115","time":{"$date":1525405594835},"level":"info"}
{"line":"160","file":"rocketchat_migrations.js","message":"Migrations: Running up() on version 110","time":{"$date":1525405594836},"level":"info"}
{"line":"160","file":"rocketchat_migrations.js","message":"Migrations: Running up() on version 111","time":{"$date":1525405594841},"level":"info"}
{"line":"160","file":"rocketchat_migrations.js","message":"Migrations: Running up() on version 112","time":{"$date":1525405594849},"level":"info"}

Именно поэтому я и настаиваю на резервном копировании перед любыми обновлениями, перед обновлением у меня была версия приложения Rocket.Chat 0.63.2:

Перед обновлением Rocket.Chat

После обновления версия Rocket.Chat стала :

Версия после обновления

Но это все равно не помогло мобильной версии клиента и ошибка все еще появляется в логах сервера:

Can't mix remove and get fields

Как вы видите версия сервера 0.64 и ветка по умолчанию в GIT-репозиторий Develop, а не Master, следовательно мы можем попробовать версию еще свежее и для этого переключаем гит-репозиторий на удаленную ветку Master при помощи команды:

$ git reset --hard origin/master

Собирая Master-ветку вы получите версию 0.64.1:

Сборка мастер-ветки Rocket.Chat

С процессом сборки Rocket.Chat мы разобрались, опыт полезный хоть и не помог, и в следующей статье переходим к первой части плана, а именно будем собирать legacy-версию отвязанную от маркета и вести переговоры с разработчиками, у меня на эту систему большие планы.


Обратите внимание на статьи:


Настройка отправки оповещений Zabbix в чат Rocket.Chat

Настройка отправки оповещений Zabbix в чат Rocket.Chat

В своей статье, - использование Rocket.Chat для создания чата оперативных оповещений, я не описал как именно можно при помощи моей утилиты для работы с Rocket.Chat, отправить Zabbix-оповещение. Я так понимаю, что тема заинтересовала несколько человек и придется немного заострить на этом внимание.


Использование Rocket.Chat для создания чата оперативных оповещений

Использование Rocket.Chat для создания чата оперативных оповещений

В предыдущей статье, под названием использование Rocket.Chat для создания чата оперативных оповещений я рассматривал простейший пример того как можно отправить сообщение в приватный чат Rocket.Chat. На самом деле в своих проектах я использую несколько модифицированную версию этого решения, более адаптированную к продакшн-решениям. Сегодня я как раз и хотел бы поговорить о том как я модифицировал рассмотренное ранее API для реализации так называемого оперативного чата.


Настройка Nginx-Front для работы с Rocket.Chat

Настройка Nginx-Front для работы с Rocket.Chat

В прошлой статье я рассказывал, что у меня после очередного обновления сломался клиент Rocket.Chat для Android и я думал, что это связано с устаревшей версией серверной части, но как оказалось на самом деле это было связано с некорректной конфигурацией Nginx.


Отправка оповещений Django-приложения в приватный чат Rocket.Chat

Отправка оповещений Django-приложения в приватный чат Rocket.Chat

Вчера я подумал, что если я все же вернулся к использованию Rocket.Chat и он меня уже не так бесит как предыдущие версии, то можно настроить систему оповещений о событиях на сайте и сбоях в работе Django-приложения в приватный чат Rocket.Chat. Для Python быстро нашелся вполне работоспособный модуль который идеально подошел для отправки сообщений в приватные чаты.


RocketChat - Установка и настройка из репозитария (не docker)

RocketChat - Установка и настройка из репозитария (не docker)

Рано или поздно вам все равно придет в голову мысль о внутреннем корпоративном мессенджере полностью вам подконтрольном и настраиваемом. Я перепробовал много различных мессенджеров и в конце концов пришел к мнению, что Rocket.Chat подходит на эту роль лучше других. В типовом решении описанном на сайте Rocket.Chat вам просто предложат использовать подготовленный Docker-контейнер, но я честно говоря недолюбливаю докеры и мне ближе полностью подконтрольные мне контейнеры LXD.


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .

Блог это некоммерческий проект! Если вам понравился мой блог и то что я пишу помогло вам на практике, то можете сказать спасибо материально.