Posted

in

Updated

Node.js auf einem webgo Webhosting-Server installieren

Hat man bei webgo „nur“ ein reguläres Hosting-Angebot, z.B. Webhosting Profi, und keinen root Server, dann ist auf deinem Server laut Support-Aussage leider kein node.js vorinstalliert. Schade, denn das schränkt die Nutzung des Servers je nach Projekt etwas ein… Naja, werfen wir trotzdem einen Blick auf den Server: Wir verbinden uns per SSH – in Windows ist das mit PuTTY oder dem neuerdings in Windows 10 integrierten „WSL“ (Windows Subsystem for Linux) möglich. Ist dieses aktiviert (über „Windows Features aktivieren oder deaktivieren“), kann man sich über den Windows Store z.B. ein Ubuntu-Subsystem installieren und somit die gewohnte Linux-Konsole „nativ“ und ohne überladene Virtualisierung á la VirtualBox ausführen. Wir starten also das Ubuntu-Subsystem.

Im Ubuntu-Subsystem richten wir initial einen Nutzer mit Passwort ein. Dieser ist unabhängig von Windows und kann frei gewählt werden. Anschließend führen wir die bekannten Befehle aus, um das System auf den aktuellen Stand zu bringen:

sudo apt-get update
sudo apt-get upgrade

Als nächstes wollen wir die SSH-Verbindung zu unseren Server aufbauen. Dazu benötigen wir die entsprechenden Zugangsdaten. Beim Webhosting-Anbieter webgo findet man diese nach dem Login mit Klick auf „zum Vertrag“ im Abschnitt „FTP Zugangsdaten“ (diese sind mit den SSH Zugangsdaten identisch):

Wir nutzen im Ubuntu-Subsystem also folgenden Befehl, um die SSH-Verbindung aufzubauen:

ssh username@server.adresse.com
bei webgo z.B.: ssh web42@s123.goserver.host

Bei der ersten Verbindung bestätigt man den RSA fingerprint mit „yes“ und gibt anschließend das SSH- (bzw. FTP-) Passwort ein. Nutzt man beispielsweise einen Passwortmanager und möchte das Passwort über die Zwischenablage einfügen, muss man copy&paste für die Konsole zuerst aktivieren. Dazu einen Rechtsklick auf die Titelleiste -> „Eigenschaften“ -> Haken setzen bei „Verwenden Sie STRG + UMSCHALT + C/V zum Kopieren/Einfügen“.

Wir sind per SSH verbunden 🙂

Ok, warum machen wir das eigentlich? Der Support hat doch gesagt, node.js ist nicht vorinstalliert… Kurzer Check:

node -v
wir erhalten die Antwort „v4.8.2“

Hmm, node.js ist definitiv installiert 😉 Allerdings in einer ziemlich alten Version. Weiteres Problem: npm ist nicht mit an Bord, was man mit folgendem Check herausfindet:

npm -v
wir erhalten die Antwort „-shell: npm-v: command not found“

Also nächste Frage an den webgo Support: Kann man node.js auf seinem Webhosting-Server selbst installieren? Support: „Nein, leider ist das nicht möglich.“
Schade! Dann probieren wir es (trotzdem) mal 😉
Unter https://nodejs.org/en/download/ finden wir die aktuellste Version für unterschiedliche Plattformen. Wir interessieren uns in diesem Fall für die „Linux Binaries (x64)“ und kopieren den entsprechenden Download-Link, z.B. https://nodejs.org/dist/v10.16.3/node-v10.16.3-linux-x64.tar.xz
In der Ubuntu-Konsole laden wir uns dieses Archiv herunter:

cd ~
wget https://nodejs.org/dist/v10.16.3/node-v10.16.3-linux-x64.tar.xz

Anschließend entpacken wir das Archiv:

tar xvf node-v10.16.3-linux-x64.tar.xz

Nun erstellen wir einen „bin“-Ordner im home-Verzeichnis:

mkdir ~/bin

Jetzt kopieren wir uns noch die node-binary in den gerade erstellten Ordner:

cp node-v10.16.3-linux-x64/bin/node ~/bin

Dann wechseln wir in den bin-Ordner und erstellen dort einen Symlink auf den Namen npm:

ln -s ../node-v10.16.3-linux-x64/lib/node_modules/npm/bin/npm-cli.js npm

Im Ordner „~/bin“ sind nun also zwei Dateien: node und npm.
Jetzt fehlt nur noch, dass man diese Dateien starten kann, wenn man global (egal in welchem Pfad man sich befindet) den entsprechenden Dateinamen als Befehl eingibt. Außerdem muss das neu installierte Programm „node“ bevorzugt vor dem bereits vorinstallierten alten node-Programm gestartet werden. Beides erreichen wir durch folgenden Befehl:

PATH=~/bin:$PATH

Hier wird in die PATH-Variable zuerst unser „/home/bin“-Pfad eingetragen, gefolgt von allen bereits eingetragenen Pfaden. Die Pfade werden bei der Suche nach einem binary von vorne nach hinten abgearbeitet.
Beachte: Die PATH-Variable bleibt vermutlich nicht lange mit deiner Änderung bestehen. Dieses Setup ist somit nicht für eine Produktions-Umgebung geeignet. Generell kann man beim Aufruf des node-Programms aber natürlich auch immer den vollen Pfad angeben (~/bin/node).

Wir testen unsere Installation. In einem beliebigen Ordner geben wir folgendes ein:

node -v
Antwort: „v10.16.3“
npm -v
Antwort: „6.9.0“

Alles erfolgreich installiert! Zum weiteren Testen können wir einen einfachen Webserver in Javascript schreiben und im home-Verzeichnis als app.js abspeichern. Anschließend starten wir unser kleine node.js Applikation:

node app.js

Innerhalb der Datei app.js werden sowohl hostname, als auch port angegeben. Der hostname muss der sein, den man auch zur Verbindung per SSH genutzt hat. Der port kann größtenteils frei gewählt werden, außgeschlossen die Standardports. Hat man den Webserver im Terminal gestartet…

…kann man im Browser genau diese Adresse inklusive Port aufrufen und erhält sowohl im Browser, als auch im Terminal entsprechende Anzeigen.

Anmerkung 1: Das globale Installieren von Modulen klappt nicht (vermutlich wegen eingeschränkten Rechten auf dem Server)! Module können aber direkt im Ordner der js-Datei installiert werden. Also: nutze z.B. npm install express innerhalb des Ordners mit der js-Datei, statt npm install -g express.

Anmerkung 2: Anscheinend wird die PATH-Variable vom Server in regelmäßigen Abständen automatisch wieder zurück gesetzt. Abhilfe schafft hier, die binary ’node‘ einfach mit ihrem vollen Pfad aufzurufen, also z.B.
~/bin/node app.js
Für npm geht dieser Umweg allerdings leider nicht, d.h. man kann nicht ohne weiteres diesen Befehl (~/bin/npm install express) nutzen und die PATH-Variable unberührt lassen, da innerhalb des ’npm-cli.js‘-Skripts direkt die binary ’node‘ ohne weitere Pfadangabe aufgerufen wird. Entweder man ergänzt darin die Aufrufe von ’node‘ ebenfalls um die volle Pfadangabe, oder man ändert doch händisch die PATH-Variable wie oben beschrieben jedes mal, bevor man über npm ein Modul installieren möchte.

Hinweis: Jeder ist selbst für seinen Server und seine Einstellungen und Installationen verantwortlich. Ich weiß nicht, ob dies ein guter, geschweige denn sicherer Weg ist, node.js zu installieren. Jeder handelt auf eigene Gefahr!

Titelbild: designed with Canva

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Consent Management Platform von Real Cookie Banner