При рассмотрении разных мессенджеров возникает большое кол-во притензий к функционалу того или иного, были рассмотрены и отклонены:
- skype, telegram и т.п. — не рассматривались, по причине необходимости держать свой сервер
- slack — бесплатный аккаунт имеет ограничение 10 000 сообщений
- jabber — очень грустные клиенты, невозможно синхронизировать сообщения между клиентами
- mattermost — деревянный, внешний вид приложения отстает лет на 10 — скорость работы приложения оставляет желать лучшего, отсутствие некоторых небольших но очень удобных функций (отображение редактирований сообщения, возможность запрет пользователям использовать nickname и т.п. …)
- rocket.chat — на него и пал наш выбор, рассмотрим процедуру его развертывания
Установка rocket.chat
Rocket.Chat является приложение с открытым исходным кодом, который может быть развернут на вашем собственном сервере. С Rocket.Chat вы можете общаться с членами вашей команды и друзьями через аудио и видео, общаться с посетителями сайта в режиме реального времени, обмениваться файлами, передавать текстовые и голосовые сообщения, и делать многое другое.
Требования:
- CentOS 7
- 1G ram. IP к примеру 192.168.100.100
- Домен example.com (не обязательно)
Обновяем систему и подключаем epel репу:
1 2 3 |
yum install epel-release -y yum update -y shutdown -r now |
Установка MongoDB
подключим репу:
1 |
nano /etc/yum.repos.d/mongodb-org-3.2.repo |
1 2 3 4 5 6 |
[mongodb-org-3.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc |
1 |
yum install mongodb-org mongodb-org-server -y |
Установка Node.js, GraphicsMagick, npm and других зависимостей:
1 2 3 |
yum install nodejs curl GraphicsMagick npm -y npm install -g inherits n n 0.10.40 |
Установка Graphics Magick в CentOS 7
скачаем Graphics Magick
1 2 3 4 5 6 |
cd / mkdir /download cd /download wget ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/GraphicsMagick-LATEST.tar.gz tar -xzvf GraphicsMagick-LATEST.tar.gz cd GraphicsMagick-1.3.21 (или иной каталог lastest graphics magick) |
установим зависимости
1 |
yum install libpng libjpeg libpng-devel libjpeg-devel ghostscript libtiff libtiff-devel freetype freetype-devel jasper jasper-devel gcc |
И еще намножко зависимостей:
1 2 3 4 5 6 |
#rpm base yum groupinstall 'Development Tools' yum group info 'Development Tools' #debian base apt-get install build-essential |
Сборка и установка GM с OpenMP (использовался данный вариант при установке rocket.chat)
1 2 3 |
./configure make install gm version |
Сборка и установка GM без OpenMP
1 2 3 |
./configure --disable-openmp make install gm version |
Установка GM без OpenMP и в каталог /usr/bin
1 2 3 |
./configure --disable-openmp --bindir=/usr/bin --sbindir=/usr/sbin make install gm version |
Также нам понадобиться fibers
1 |
npm install fibers |
nodejs необходим 4.x.x версии, на 7.5 не захотел работать, ошибка вида:
4 версию собираем из исходников
Для этого нужно загрузить исходники с сайта проекта. На странице загрузки
1 2 |
https://nodejs.org/download/release/ wget https://nodejs.org/download/release/v4.0.0/ |
Распакуем и собирем
1 2 3 4 |
tar xzvf node-v* && cd node-v* ./configure make sudo make install |
Проверяем, что нужная версия находится в определенном месте:
1 2 |
/usr/local/bin/node -v v4.0.0 |
Установим Rocket.Chat
1 2 3 4 5 6 |
cd /opt curl -L https://rocket.chat/releases/latest/download -o rocket.chat.tgz tar -zxvf rocket.chat.tgz mv bundle Rocket.Chat cd Rocket.Chat/programs/server npm install |
Создадим rocketchat.service
1 |
nano /usr/lib/systemd/system/rocketchat.service |
1 2 3 4 5 6 7 8 9 10 11 12 |
[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://example.com:3000/ PORT=3000 [Install] WantedBy=multi-user.target |
!!! стоит обратить внимание !!!
- в переменной ExecStart указываем путь к бинарнику node нужной версии (4.х.х)
- в переменной ROOT_URL указываем домен или IP
Запустим MongoDB
1 2 |
systemctl start mongod.service systemctl enable mongod.service |
Запускаем Rocket.chat
1 2 |
systemctl start rocketchat.service systemctl enable rocketchat.service |
Добавить в firewall исключения для 3000 порта:
- если используется firewall-cmd
1 2 |
firewall-cmd --zone=public --permanent --add-port=3000/tcp firewall-cmd --reload |
- если используется iptables
1 |
iptables -I INPUT -p tcp --dport 3000 -j ACCEPT |
Успешно запушенный rocker.chat в /var/log/messages
Также слушает node 3000 порт
1 2 |
netstat -ntupl | grep 3000 tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 618/node |
Откроем наш rocket.chat
1 |
http://example.com:3000 |
Далее можно установить nginx и красиво убрать :3000 из URL
Для начало необходимо установим сам nginx — клац
и изменяем конфиг дефолтный виртхоста
1 |
nano /etc/nginx/conf.d/default.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# Upstreams upstream backend { server 127.0.0.1:3000; } server { listen 80; server_name somedomain.chat; #charset koi8-r; access_log /var/log/nginx/rocketchat.access.log main; error_log /var/log/nginx/rocketchat.access.log; location / { proxy_pass http://somedomain.chat: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; } } |
История сообщений:
Подключаемся к mongo
1 |
mongo |
1 2 3 4 5 6 7 8 9 10 11 |
mongo <==== START MONGO CLI MongoDB shell version: 3.2.12 connecting to: test Server has startup warnings: 2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten] 2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. 2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten] 2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. 2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten] |
Смотри какие есть базы и выбираем нашу:
1 2 3 4 5 6 7 8 |
#show dbs local 0.000GB rocketchat 0.056GB #use rocketchat switched to db rocketchat |
Далее выбираем из базы все чаты и ищем необходимый ID комнаты (приватной переписки или групповой чат).
1 |
db.rocketchat_room.find({}) |
Используем нужный ID чтобы получить историю сообщений:
1 |
db.rocketchat_message.find({"rid": "your_chatroom_id"}, {"u.username": 1, "msg": 1, "_id": 0}).sort({ts: 1}).map(function (d) {return d.u.username + ": " + d.msg}) |