Skip to content

Installation Guide

Raqhael edited this page May 15, 2022 · 13 revisions

Einleitung

Diese Anleitung wird Sie bei der gerechten Installation Ihrer Software begleiten mit dem Ziel ein lauffähiges Produkt auf Ihren Servern bereitzustellen.

Für diese Anleitung wurde das Betriebssystem Linux Ubuntu-Server v20.04.4 verwendet und es wird empfohlen dieses Betriebssystem auf Ihrem Ziel-Rechner zu verwenden, um der Anleitung so nah wie möglich zu folgen. (Die Installation auf anderen Linux-Distributionen sollte nicht arg von dieser Anleitung abweichen, aber für eine Installation auf einem Windows-Rechner müssen einige Anwendungen anders installiert werden)

Die Installation sollte mit einer durchschnittlichen Internetverbindung ca. 20 Minuten dauern, sofern Sie alles auf einem Rechner installieren werden.

Abhängigkeiten installieren

Um die Anwendung auf Ihrem Zielrechner zu installieren, benötigen Sie zunächst einmal einige Programme, die Ihnen helfen werden, andere Pakete zu installieren, oder die Anwendung zum Laufen zu bringen:

Node + npm

Prüfen Sie zunächst npm und Node auf Ihrem Rechner installiert sind

$ node -v
v11.2.0

$ npm -v
6.14.4

Falls Sie eine Versionsnummer als Antwort erhalten die entweder gleich oder größer der hier dargestellten ist, dann haben Sie Node schon auf Ihrem Rechner installiert und Sie können mit dem nächsten Kapitel weitermachen. Ansonsten folgt nun die Installation:

Geben Sie den folgenden Command in Ihr Terminal ein um Node+npm zu installieren.

curl -fsSL https://deb.nodesource.com/setup_current.x | sudo -E bash -
sudo apt-get install -y nodejs

Geben Sie ggf. Ihr sudo-passwort ein und bestätigen weitere Eingaben mit einem Ja/Enter. Wenn die Installation fertig ist, geben Sie die Commands wie im Anfang beschrieben ein um zu überprüfen ob node richtig installiert wurde.

Bei Problemen, oder falls Sie ein anderes Betriebssystem verwenden hilft ein Blick auf die Website von Node.js

MongoDB Server

MongoDB wird als zentrale Datenbankanbindung genutzt. Sie können entweder einen eigenen MongoDB Server installieren, oder Sie nutzen für Testzwecke unsere Datenbank (Die Verbindungsdaten können Sie bei uns erfragen)

MongoDB's public GPG Key importieren
$ wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
OK

Als Antwort sollte OK zurückkommen, falls nicht versuchen Sie folgendes Paket zu installieren:

sudo apt-get install gnupg
List-File für MongoDB erstellen
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
Lokale Packages neu laden
sudo apt-get update
MongoDB Pakete installieren
sudo apt-get install -y mongodb-org
MongoDB starten

MongoDB ist soweit installiert, um den Server zu starten geben sie folgenden Befehl ein:

sudo systemctl start mongod

Sie können anschließend noch einmal verifizieren ob MongoDB gestartet ist:

sudo systemctl status mongod
MongoDB Passwort erstellen

Für die Kommunikation mit der Datenbank von außen bietet sich es an einen root user zu erstellen:

Mit dem Server verbinden:

mongo

Neuen Nutzer anlegen (Statt [ROOT-Nutzer] und [ROOT-Passwort] tragen Sie Ihre gewünschten Daten ein und merken Sie sich diese:

use admin
db.createUser(
  {
    user: "[ROOT-Nutzer]",
    pwd: "[ROOT-Passwort]",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

Mongo neu Starten

sudo systemctl restart mongod

RabbitMQ

RabbitMQ installieren
sudo apt install rabbitmq-server
neuen User erstellen
sudo rabbitmqctl add_user "[Rabbit-User]"

Ersetzen sie [Rabbit-User] mit ihrem gewünschten Nutzernamen und drücken Sie Enter. Sie werden nun nach einem Passwort gefragt, geben Sie Ihr gewünschtes Passwort ein und merken Sie sich dieses gut.

STOMP Plugin aktivieren
sudo rabbitmq-plugins enable rabbitmq_stomp

GitHub Repository klonen

Gehen Sie in das Verzeichnis, indem Sie die Applikation installieren wollen und geben Sie folgenden Command ein:

git clone https://github.com/MUD-Game/HouseOfMUD.git .

Node Module installieren

Um die App auszuführen müssen zunächst noch einige Packages installiert werden, gehe Sie dafür in das gleiche Verzeichnis in dem Sie das Repository geklont haben und geben Sie ein:

npm run installall

Applikation Konfigurieren

Konfigurationsdateien erstellen

cp ./backend/supervisor/default-config.yml ./backend/supervisor/config.yml && cp ./backend/game/default-config.yml ./backend/game/config.yml && touch ./frontend/.env

Supervisor konfigurieren

Der Supervisor benötigt einige Informationen die sie in der ./backend/supervisor/config.yml mitgeben können. Dazu rufen Sie die Datei z. B. mit nano auf und editieren diese:

nano ./backend/supervisor/config.yml

Zum Testen können die meisten Werte so bleiben, lediglich die MongoDB- und Email Daten müssen angepasst werden.

Im folgenden ist die Konfigurationsdatei erklärt:

api:
  origin: <CORS-Origin des Frontends> (zum testen: http://localhost:3000)
  port: <Port der API>

hostLink:
  hostAuthKey: <Schlüssel-Wert damit sich andere Hosts zum Supervisor verbinden können>
  port: <Port des Host-links>

# In der Produktion sollten Key, Zertifikat und Chain angegeben werden und use auf true gesetzt werden um die Applikation sicher zu machen
tls: 
  use: false
  cert:
    key: /etc/letsencrypt/live/privkey.pem
    cert: /etc/letsencrypt/live/fullchain.pem
    ca: /etc/letsencrypt/live/chain.pem

auth:
  salt: <Salt-String fürs Passwort-Hashing>
  emailservice: <Nodemailer-Well-Known-Service-Name>
  emailadress: <Email-Adresse>
  emailsecret: <Email-Passwort>
  cookiehost: <Cookie-Host> (Ihr Domainname, oder localhost fürs Testen)
  rootpw: <Root-Passwort für das Admin-Panel auf der Webpage> 

mongodb:
  host: <Host der MongoDB> (127.0.0.1)
  port: <Port der MongoDB> (27017)
  user: <MongoDB User>
  password: <MongoDB Password>
  database: <Datenbank-Namen>

Wenn Sie alle Änderungen vorgenommen haben: Speichern Sie die Datei (Strg+O Enter, Strg+X).

Host Konfigurieren

Der Host benötigt nun Informationen wie er sich mit RabbitMQ und dem Supervisor verbindet. Um die Config anzupassen editieren Sie die Konfiguration in ./backend/game/config.yml:

nano ./backend/game/config.yml

Hierbei müssen Sie lediglich die Daten für RabbitMQ und MongoDB angeben und die nötigen Informationen für den supervisorLink eingeben die Sie in der Supervisor-Konfiguration vorgenommen haben:

name: <Name des Hosts, muss unique sein bei mehreren Hosts>

supervisorLink:
  url: <URL des Supervisors> (localhost>
  port: <Port des Supervisors> (selber port wie in der Supervisor Config api.port)
  tls: false (Wenn der Supervisor kein TLS benutzt, dann die Hosts auch nicht)
  authKey: <Host-Link Key wie in der Supervisor Config gesetzt api.hostAuthKey>

amqpAdapter:
  url: <URL zum RabbitMQ-Server> (localhost)
  port: <Port von RabbitMQ> (5672)
  user: <RabbitMQ-User> (Wie vorhin angelegt)
  password: <RabbitMQ-Passwort> (Wie vorhin angelegt)
  serverExchange: <Beliebiger String als Name für den ServerExchange>
  clientExchange: <Beliebiger String als Name für den ClientExchange>

# Müssen die gleichen Informationen wie in der Supervisor-Config sein
mongodb:
  host: <Host der MongoDB> (127.0.0.1)
  port: <Port der MongoDB> (27017)
  user: <MongoDB User>
  password: <MongoDB Password>
  database: <Datenbank-Namen>

Frontend .env editieren

In der .env-Datei müssen 2 Werte hinzugefügt werden um sich erfolgreich mit dem Backend zu verbinden:

nano ./frontend/.env

Füllen Sie die Datei wie folgt:

REACT_APP_HOM_API=<Connection-String für die Supervisor API>
REACT_APP_RABBITMQ=<Websocket Verbindung für RabbitMQ>

Beispiel: Sie verwenden kein TLS, Ihr hostname ist jeweils localhost und die Supervisor-API hat den port 43210

REACT_APP_HOM_API=http://localhost:43210
REACT_APP_RABBITMQ=ws://localhost:15673/ws

Falls TLS verwendet wird, hängen Sie jeweils ein s, hinten an das Protokoll (https, wss)

Applikation Starten

Konfigurationen Testen

Um lokal die Konfigurationen zu testen, einfach den Befehl:

npm start

eingeben und warten bis alles gestartet ist. Danach ist die Applikation im dev-mode unter Port 3000 erreichbar (localhost:3000)

Deployment

Frontend-Deployment

Mit npm start wird lediglich ein Entwicklungs-Build erstellt, für ein Production-Build muss zunächst einmal das Frontend gebuildet werden. Gehen Sie hierfür ins ./frontend/-Verzeichnis und führen Sie die folgende Befehle aus:

npm run build
npm install serve -g
serve -s build > logs.txt 2>&1 &

Supervisor-Deployment

Wechseln Sie in das ./backend/supervisor/-Verzeichnis und geben Sie folgenden Befehl ein:

npm start > logs.txt 2>&1 &

Host-Deployment

Falls die Applikation zu groß wird, kann diese durch mehrere Hosts in die horizontale Skalieren. Sie können folgenden Schritt auf beliebig vielen Servern ausführen und wenn Sie die ./backend/game/config.yml richtig Konfiguriert haben, verbinden sich die Hosts automatisch zum Supervisor sobald dieser am laufen ist. Gehen sie in das ./backend/game/-Verzeichnis und geben Sie folgenden Befehl ein:

npm start > logs.txt 2>&1 &