Rocket Chat:Contrib

From SME Server
Jump to navigation Jump to search

Contrib: John Crisp

Important.png Note:
Please note that there is also a howto on manually installing Rocket.Chat here


smeserver-rocketchat contrib

  Work in Progress:
This page is a Work in Progress. The contents off this page may be in flux, please have a look at this page history the to see list of changes.


This contrib aims to reduce some of the setup for rocketchat and add some flexibility with settings

Add repos:

RocketChat 0.40+

From Rocketchat 0.40 onwards you require a higher version of node than the one in the SCL repos.

Rocket.Chat v 48.1 requires: node: v4.6.2 npm: v3.10.9

Rocket.Chat v 49.0 requires: node: v4.7.2

This can be installed from the node repo

Setup

Add the following repos:

/sbin/e-smith/db yum_repositories set epel repository \
Name 'Epel - EL6' \
BaseURL 'http://download.fedoraproject.org/pub/epel/6/$basearch' \
MirrorList 'http://mirrors.fedoraproject.org/mirrorlist?repo=epel-6&arch=$basearch' \
EnableGroups no \
GPGCheck yes \
GPGKey http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL \
Exclude perl-Razor-Agent \
Visible no \
status disabled
/sbin/e-smith/db yum_repositories set reetp repository \
BaseURL http://www.reetspetit.com/smeserver/\$releasever \
EnableGroups no \
GPGCheck no \
Name "ReetP Repo" \
GPGKey http://www.reetspetit.com/RPM-GPG-KEY \
Visible yes status disabled
/sbin/e-smith/db yum_repositories set centos-sclo-rh \
repository Name 'Centos-RH Software collections' \
BaseURL 'http://mirror.centos.org/centos/$releasever/sclo/$basearch/rh/' \
EnableGroups no Visible yes status disabled
/sbin/e-smith/db yum_repositories set nodejs \
repository Name 'Node JS 4' \
BaseURL https://rpm.nodesource.com/pub_4.x/el/6/x86_64 \
EnableGroups no GPGCheck no Visible yes status disabled
signal-event yum-modify
yum --enablerepo=nodejs install nodejs nodejs-devel

Setup node versions:

Install latest version:

npm install -g npm

Install specific version:

npm install -g npm@3.10.9

Install n version manager:

npm install -g n

Install node version n 4.7.2

[root@test ~]# node -v
v4.7.2
[root@test ~]# npm --version
3.10.9
yum --enablerepo=centos-sclo-rh,epel install scl-utils rh-python34-python rh-mongodb26-mongodb rh-mongodb26-mongodb-server \
GraphicsMagick 

You should be able to install the smeserver-rocketchat RPM now

yum --enablerepo=reetp install smeserver-rocketchat

Don't post-upgrade yet.

config set rocketchat service TCPPort 3000 mailPort 25 mailURL localhost access public status enabled
config set rh-mongodb26-mongod service TCPPort 27017 mongoURL localhost access private status enabled
signal-event post-upgrade;signal-event reboot

Now we should be able to install rocketchat itself

yum --enablerepo=reetp install rocketchat

Check the progress:

tailf /var/log/rocketchat.log
System ➔ startup
+----------------------------------------------------+
|                  SERVER RUNNING                    |
+----------------------------------------------------+
|                                                    |
|       Version: 0.xx.x                              |
|  Process Port: 3000                                |
|      Site URL: http://rocketchat.local.net:3000    |
|         OpLog: Disabled                            |
|                                                    |
+----------------------------------------------------+

You should now be able to connect to your Rocket.Chat instance

http://rocketchat.local.net:3000

Registering a new account

Because the SME mail server is fussy you may find it easier to force some settings in the Rocket.Chat DB before trying to register:

You can set your SMTP host as localhost or mail.yourdomain.com

mongo
use rocketchat
db.rocketchat_settings.update({"_id" : "SMTP_Host"}, {$set: {"value":"mail.yourdomain.com"}})
db.rocketchat_settings.update({"_id" : "From_Email"}, {$set: {"value":"admin@yourdomain.com"}})
exit

Restart Rocket.Chat to be sure:

service rocketchat restart

You should now be able to register a new account and get a confirmation email. Check /var/log/qpsmtpd/current for any errors.

If you have not set the From address you are likely to get:

Mail with no From header not accepted here

Errors

If you have issues make sure you stop the rocket chat service

service rocketchat stop

Check /var/log/rocketchat.log

Try running main.js

/opt/Rocket.Chat
node main.js

SSL with Proxypass

  Note:
This is still experimental and there may be issues with SSL only for the Primary iBay and Letsencrypt. You will need a minimum version of smeserver-rocketchat-0.1-5


It is recommended to add Letsencrypt support as detailed below (see here for my contrib https://wiki.contribs.org/Letsencrypt)

We need some extra settings to enable SSL with ProxyPass.

Add the FWS repo:

db yum_repositories set fws repository \
BaseURL http://repo.firewall-services.com/centos/\$releasever \
EnableGroups no GPGCheck yes \
Name "Firewall Services" \
GPGKey http://repo.firewall-services.com/RPM-GPG-KEY \
Visible yes status disabled

Update the repos:

signal-event yum-modify

Install proxy pass rpm:

yum --enablerepo=fws install mod_proxy_wstunnel

Regenerate httpd.conf

signal-event remoteaccess-update

Now we need to setup our subdomain

db domains set chat.mycompany.local domain Description RocketChat Nameservers internet \
TemplatePath ProxyPassVirtualRocketchat ProxyPassTarget http://localhost:3000/

It should look like this:

chat.mycompany.local=domain
  Nameservers=internet (can be localhost)
  ProxyPassTarget=http://127.0.0.1:3000/
  TemplatePath=ProxyPassVirtualRocketchat
  letsencryptSSLcert=enabled (with letsencrypt support)

We need to set Rocket.Chat to listen on localhost now:

config setprop rocketchat rootURL chat.mycompany.domain SSLProxy yes
signal-event remoteaccess-update
service rocketchat restart

If you can now successfully get to Rocketchat on your subdomain https://chat.mycompany.local you can disable default access on port 3000:

config setprop rocketchat access private
signal-event remoteaccess-update

You may find you need to clear your browser cache before it works correctly on https://chat.mycompany.local rather than http://chat.mycompany.local:3000

IF you have Letsencrypt support you can now set your main domain to SSL only:

db accounts setprop Primary SSL enabled
signal-event ibay-modify Primary

Bugs

Look for bugs :-) As the contrib is not in CVS please report them in the forum and I will try and keep an eye out.

Manual config of templates

expand-template /etc/rc.d/init.d/rocketchat
expand-template /etc/profile.d/scls-rh-mongodb26.sh
expand-template /etc/profile.d/scls-rh-python34.sh
expand-template /etc/profile.d/scls-rh-java-common.sh
expand-template /etc/opt/rh/rh-mongodb26/mongod.conf
/etc/rc.d/init.d/rocketchat start
/etc/rc.d/init.d/rh-mongodb26-mongos start

Mongod fails to start after reboot

Sometimes it appears that mongo fails to start after a reboot.

I believe that this may be caused due to rocketchat being run by the forever service which means that rocketchat tries to keep running as the server shuts down despite mongod being stopped. This leaves lock files and prevents mongod from restarting properly. I think I probably need to look at the shutdown/start order of scripts.

A simple cure is as follows:

/etc/rc.d/init.d/rh-mongodb26-mongod stop

Remove the following files if they exist:

rm /var/opt/rh/rh-mongodb26/lib/mongodb/mongod.lock
rm /var/opt/rh/rh-mongodb26/run/mongodb/mongod.pid

Restart the mongod service:

/etc/rc.d/init.d/rh-mongodb26-mongod start

Restart the rocketchat service:

service rocketchat restart

I haven't tested yet but the answer may be simpler:

service rocketchat stop
/etc/rc.d/init.d/rh-mongodb26-mongod start
service rocketchat stop

When I get a chance I will test this and advise accordingly.

Mongo DB examples

Usage

Example using mongo itself:

mongo
use rocketchat
db.rocketchat_settings.find({"_id" : "SMTP_Host"})
db.rocketchat_settings.find({"_id" : "From_Email"})
db.rocketchat_settings.findOne({_id : "From_Email"}, {_id:0, value: 1})
db.rocketchat_settings.findOne({_id : "SMTP_Host"}, {_id:0, value: 1})


db.rocketchat_settings.update({"_id" : "From_Email"}, {$set: {"value":"admin@yourdomain.com"}})
db.rocketchat_settings.update({"_id" : "SMTP_Host"}, {$set: {"value":"mail.yourdomain.com"}})

Database Backup

You can dump the tables to a directory of your choice:

mongodump --dumpDbUsersAndRoles -d rocketchat -o /root/rocketchatmongo

Database Restore

You can restore you database as follows:

mongorestore --restoreDbUsersAndRoles -d rocketchat -dir  /root/rocketchatmongo/rocketchat --quiet

Node usage

Use n, an extremely simple Node version manager that can be installed via npm (See http://stackoverflow.com/questions/7718313/how-to-change-to-an-older-version-of-node-js)

Say you want Node.js v0.10.x to build Atom.

npm install -g n   # Install n globally
n 0.10.33          # Install and use v0.10.33 local only

Usage:

n                            # Output versions installed
n latest                     # Install or activate the latest node release
n stable                     # Install or activate the latest stable node release
n <version>                  # Install node <version>
n use <version> [args ...]   # Execute node <version> with [args ...]
n bin <version>              # Output bin path for <version>
n rm <version ...>           # Remove the given version(s)
n --latest                   # Output the latest node version available
n --stable                   # Output the latest stable node version available
n ls                         # Output the versions of node available


NPM Usage

To update your version of npm run the following

npm install -g npm

Or for a specific version:

npm install -g npm@3.10.9

DB settings

Typical standard setup:

rocketchat=service
   TCPPort=3000
   access=public
   mailPort=25
   mailURL=localhost
   status=enabled

Typical proxy subdomain setup:

rocketchat=service
   SSLProxy=yes
   TCPPort=3000
   access=private
   mailPort=25
   mailURL=localhost
   rootURL=chat.mydomain.co.uk
   status=enabled
rh-mongodb26-mongod=service
   TCPPort=27017
   access=private
   mongoURL=localhost
   status=enabled