== Wie hoste ich meine NodeJS-Anwendung auf dem !HostLab? == Du hostest deine Anwendung, indem du ein Repository in unserem [https://git.hsrw.eu GitLab] erstellst, und diese zum hosten im [https://cloudhost.hsrw.eu HostLab] auswählst. == Wie logge ich mich beim !HostLab / !GitLab ein? == Das !GitLab erreichst du [https://git.hsrw.eu hier] und das !HostLab [https://cloudhost.hsrw.eu hier]. Dort kannst du dich mit deinen Daten der Hochschule einloggen. {{{ Dein Login: }}} == Wie installiere ich Git? == Wenn Du unter Windows arbeitest, dann musst Du dir [https://git-scm.com/download/ hier] die aktuelle Version von Git herunterladen. Unter Linux oder macOS solltest Du ohnehin das Terminal benutzen und Git vorfinden. == Wie installiere ich Node.js? == Lade dir [https://nodejs.org/en/download/ hier] die aktuelle Version von Node.js herunter, und installier es. == Wie erstelle ich ein Repository? == Wenn du im !GitLab eingeloggt bist, kannst du [https://git.hsrw.eu/projects/new hier] ein neues Repository erstellen. Dort kannst du entweder ein komplett leeres Repository erstellen, oder ein bereits vorgefertigtes Template auswählen. Klicke auf "Create Project" um dein Repository zu erstellen. == Wie "verbinde" ich mich mit meinem Repository? == Öffne das Terminal und gib folgende Befehle ein: {{{ git config --global user.name ", " git config --global user.email ".@hsrw.org" }}} Bewege dich mit dem Befehl {{{cd}}} in ein Verzeichnis, in dem ein Ordner mit dem Namen deines Repository erstellt werden soll z.B.: {{{ cd C:\GitRepositories\ }}} Jetzt kannst du mit dem Befehl {{{git clone}}} dein Repository klonen, und es herunterladen. Es wird an dem Pfad wo du dich befindest ein Ordner erstellt, der den Namen deines Repositorys trägt. Die URL zu deinem Repository findest du auf der Seite des Repositories. {{{ git clone https://git.hsrw.eu/tutorial.user/blank_tutorial.git bzw. git clone https://git.hsrw.eu//.git }}} Wenn du nach deinen Login-Daten gefragt wirst, gib diese ein. == Wie lade ich Dateien in mein Repository? == Zuerst solltest du eine [https://help.github.com/en/github/using-git/ignoring-files .gitignore] anlegen. Erstelle im Wurzelverzeichnis deines Repositorys eine Datei mit dem Namen {{{.gitignore}}} und schreibe mindestens folgendens hinein: {{{ node_modules/ }}} ''Es empfiehlt sich ebenfalls auf https://www.gitignore.io/ nachzuschlagen was hier eingetragen werden sollte, wenn man es selbst noch nicht weiß.'' Um Dateien ins Repository einzureichen, kannst Du mit `git status` überprüfen was sich seit der letzten Einreichung geändert hat und mit `git add ` für die nächste Einreichung vormerken. Dateien, die mit Mustern in deiner {{{.gitignore}}} übereinstimmen, werden ignoriert. Mit {{{git commit -m }}} machst Du eine neue Einreichung der vorgemerkten Änderungen. Mit {{{git push -u origin }}} kannst Du deine bisherigen Einreichungen auf den Git-Server laden. == Was ist ein Branch? == Ein Branch ist eine Verzweigung in deinem Repository. Du kannst es wie eine Kopie deines ursprünglichen Projektes sehen, an dem unabhängig von den anderen Branches gearbeitet werden kann. Üblicherweise gibt es **einen** Master-Branch, **einen** Development-Branch und **viele** Feature-Branches. In einem Feature-Branch wird an einer neuen Funktion für das Projekt gearbeitet und wenn alle Änderungen ausgereift und getestet wurden, dann wird der Feature-Branch mit dem Development-Branch zusammengeführt. Daraufhin wird das Zusammenspiel aller Änderungen auf dem Development-Branch auf einer frischen Laufumgebung intensiv getestet. Sobald ein Bug entdeckt wird, wird ein entsprechend nummerierter Bug-Branch vom Development-Branch abgespalten und in diesem Branch korriegert, getestet und wieder mit dem Development-Branch zusammengeführt. Dies erfolgt solange bis keine Fehler mehr bekannt sind und eine neue Veröffentlichung der Software erfolgen kann. Der Development-Branch wird auf den Master-Branch zusammengeführt und auf entsprechende Laufumgebungen verteilt. Der Master-Branch soll also zu jeder Zeit eine lauffähige Version der Software beinhalten! == Anfang mit einem leeren Repository == Wenn du dich für das leere Repository entschieden hast, musst du zuerst mit {{{npm init}}} ein Node-Package anlegen, dass du dann in das Repository hochlädst. Als Beispiel schreiben wir eine simple NodeJS-Anwendung, die auf eingehende Requests mit "Hello World!" antwortet: {{{#!js // tutorial.js // HTTP Modul einbinden var http = require('http'); // HTTP Server erzeugen var server = http.createServer(serve); // Port aus der Umgebung des HostLabs holen. const port = process.env.PORT; // Server an Port binden server.listen(port); // Funktion des HTTP-Servers // req: Anfrage vom Client (Request) // res: Antwort des Servers (Response) function serve(req, res) { res.writeHead(200, {"Content-Type": "text/plain"}); res.write("Hello World!"); res.end(); } }}} Jetzt musst du noch dein Script als Einstiegspunkt in der {{{package.json}}} angeben. Das machst du, indem du im {{{"scripts"}}}-Block die Zeile {{{"start": "node "}}} hinzufügst. Die fertige {{{package.json}}} könnte dann so aussehen: {{{#!json { "name": "tutorial-project", "version": "0.0.1", "description": "Some tutorial project in development", "main": "tutorial.js", "scripts": { "start": "node tutorial.js" }, "repository": { "type": "git", "url": "https://git.hsrw.eu/test.user/tutorial-project.git" }, "author": "Test User ", "license": "ISC" } }}} Commite und Pushe den Code in dein Repository. {{{ git add . git commit -m "Add tutorial.js and package.json" git push -u origin master }}} == Wie Hoste ich meine Anwendung im !HostLab? == Logge dich im [https://cloudhost.hsrw.eu HostLab] ein, und klicke in der Sidebar auf [https://cloudhost.hsrw.eu/node Node.js]. Hier siehst du deine laufenden Anwendungen, falls du welche hast. Um eine neue Anwendung zu hosten, klicke auf den New-Button. Nun kannst du das Repository auswählen, welches du hosten möchtest. Bei "Select a Run-Script" sollte dein Start-Script ausgewählt sein. Bei "Mount Path" kannst du angeben wie deine URL aussehen soll. Wenn du jetzt auf "Create Application" klickst, wird deine Anwendung gehostet. Du kannst sie unter {{{cloudhost.hsrw.eu/hsrw.org/./}}} erreichen. == Anbindung einer MongoDB == Installiere das MongoDB-Paket mit {{{npm install mongodb}}}. Als Beispiel verändern wir {{{tutorial.js}}} so, dass bei eingehenden Requests eine Verbindung mit einer MongoDB aufgebaut wird: {{{#!js // HTTP Modul einbinden var http = require('http'); // MongoDB Modul einbinden var mongoClient = require('mongodb').MongoClient; // Datenbank Connection-String mithilfe der Umgebungsvariable zusammenbauen. var conString = `mongodb://${process.env.MONGO_HOST}/database-name`; // URL Modul einbinden var url = require('url'); // HTTP Server erzeugen var server = http.createServer(serve); // Port aus der Umgebung des HostLabs holen. const port = process.env.PORT; // Server an Port binden server.listen(port); // Funktion des HTTP-Servers // req: Anfrage vom Client (Request) // res: Antwort des Servers (Response) function serve(req, res) { mongoClient.connect(conString, function(error, db) { res.writeHead(200, {"Content-Type": "text/plain"}); if (error){ console.log("Error while connecting to mongodb: \r\n" + error); res.write("Connection failed. :("); } else{ res.write("Connected to mongodb!"); db.close(); } res.end(); }); } }}} Wenn du deine Anwendung jetzt zum Hosten im !HostLab auswählst, setze das Häkchen bei "Attach MongoDB". Nun kannst du unter dem Punkt "MongoDB" in der Sidebar deine Datenbanken verwalten. == Wie installiere ich Pakete? == Navigiere mit deinem Terminal in dein Projektverzeichnis. Pakete kannst du mit dem befehl {{{npm install --save}}} installieren, und zu den Dependencies hinzufügen. Beispielsweise kannst du {{{express.js}}} mit dem Befehl {{{npm install express --save}}} installieren. Pakete kannst du in deinem Code mit {{{require('')}}} einbinden: {{{#!js // Express einbinden var express = require('express'); var app = express(); // Port aus der Umgebung holen var port = process.env.PORT; app.get('/', function (req, res) { res.send('Hello World!'); }); app.listen(port, function () { console.log('Example app listening on port ' + port + '!'); }); }}} == Wie lösche ich eine gehostete Anwendung? == Gehe im !HostLab auf den Reiter [https://cloudhost.hsrw.eu/node Node.js], wähle die App aus die du löschen willst, und klicke unten bei "Danger Zone" auf den "Delete Application"-Button. == Wie lösche ich ein Repository? == Öffne die Seite deines Repositorys im !GitLab. Wähle in der Sidebar "Settings". Klappe "Advanced Settings" aus. Dort befindet sich die Option "Remove Project". == Irgendwie funktioniert bei mir nichts, wo bekomme ich Hilfe? == Hier sind ein paar hilfreiche Links, die dir eventuell helfen könnten: * [https://www.w3schools.com/nodejs/nodejs_get_started.asp Getting started with Node.js] * [https://git-scm.com/book/en/v1/Getting-Started-Installing-Git Getting started with Git] * [https://docs.gitlab.com/ee/intro/ Getting started with GitLab] * [https://cloudhost.hsrw.eu/help HostLab Help]