-
Notifications
You must be signed in to change notification settings - Fork 3
Installation Guide
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.
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 (v11+)
- npm (v6.14.4+)
- MongoDB
- RabbitMQ + STOMP Plugin
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 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)
$ 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
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
sudo apt-get update
sudo apt-get install -y mongodb-org
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
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
sudo apt install rabbitmq-server
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.
sudo rabbitmq-plugins enable rabbitmq_stomp
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 .
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
cp ./backend/supervisor/default-config.yml ./backend/supervisor/config.yml && cp ./backend/game/default-config.yml ./backend/game/config.yml && touch ./frontend/.env
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).
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>
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
)
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)
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 &
Wechseln Sie in das ./backend/supervisor/
-Verzeichnis und geben Sie folgenden Befehl ein:
npm start > logs.txt 2>&1 &
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 &