Rocket.Chat wurde in nur kurzer Zeit zu einer echten Open Source Chat-Dienst Alternative zu Slack. Es eignet sich zur Kommunikation und agilen Zusammenarbeit von großen Unternehmen gleichermaßen wie für kleinere Teams. Ein echter Vorteil dabei ist, das sich der Dienst kostenlos auf dem eigenen Server bzw. in der Cloud betreiben lässt. Dies führt zu mehr Flexibilität und einer höheren Kontrolle über die eigenen Daten. Durch den modularen Ansatz von Rocket.Chat, kannst du als Anwender dein Chatsystem zudem individuell zusammenbauen. Neben Funktionen wie Audio- und Video-Conferencing oder Screen Sharing, lässt sich auch ein Support-Chat für die eigene Website einrichten. Weiterhin steht hinter Rocket.Chat eine aktive Entwickler-Community, die sich an der Weiterentwicklung der Software beteiligt.
In diesem Tutorial zeige ich dir, wie du Rocket.Chat sicher auf deinem Cloud Server mit Ubuntu 18.04 LTS und kostenlosen SSL Zertifikat von Let’s Encrypt einrichtest.
Schritt 1 – Dependencies installieren
Nachdem du deinen Cloud Server mit Ubuntu 18.04 erstellst hast, starten wir in Teil 1 mit der Installation der benötigten Dependencies für Rocket.Chat.
Dazu zählt:
- Node.js
- MongoDB
- graphicsmagick
Bringe zunächst deinen Cloud Server auf den aktuellen Stand.
sudo apt update -y && apt upgrade -y
Im nächsten Schritt wird mit folgendem Befehl das Repository für MongoDB hinzugefügt und MongoDB zusammen mit graphicsmagick installiert.
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-3.2.list
sudo apt-get update
sudo apt-get install -y mongodb-org graphicsmagick
Anschließend muss noch der Service für SystemD definiert werden. Dazu muss die Datei /etc/systemd/system/mongodb.service erstellt werden und mit einem Editor bearbeitet werden. In diesem Beispiel wird Nano verwendet:
nano /etc/systemd/system/mongodb.service
In die Datei muss folgender Inhalt eingefügt und anschließend abgespeichert werden:
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
[Service]
User=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf
[Install]
WantedBy=multi-user.target
Anschließend kannst du mit folgendem Befehl MongoDB noch für den automatischen Start beim Booten freigegeben:
sudo systemctl enable mongodb
Mit folgendem Befehl kann der Service jetzt gestartet werden:
service mongodb start
Zum Schluss kannst du noch überprüfen ob der Service gestartet ist.
service mongodb status
Als nächstes wird nun npm und Node.js installiert.
sudo apt-get install npm
sudo apt-get install nodejs
Damit auch npm Pakete, die von source code erzeugt werden, richtig installiert werden können, muss noch das build-essential Paket installiert werden.
sudo apt-get install build-essential
Dann wird noch ein Tool installiert, mit dem wir auf die empfohlene Node.js Version für Rocket.Chat switchen können. Aktuell ist das die Node Version 8.9.3.
sudo npm install -g n
Mit dem folgenden Befehl wird die benötigte Version dann aktiviert:
sudo n 8.9.3
MongoDB Replica Set einrichten
Weiterhin kann noch dieser optionale Schritt durchgeführt werden, um die Performance von Rocket.Chat zu verbessern. Dabei macht sich Rocket.Chat MongoDB replica set zu Nutze.
Im nachfolgen Abschnitt zeige ich dir welche Schritte dafür notwendig sind.
Füge folgenden Zeile in die mongod.conf ein:
replication:
replSetName: "001-rs"
Beachte, dass dein Hostname unter /etc/hosts und /etc/hostname richtig gesetzt ist, da es ansonsten bei der folgenden Aktivierung zu Problemen kommen kann.
Dann MongoDB neustarten.
service mongodb restart
Als Nächstes wird das replica set aus der MongoDB Shell gestartet.
mongo
> rs.initiate()
Dein Ergebnis sollte in etwa so ausgegeben werden:
{
"info2" : "no configuration explicitly specified -- making one",
"me" : "localhost:27017",
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}
ist alles gut gelaufen, sollte bei “ok” der Wert 1 stehen. Andernfalls solltest du wie oben bereits erwähnt noch einmal deine Host Einträge überprüfen.
Nach ein paar Sekunden siehst du dann, wie der Prompt sich in 001-rs:PRIMARY> abändert. Daran ist zu erkennen, dass das replica set verwendet wird.
Nun muss folgende Umgebungsvariable gesetzt werden, bevor der Rocket.Chat Server gestartet wird und damit die Änderungen angewendet werden.
MONGO_OPLOG_URL=mongodb://localhost:27017/local?replicaSet=001-rs
Für eine dauerhafte Definition, fügst du diese Zeile in dein Bash Profil unter -/.bashrc:
MONGO_OPLOG_URL=mongodb://localhost:27017/local?replicaSet=001-rs
Schritt 2 – Rocket.Chat installieren
In diesem Abschnitt kümmern wir uns nun um die eigentliche Installation von Rocket.Chat.
Lade im ersten Schritt die letzte stabile Version von Rocket.Chat herunter.
curl -L https://releases.rocket.chat/latest/download -o rocket.chat.tgz
Dann das Archiv nach /opt entpacken.
tar zxvf rocket.chat.tgz -C /opt/
Nun wechselst du nach /opt und benennst das soeben entpackte Verzeichnis um.
mkdir /opt
mv bundle Rocket.Chat
Jetzt kann der Server gestartet werden.
cd Rocket.Chat/programs/server
npm install
cd ../..
export ROOT_URL=http://dein-host-name.de:3000/
export MONGO_URL=mongodb://localhost:27017/rocketchat
export PORT=3000
node main.js
Wenn du das optionale replica set konfiguriert hast, musst du stattdessen folgende MONGO_URL verwenden:
export MONGO_URL=mongodb://localhost:27017/rocketchat?replicaSet=001-rs
Beachte: In der ROOT_URL Umgebungsvariablen musst du deine Internet URL welche auf deinen Server verweist angeben. Ersetze “your-host-name.com” durch deine URL.
Wenn du den Rocket.Chat Server lieber auf Port 80 laufen lassen möchtest, kannst du mit sudo Rechten entsprechend diese Variablen setzen:
sudo ROOT_URL=http://your-host-name.com-as-accessed-from-internet/
MONGO_URL=mongodb://localhost:27017/rocketchat
PORT=80
node main.js
oder
sudo su
export ROOT_URL=http://your-host-name.com-as-accessed-from-internet/
export MONGO_URL=mongodb://localhost:27017/rocketchat
export PORT=80
node main.js
Wenn dein Rocket.Chat Server über Neustarts hinweg laufen soll, kannst du forever, PM2 oder ein eigenes Shell-Skript dafür einsetzen.
Damit sind wir auch schon fast fertig. Jetzt solltest du Rocket.Chat bereits über die IP deines Servers sowie den entsprechenden Port bzw. URL und den entsprechenden Port aufrufen können.
Im nächsten Abschnitt werden wir Rocket.Chat mit einem SSL-Zertifikat absichern.
Schritt 3 – Rocket.Chat mit Let’s Encrypt SSL-Zertifikat absichern
In diesem Abschnitt zeige ich dir, wie du deinen Rocket.Chat Server mit einem kostenlosen SSL-Zertifikat von Let’s Encrypt sicher machst.
Wir werden Rocket.Chat hinter nginx als SSL Reverse Proxy laufen lassen.
Zunächst muss die nginx Default-Konfiguration unter /etc/nginx/sites-enabled/default
angepasst werden.
Ersetze dazu den kompletten Inhalt der Datei mit der folgenden Konfiguration und speichere das ganze ab:
# Upstreams
upstream backend {
server 127.0.0.1:3000;
}
# HTTPS Server
server {
listen 443;
server_name your_hostname.com;
error_log /var/log/nginx/rocketchat.access.log;
ssl on;
ssl_certificate /etc/nginx/certificate.crt;
ssl_certificate_key /etc/nginx/certificate.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # don’t use SSLv3 ref: POODLE
location / {
proxy_pass http://backend/;
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;
}
}
Jetzt musst du noch das SSL-Zertifikat beantragen und dann die nginx Konfiguration nochmal entsprechend anpassen.
Certbot ist ein ziemlich praktisches Tool mit dem sich dieser Prozess ein wenig vereinfachen lässt.
Das SSL-Zertifikat lässt sich direkt über Certbot beantragen und auch eine automatische Verlängerung einrichten.
Installiere dafür zunächst Certbot mit folgenden Befehlen:
apt-get update
apt-get install software-properties-common
add-apt-repository ppa:certbot/certbot
apt-get update
apt-get install python-certbot-nginx
Jetzt führst du folgenden Befehl aus:
sudo certbot --nginx
Dieser Befehl öffnet einen Dialog indem du unter anderem nach deiner Domain gefragt wirst, diese muss zwingend angegeben werden. Des weiteren wirst du gefragt, ob du HTTP Traffic auf HTTPS umleiten willst, hier kannst du ebenfalls mit ja bzw. 2 antworten. Zudem musst du den Terms of Service von Let’s Encrypt zustimmen und kannst auswählen, ob du über Neuigkeiten informiert werden willst.
Nach Abschluss des Dialogs solltest du eine “Congratulations! You have successfully enabled ….” Meldung erhalten. Certbot hat damit automatisch die entsprechenden Zeilen in der nginx Konfiguration hinterlegt.
Nach dem Aufrufen der Domain im Browser, sollte nun neben deiner Adresszeile ein Secure auftauchen.
Da die SSL-Zertifikate von Let’s Encrypt nur für 90 Tage gültig sind, ist es an dieser Stelle ratsam, einen Cronjob einzurichten der dein Zertifikat automatisch erneuert bevor es abläuft. Für eine Einrichtung des Cronjobs mit Certbot, ist nur das Ausführen von folgendem Befehl notwendig:
sudo certbot renew --dry-run
Geklappt? Prima! ?
Fazit
In diesem Tutorial hast du gelernt, wie du den fortschrittlichen Open-Source Chat-Dienst Rocket.Chat installierst und mit einem kostenfreien SSL-Zertifikat von Let’s Encrypt absicherst. Als nächstes kannst du das Setup abschließen und dich um die Einrichtung und Erweiterung frei nach deinen Wünschen kümmern. Rocket.Chat bietet dir größten Spielraum, um den Chat-Dienst nach freiem Belieben einzurichten. Für mehr spannende Tutorials kannst du einfach einen Blick in unsere Developer Community werfen.