Dieser Post zeigt, wie man eine Node.js Applikation mit dem freien Account bei Openshift aufsetzen kann, mit Git-Deployment, SSH-Zugang uvm. In Verbindung mit einer eigenen Domain eignet sich das hervorragend für das Hosting kleinerer Projekte, Kundendemonstrationen, als Testumgebung oder Spielwiese.

Cartman als “asciimo” ausgeliefert via Node.js @ Openshift [Quelle]

Was ist Openshift?

Openshift ist eine Cloud-Plattform von RedHat und bietet Hosting in der Cloud (Platform as a service, PaaS) mit Unterstützung für diverse Softwarestacks basierend auf verschiedenen Programmiersprachen wie Java, Ruby, PHP oder auch JavaScript via Node.js. Es existiert ein kostenfreier Account bei welchem drei sog. Gears zur Verfügung stehen. Ein Gear, oder auch Application genannt, ist eine Art Container mit einer begrenzten Anzahl RAM und Speicherplatz, welcher die verschiedenen Komponenten (Cartridges) verwaltet. Eine Cartridge ist eine austauschbare Komponente, welche neben Anderen innerhalb einer Applikation verwendet werden kann. Mindestanforderung ist eine Sprachumgebung wie z.B. PHP, danach können weitere Komponenten hinzugefügt werden, von Datenbanksystemen wie MySQL oder MongoDB bis hin zur Unterstützung für kontinuierliche Integration mit Jenkins.

Node.js Hosting

Viele Standard Hosting Pakete bieten im Allgemeinen nicht viel Kontrolle über die auf dem Server installierte Software. Im Zeitalter von Vagrant und Co. sind es Entwickler allerdings gewohnt, eine Maschine per Knopfdruck mit genau definiertem Softwarestack zu erstellen und zum Laufen zu bringen.

Recht ähnlich verhält es sich bei Openshift, nur in der Cloud, und mit Git. Es wird von Haus aus Node.js unterstützt und das Erstellen/Verwalten von Apps sowie das Deployment (via Git) ist kinderleicht.

Eine schöne Liste zum Thema Hosting von Node.js Apps findet sich auf JSNews.de.

Hands on!

Mit Hilfe weniger Kommandos hat man eine neue App erstellt, welche dann auch sofort weltweit erreichbar ist. Ein Account bei Openshift sowie die lokale Installation einiger Abhängigkeiten (Ruby mit rhc tool, Git) sind die Voraussetzung. Mehr Informationen dazu auf openshift.com/get-started.

Das Erstellen einer App bei Openshift, sowie das Hinzufügen von Cartridges kann man von der Kommandozeile aus oder per Webinterface erledigen, ich verwende die Kommandozeile, eine Node.js App erstellt man mit dem Openshift Kommandozeilen-Tool rhc wie folgt:

$ rhc app create MyApp Node.js-0.10
$ rhc cartridge add mongodb-2.2 -a MyApp

Der erste Befehl erstellt eine neue App mit dem Namen MyApp basierend auf der Node.js Version 0.10. Im zweiten Befehl wird dieser App dann auch gleich eine Datenbank-Cartridge hinzugefügt: mit MongoDB in Version 2.2.

Zwei Minuten später:

Openshift URLs bestehen aus dem Namen der App, sowie einem globalen Namespace, welchen man selbst einmalig vergeben kann: (hier mwager)

http(s)://appname-namespace.rhcloud.com

Für jede App wird automatisch ein Git-Repository initialisiert. Zugriff erhält man per SSH Public-Key Authentifizierung, der Public Key wurde beim CLI Setup bereits an Openshift übermittelt. Die URL hat die Form:

ssh://APP_KEY@appname-namespace.rhcloud.com/~/git/appname.git/

Zugriff via SSH ist übrigens auch möglich:

$ ssh APP_KEY@appname-namespace.rhcloud.com

Ein Commit existiert bereits:

$ cd myapp/
$ git log

commit b73b7375c8ae53b3d678ccd1255fa95c1bef3c51
Author: Template builder <builder@example.com>
Date:   Tue Jan 14 12:50:12 2014 -0500

Creating template

Im Repo befindet sich eine einfache, auf dem Express Framework basierende, Node.js-App in der Datei server.js. Diese App reagiert auf 2 Routes: /, sowie /asciimo. Unter Letzterer erscheint Cartman als asciimo wie im Introbild zu sehen ist - eine nette Anspielung auf Southpark’s Folge 116 aus Staffel 8 (Quelle: Wikipedia), in der Cartman sich als Roboter namens A.W.E.S.O.M.-O 4000 verkleidet um an Butters’ peinliche Geheimnisse zu gelangen und ihn damit aufzuziehen.

Deployment

Nach Änderungen im Repo reicht nun ein git push und die neue Version ist live. Zusammen mit einer eigenen Domain und einer DNS Weiterleitung ist das eine feine Sache. Weitere Ideen wären das Hosting eines Blogs oder privaten Continuous Integration Servers.

Quellen