Let's Chat auf Uberspace installieren

Ich wollte mir mal die Slack Alternative Let's Chat anschauen und auf meinem Uberspace installieren. Wie man diese Node App zum laufen bekommt beschreibe ich hier.

Da NodeJS auf Uberspace bereits vorinstalliert ist, müsst ihr hier schon mal nichts machen, Let's Chat benötigt aber noch eine MongoDB Instanz. Diese erstellt ihr durch
uberspace-setup-mongodb

die Ausgabe sollte wie folgt aussehen

# uberspace-setup-mongodb 
Creating the ~/mongodb database directory
Creating the ~/etc/run-mongodb/run service run script
Creating the ~/etc/run-mongodb/log/run logging run script
Symlinking ~/etc/run-mongodb to ~/service/mongodb to start the service
Waiting for the service to start ... 1 2 3 4 started!
Creating administrative user

Congratulations - You can now reach your dedicated MongoDB installation!
Please note that your MongoDB uses the NON-standard port number 21080.
This allows running multiple instances of MongoDB on the same machine for different users.

Hostname: localhost
Portnum#: 21080
Username: username_mongoadmin
Password: iatAnyikDa

Wichtig ist, dass ihr euch die letzten vier Zeilen abschreibt und irgendwo sicher aufbewahrt.

Als nächstes müsst ihr euch die aktuelle Let's Chat Version von GitHub besorgen. Ich für meinen Teil speichere alle zusätzlichen Apps in Unterordnern ab.

mkdir ~/NodeApps
cd ~/NodeApps
git clone https://github.com/sdelements/lets-chat.git
cd lets-chat

Nun müsst ihr die zusätzlichen Node Pakete installieren. Hierzu müsst ihr einfach npm install eingeben, der Rest passiert von alleine.

Als nächstes müsst ihr die Konfigurationsdatei erzeugen und anpassen.

cp settings.yml.sample settings.yml

Bevor wir nun die Konfiguration bearbeiten, brauchen wir noch einen bzw. zwei Ports auf der/denen die App läuft. Einen braucht ihr definitiv für die Webanwendung und einen zweiten, falls ihr XMPP (Jabber) für euren Let's Chat benutzen wollt.

Hierzu könnt ihr mittels netstat -tulpen | grep $Portnummer einen unbenutzten Port suchen.
$Portnummer müsst ihr nun durch eine Zahl zwischen 61000 und 65535 ersetzen. Sollte keine Rückmeldung erscheinen, ist der Port frei und ihr könnt diesen verwenden.
Wollt ihr nun ebenfalls XMPP benutzen, braucht ihr noch einen weiteren Port. Diesen müsst ihr dann noch bei hello@uberspace.de für TCP und UDP freischalten lassen!

Nun können wir die Konfiguration anpassen. Öffnet nun mit einem Editor eurer Wahl die settings.yml und passt folgende Zeilen an

http:
    enable: true
    host: 'localhost'
    port: $Portnummer1

xmpp:
    enable: true
    port: $Portnummer2
    domain: $EureDomain
    roomCreation: false

zudem müsst ihr noch die MongoDB Verbindung einrichten.
Hier braucht ihr nun die Daten, die ihr bei der Erzeugung der MongoDB Instanz erhalten habt.

database:
    uri: mongodb://$Username:$Passwort@localhost:$Port/letschat?authSource=admin

Nun könnt ihr zum ersten mal eure Installation testen. Gebt hierzu npm start ein.
Wenn ihr folgendes seht, hat alles geklappt

Nun könnt ihr mit Strg+C die App beenden und die Erreichbarkeit vom Internet einrichten. Zudem muss die App noch als Dienst eingerichtet werden, damit diese automatisch startet.

Machen wir dies zuerst

uberspace-setup-service letschat npm start ~/NodeApps/lets-chat 2>&1

Ich habe meine Let's Chat Instanz als Subdomain installiert. Geht dazu wie folgt vor

cd ~/subdomains
mkdir subdomain.domain.tld

cat <<__EOF__ >> ~/subdomains/subdomain.domain.tld/.htaccess
RewriteEngine On
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://subdomain.domain.tld/$1 [R,L]

RewriteCond %{SERVER_PORT} 443
RewriteRule ^(.*) http://localhost:$Portnummer1/$1 [P]
__EOF__

Damit wird zuerst jeder HTTP Request auf HTTPS umgeschrieben und anschließend auf die interne Node App umgeleitet.
Ihr braucht also möglichst ein SSL Zertifikat für eure Subdomain.

EDIT:
Hier noch kurz die derzeit eingesetzten Versionen:

  • LetsChat 0.4.8
  • npm 2.15.11
  • NodeJS 4.7.3