Node.js / npm / Composer ohne Root

In einem älteren Blogbeitrag habe ich beschrieben, wie man Node.js kostenlos mit Hilfe von Heroku hosten kann. Nun zeige ich einen Weg, wie man Node.js, npm und Composer auch auf beliebigen anderen Shared Hostern ohne Root-Rechte mit wenigen Zeilen Code installieren kann. Damit kann man Packages installieren, Vue.js Applikationen deployen oder einfach nur einen Express.js Server starten. Wir arbeiten dabei stets im Benutzerverzeichnis und nutzen nvm – den Node Package Manager.


Wichtig dabei ist vorher sicherzustellen, dass composer und node nicht vorliegen und die folgenden Zeilen keine Ausgabe erzeugen:

16c389ff1cdd9380cc5f9244775eb6c8

Zunächst legen wir temporäre Umgebungsvariablen fest, die wir später brauchen. Dazu bestimmen wir Benutzerverzeichnis des Users (üblicherweise ~/, auf einigen Shared Hosts auch /www/htdocs/xxxxxxx/) sowie die gewünschte PHP-Version (beispielsweise beim Anbieter All-Inkl /usr/bin/php72, bei DomainFactory /usr/local/bin/php7-72LATEST-CLI):

16c389ff1cdd9380cc5f9244775eb6c8

Nun sorgen wir dafür, dass PHP in der neuesten Version auf der Console ausgeführt wird. Dazu legen wir im Home-Verzeichnis einen neuen Ordner an, erstellen einen Softlink und fügen das Verzeichnis am Anfang des PATHs hinzu.

16c389ff1cdd9380cc5f9244775eb6c8

Nun installieren wir global Composer, indem wir das Installationsscript downloaden, überprüfen und ausführen, anschließend die composer.phar ebenfalls in das Benutzerverzeichnis legen und erneut einen Symlink anlegen:

16c389ff1cdd9380cc5f9244775eb6c8

Zur Installation von Node.js nutzen wir nvm. Das ist ein Bash-Script, das eigentlich dazu dient, bequem zwischen Node Versionen zu wechseln. Wir nutzen hier die Eigenschaft, dass damit Node.js ohne root-Rechte installiert wird:

16c389ff1cdd9380cc5f9244775eb6c8

Bei mir war noch eine kleine Korrektur in der .bashrc notwendig:

16c389ff1cdd9380cc5f9244775eb6c8

Nun können wir die aktuelle Stable-Version von Node.js installieren und aktivieren:

16c389ff1cdd9380cc5f9244775eb6c8

Mit Hilfe von nvm können wir damit auch ganz einfach Versionen wechseln.

16c389ff1cdd9380cc5f9244775eb6c8

Ich konnte alle diese Schritte bei einigen deutschen Shared Hosting Anbietern ohne Probleme durchführen. Einige Hoster haben mit Symlinks Probleme, hier gibt es aber auch Abhilfe durch aliase. Bei DomainFactory hilft beispielsweise folgende .bashrc:

16c389ff1cdd9380cc5f9244775eb6c8

Auch gibt es beispielsweise beim Zugriff auf /proc/stat in virtuellen / gesharten Umgebungen Probleme, weshalb beispielsweise die Node-Funktion os.cpus() undefined statt die korrekte Core-Anzahl zurückgibt. Das führt bei der Installation von npm-Packages zu Fehlermeldungen wie "Cannot read property 'length' of undefined". Ich konnte das Problem durch Verwenden einer aktuellen Node.js-Version (beispielsweise 11.15.0) lösen, in dem das Problem adressiert wurde.

Zurück