Rocket.Chat: How To Install The Messaging System on Debian 9

 

What’s Rocket.Chat

Rocket.Chat is a professional, Slack-like messaging system, developed for companies wanting to privately host their own chat service. It is developed in JavaScript using the Meteor full stack framework.

It has many features, like:

    • Help desk chat
    • Video conferences
    • File sharing
    • Link previews
    • Voice messages

We will install Rocket.Chat on a Debian 9 server.

Getting Started

The first thing to do is to satisfy Rocket.Chat dependencies. Execute the following apt command:

# apt install build-essential graphicsmagick

Install MongoDB

Rocket.Chat works with MongoDB as database system. There aren’t already Debian 9 packages for MongoDB, so we will install it from the tarball.

Download the tarball

First, download with curl the MongoDB tarball

$ curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-debian81-3.4.9.tgz
Extract the archive

Extract the previously downloaded archive by executing the following command:

$ tar -zxvf mongodb-linux*.tgz

Rename and move the directory, for example, in /opt:

# mv mongodb-linux-x86_64-debian81-3.4.9/ /opt/mongodb

Update the PATH variable by adding the /opt/mongodb/bin directory. In ~/.bashrc add the following line:

$ export PATH=${PATH}:/opt/mongodb/bin
Create a unit file

Create a systemctl unit file for MongoDB, executing the following command:

# $EDITOR /lib/systemd/system/mongodb.service

In this file, paste the following content:

[Unit]
Description=A document-oriented database

[Service]
User=mongodb
Group=mongodb
RuntimeDirectory=mongodb
RuntimeDirectoryMode=0755
EnvironmentFile=-/etc/default/mongodb
Environment=CONF=/etc/mongodb.conf
Environment=SOCKETPATH=/run/mongodb
ExecStart=/opt/mongodb/bin/mongod --unixSocketPrefix=${SOCKETPATH} --config ${CONF} $DAEMON_OPTS

[Install]
WantedBy=multi-user.target

Save and exit.

Reload systemd daemon service:

# systemctl daemon-reload
Start MongoDB

At this point, we can start MongoDB and enable it for starting at boot time:

# systemctl start mongodb
# systemctl enable mongodb

Install Node.js and npm

Rocket.Chat requires Node.js (in particular, any version newer than 4.5) and npm. First of all, add the NodeSource repository:

# curl -sL https://deb.nodesource.com/setup_8.x | bash -

Next, execute the following command for installing both Node.js and npm:

# apt-get install nodejs

Check the Node.js version:

# node --version
v8.7.0

Next, install n through npm:

# npm install -g n

With n, it’s possible to change Node.js version.

Install Rocket.Chat

If not exists, create the /var/www directory, which will store Rocket.Chat:

# mkdir -p /var/www
# cd /var/www

In that directory, execute the following command for downloading Rocket.Chat:

# wget https://s3.amazonaws.com/download.rocket.chat/build/rocket.chat-0.58.4.tgz -O rocket.chat.tgz

Extract the archive and rename the extracted folder:

# tar xzf rocket.chat.tgz
# mv bundle Rocket.Chat

Next, set environment variables and run the Rocket.Chat server:

# cd Rocket.Chat/programs/server
# npm install
# cd ../..

# export ROOT_URL=http://example.com:3000/
# export MONGO_URL=mongodb://localhost:27017/rocketchat
# export PORT=3000

Those who are using the replica set should set the MONGO_URL variable with this content: mongodb://localhost:27017/rocketchat?replicaSet=001-rs

Rocket.Chat is installed and configured, but it requires configuration behind a web server. In this tutorial we’ll be using NGINX.

Install NGINX

NGINX can be install with apt:

# apt install nginx

Create a new directory that will contain the SSL certificates:

# mkdir -p /etc/nginx/ssl/

In this directory, generate a new key:

# openssl req -new -x509 -days 365 -nodes -out /etc/nginx/ssl/rocketchat.crt -keyout /etc/nginx/ssl/rocketchat.key

Change permissions to the key file:

# chmod 400 rocketchat.key

Create a Virtual Host file:

# $EDITOR /etc/nginx/sites-available/rocketchat

In this file, paste the following content:

# Upstreams
upstream backend {
    server 127.0.0.1:3000;
}
 
# Redirect Options
server {
  listen 80;
  server_name chat.mydomain.com;
  # enforce https
  return 301 https://$server_name$request_uri;
}
 
# HTTPS Server
server {
    listen 443;
    server_name chat.mydomain.com;
 
    error_log /var/log/nginx/rocketchat.access.log;
 
    ssl on;
    ssl_certificate /etc/nginx/ssl/rocketchat.crt;
    ssl_certificate_key /etc/nginx/ssl/rocketchat.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # dont use SSLv3 ref: POODLE
 
    location / {
        proxy_pass http://192.168.1.110: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;
    }
}

Save and close the file. Activate the configuration with:

# ln -s /etc/nginx/sites-available/rocketchat /etc/nginx/sites-enabled/rocketchat

Test NGINX:

# nginx -t

If no errors occur, restart the web server:

# systemctl restart nginx

Next, update the environment variables:

# cd /var/www/Rocket.Chat/ 
# export ROOT_URL=https://chat.example.com 
# export MONGO_URL=mongodb://localhost:27017/rocketchat?replicaSet=001-rs 
# export PORT=3000

Run Rocket.Chat:

# node main.js

The final step is to insert the following URL into a web browser: https://chat.example.com to register a new admin account and finish the graphical configuration.

Conclusion

There you have it! We’ve just explained how to install and configure your Rocket.Chat Server on a Debian 9 server using NGINX. This useful online communication program can help your team work more efficiently and with more collaboration!

The post Rocket.Chat: How To Install The Messaging System on Debian 9 appeared first on Unixmen.