Εγκατάσταση Rocket.Chat σε Debian 8

To Rocket.Chat είναι ένας αξιόλογος, ανοικτού κώδικα, κλώνος του Slack.
Ήδη έχει εφαρμογές για κινητά τόσο android όσο και ios αλλά και για όλα τα desktop.

Με το Rocket.Chat είναι εφικτό να φτιάξετε ένα δικό σας, ασφαλές chat. Εμείς στον οδηγό αυτό θα σας δείξουμε όλα τα απαραίτητα βήματα για να εγκαταστήσετε το Rocket.Chat σε ένα cloud server με λειτουργικό Debian 8

Ενημέρωση Συστήματος

Αρχικά κάνουμε ένα update το σύστημά μας.

apt-get update && apt-get upgrade  

system_update

Εγκατάσταση Απαραίτητων

Προχωράμε με την εγκατάσταση απαραίτητων για την σωστή λειτουργία του Rocket.Chat

apt-get install curl graphicsmagick build-essential  
Εγκατάσταση MongoDB

Επόμενο βήμα η εγκατάσταση της mongodb, την οποία χρησιμοποιεί το Rocket.Chat.

Αρχικά περνάμε το αποθετήριο της mongodb

echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/3.2 main" | tee /etc/apt/sources.list.d/mongodb-org-3.2.list  

και το κλειδί του αποθετηρίου

apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927  

τέλος, κάνουμε την εγκατάσταση της mongodb

apt-get update  
apt-get install -y mongodb-org  

mongodb_install

MongoDB Ρύθμιση Replica

Προκειμένου να έχουμε καλύτερες ταχύτητες στο Rocket.Chat, προτείνεται να ενεργοποιήσουμε το replication mode

Ανοίγουμε το αρχείο ρυθμίσεων της mongodb

nano /etc/mongod.conf  

Βάζουμε ένα # στην ρύθμιση bindIp

# network interfaces
net:  
  port: 27017
#  bindIp: 127.0.0.1

Εντοπίζουμε το #replication και στην επόμενη γραμμή προσθέτουμε τα παρακάτω

replication:  
   oplogSizeMB: 1                                                           
   replSetName: rs0

Κάνουμε μία επανεκκίνηση την mongodb προκειμένου να λάβει τις νέες ρυθμίσεις

systemctl restart mongod  

mongo_replication

Προχωράμε με το initiate του replication

export LC_ALL=C  
mongo  
rs.initiate()  

Επιβεβαιώνετε, όπως στο παρακάτω παράδειγμα ότι η τιμή ok είναι 1, αλλιώς κάτι έχει πάει στραβά.

MongoDB shell version: 3.2.10  
connecting to: test  
> rs.initiate()
{
    "info2" : "no configuration specified. Using a default configuration for the set",
    "me" : "lab:27017",
    "ok" : 1
}

mongo_init

Εγκατάσταση npm και nodejs

Ήρθε η ώρα να εγκαταστήσουμε την nodejs καθώς και τον npm.

apt-get install nodejs npm  

Ενεργοποιούμε τον npm σε όλο το σύστημα

npm install -g n  

Ενεργοποιούμε συγκεκριμένα την έκδοση 4.5

n 4.5  

Τέλος επιβεβαιώνουμε ότι η έκδοση είναι η σωστή

node --version  
v4.5.0  
npm -v  
1.4.21  
Εγκατάσταση Rocket Chat

Φτάσαμε στο σημείο εγκατάστασης του Rocket.Chat, πρώτα το κατεβάζουμε και το αποσυμπιέζουμε σε έναν προσωρινό φάκελο (π.χ. /tmp)

curl -L https://rocket.chat/releases/latest/download -o rocket.chat.tgz  
tar -xzvf rocket.chat.tgz  

Στη συνέχεια μετονομάζουμε το bundle σε Rocket.Chat και το μετακινούμε στον φάκελο, από τον οποίο θέλουμε να τρέχει. Στο συγκεκριμένο παράδειγμα έχουμε επιλέξει το /srv/

mv bundle Rocket.Chat  
mv Rocket.Chat /srv/  

Αρχίζουμε την εγκατάσταση των απαραίτητων βιβλιοθηκών μέσω του npm

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

rocket_install

Εκτελούμε το Rocket.Chat από τον φάκελο /srv/Rocket.Chat αφού πρώτα κάνουμε export ρυθμίσεις που χρειάζονται. Συγκεκριμένα πρέπει να αλλάξουμε το 10.0.2.20 με την ip του συστήματος και το mychat.gr με το επίσημο hostname.

cd /srv/Rocket.Chat  
export ROOT_URL=http://10.0.2.20:3000/  
export MONGO_URL=mongodb://mychat.gr:27017/rocketchat?replicaSet=rs0  
export PORT=3000  
node main.js  

Μετά τις παραπάνω εντολές το Rocket.Chat ξεκινάει δείχνοντας εικόνα παρόμοια με την παρακάτω

rocket_started

Τώρα μπορούμε να μεταβούμε στον browser μας ανοίγοντας την διεύθυνση όπως στο παρακάτω παράδειγμα (μην ξεχάσετε να αλλάξετε το 10.0.2.20 με την ip του δικού σας μηχανήματος)

http://10.0.2.20:3000/  

Αν όλα έχουν πάει καλά θα δείτε την παρακάτω εικόνα.

rocket_web

Αφήνουμε την κονσόλα μας ανοικτή να τρέχει το Rocket.Chat και προχωράμε ανοίγοντας ένα νέο, δεύτερο τερματικό.

Εγκατάσταση Nginx

Στο συγκεκριμένο παράδειγμα χρησιμοποιούμε τον nginx ως reverse proxy προκειμένου να σερβίρει σωστά το Rocket.Chat. Μπορούμε να τον ρυθμίσουμε τόσο σε http (μη ασφαλές) όσο και σε https (ασφαλές).

Εμείς δεν κάναμε χρήση κάποιου πιστοποιητικού και έτσι ρυθμίζουμε τον nginx σε http.

Αρχικά εγκαθιστούμε τον nginx

apt-get install nginx  

Δημιουργούμε ένα κενό αρχείο virtual host με την ονομασία rocket-chat

nano /etc/nginx/sites-available/rocket-chat  

Στο αρχείο αυτό βάζουμε τις ρυθμίσεις, αλλάζοντας το mychat.gr με το hostname του μηχανήματός σας. Επίσης αλλάζουμε στο proxy_pass την ip από 10.0.2.20 με αυτή που έχει το μηχάνημά μας.

# Upstreams
upstream backend {  
    server 127.0.0.1:3000;
}

# Rocket Chat
server {  
    listen 80;
    server_name mychat.gr;

    error_log /var/log/nginx/rocketchat.access.log;

    location / {
        proxy_pass http://10.0.2.20: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;
    }
}

Ενεργοποιούμε τον virtual host δημιουργώντας ένα symbolic link

ln -s /etc/nginx/sites-available/rocket-chat /etc/nginx/sites-enabled/rocket-chat  

Εκτελούμε έλεγχο ρυθμίσεων στον nginx ώστε να δούμε ότι δεν υπάρχει κάποιο πρόβλημα

nginx -t  

Εφ' όσον όλα δείχνουν σωστά, προχωράμε με επανεκκίνηση του nginx

systemctl restart nginx  
Τελικός Έλεγχος

Επισκεπτόμαστε την διεύθυνση http://mychat.gr και επιβεβαιώνουμε ότι εμφανίζεται το Rocket.Chat.

Προχωράμε επιλέγοντας REGISTER A NEW ACCOUNT όπου θα δημιουργήσουμε τον λογαριασμό administrator.

Προχωρώντας την εγγραφή θα μας εμφανιστεί ειδοποίηση αλλαγής του SITE-URL, εκεί θα πρέπει να επιλέξουμε YES.

Είμαστε έτοιμοι να λειτουργήσουμε το Rocket.Chat μας, καλώντας φίλους.