== 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: @students.hsrw }}} == Wie installiere ich Git? == Lade dir [https://git-scm.com/download/ hier] die aktuelle Version von Git runter, und installier es. Der Installer sollte alle nötigen Libraries mit installieren. In diesem Tutorial werden wir die Konsole benutzen, bei Bedarf gibt es auch GUI's für Git. == 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. Setze dein Repository auf Public und 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 {{{.gitignore}}} anlegen. Erstelle im Wurzelverzeichnis deines Repositorys eine Datei mit dem Namen {{{.gitignore}}} und schreibe folgendes hinein: {{{ node_modules/ jspm_packages/ .idea/ }}} Um Dateien zum Hochladen zu markieren, musst du dich in dem Ordner des Repositorys befinden und {{{git add }}} eingeben. Mit {{{git add .}}} gibst du das gesammte Verzeichnis in dem du dich befindest zum Hochladen frei. Dateien die auf die Patterns in deiner {{{.gitignore}}} zutreffen werden ignoriert. Mit {{{git commit -m }}} legst du einen Commit an, und mit {{{git push -u origin }}} lädst du alle deine Commits in das angegebene Branch deines Repositorys hoch. == 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 und Development-Branches. In den Development-Branches wird an dem Projekt gearbeitet, und wenn alle Änderungen ausgereift, und zur Veröffentlichung bereit sind, werden die Development-Branches mit dem Master-Branch zusammengeführt, und der Master-Branch auf den Entwicklungsstand der Development-Branches gebracht. Du versuchst deinen Master-Branch so sauber wie möglich zu halten. == 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: {{{ // 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: {{{ { "name": "tutorial_project", "version": "1.0.0", "description": "", "main": "tutorial.js", "scripts": { "start": "node ./tutorial.js" }, "repository": { "type": "git", "url": "https://git.hsrw.eu/test.user/tutorial_project.git" }, "author": "", "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: {{{ // HTTP Modul einbinden var http = require('http'); // MongoDB Modul einbinden var mongoClient = require('mongodb').MongoClient; // Datenbank Connection-String aus der Umgebung des HostLabs holen. var conString = 'mongodb://' + process.env.MONGO + '/tutorialdb' // 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. == 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]