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=$:/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=$ –config $ $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!