Server Setup Guide für adaptor:ex
Dieses Tutorial hilft dir, wenn du adaptor:ex als Webservice nutzen möchtest der 24/7 läuft und von überall, wo es eine stabile Internetverbindung gibt, erreicht werden kann.
Wir erstellen ein Setup das auf jedem geläufigen linux Server funktionieren sollte. Auch wenn du ein abweichendes Setup hast, das aber noch Probleme bereitet, könntest du hier fündig werden.
Ziel ist es den adaptor:ex editor als auch alle web fähigen APIs über das Netz auf deiner eigenen Domain erreichbar zu machen und mit Nutzer Authentifizierung und let's encrypt Zertifikaten zu sichern.
Solltest du Probleme bei der Konfiguration haben schau unter Hilfe erhalten
Was du benötigst
Web Server
Du brauchst einen eigenen (virtuellen) Webserver den du per SSH bedienen kannst.
Das Betriebssystem des Servers sollte eine geläufige Linux Distribution sein (z.B. Ubuntu oder Debian). Die meisten Anweisungen in diesem Tutorial sollten aber auch auf anderen Betriebssystemen anwendbar sein.
Subdomains
Du benötigst einen Domain Namen für den du Subdomains erstellen und die du auf die IP deines Servers verweisen kannst.
Wie du neue Subdomains für deinen Domainnamen anlegen kannst hängt von deinem Domain provider ab.
Wir benötigen für den adaptor:ex Server und den adaptor:ex Client jeweils eine Subdomain.
Du kannst für einen von beiden (wir empfehlen für den Client) natürlich auch den Haupt Domain Namen verwenden, wenn du noch keine Webseite oder einen Webservice damit bedienst
Im folgenden Beispiel ist überall dort, wo du deine eigene Domain angeben musst für den adaptor:ex Server adaptor-server.myurl.org
und für den adaptor:ex Client adaptor.myurl.org
angegeben.
Wenn du zwei Domain Namen eingerichtet hast, verweise sie jeweils auf die IP deines Servers. Du kannst die IP auf einem Linux Server mit dem Befehl ifconfig
herausfinden.
Die IP auf die wir die Domains verweisen findest du in der mit ifconfig
angezeigten Liste für gewöhnlich unter eth0
.
Passe für deine Domainnamen den A-Record
Eintrag an indem du in beiden Fällen die IPv4 deines Servers dort angibst.
Wenn du keine eigene Domain hast, dann kannst du auch deine öffentliche IPv4 Adresse angeben. Beachte jedoch, dass du auf diese Weise nur unverschlüsselt mit deinem Server kommunizieren kannst. Zur Erhöhung der Sicherheit, empfehlen wir die Einrichtung einer Domain.
Den Server einrichten
TL;DR: bring mich zur docker-compose File
User und ssh-key einrichten
Bevor du anfangen kannst, adaptor:ex auf deinem Server zu installieren, solltest du zunächst einige Einstellungen vornehmen, die ein komfortables und sicheres Arbeiten mit ssh
auf dem Server erlauben.
Der Autor von nixCraft stellt eine verständliche und leicht zu folgende Anleitung bereit.
Folge den Anweisungen und logge dich auf deinen Server ein, um weiter zu machen.
ssh deinUsername@deineAddresse
Wenn du der oben genannten Anleitung nicht gefolgt bist, so ist dein username
root
Docker installieren
Installiere Docker auf deinem Server. Auf der Seite findest du die Installationsanweisungen für unterschiedliche Linux Distributionen. Für Ubunutu oder Debian ist die apt Installationsmethode die geläufigste.
Beachte auch die post-installations Anweisungen.
adaptor:ex installieren
Wenn du noch keine oder wenig Erfahrung hast, empfehlen wir dir zuerst das Minimalsetup zu machen, um sicher zu gehen, dass adaptor:ex
bei dir grundsätzlich funktioniert.
Das Minimalsetup eignet sich noch nicht dazu, in einer produktiven Umgebung genutzt zu werden, da wichtige Sicherheitsmerkmale fehlen.
Wenn du schon Erfahrung hast, dann kannst du direkt zum erweiterten Setup springen.
Minimalsetup
Logge dich via ssh
in deinen Server ein und erstelle deinen Projektordner:
mkdir -p deinProjektordner
und wechsle in das Verzeichnis:
cd deinProjektordner
dann lade die docker-compose.yml
Datei herunter:
curl -o docker-compose.yml https://gitlab.com/machina_ex/adaptor_ex/adaptor_ex_server/-/raw/main/docker-compose.yml
adaptor:ex besteht aus 3 Komponenten: einer mongo Datenabank, einem Server und einem Client. mongodb
dient zum Speichern der Daten. adaptor_server
ist für Verarbeitung der Daten zuständing und auf der Oberfläche des adaptor_client
manipulierst du die Daten.
Um deine adaptor:ex
Instanz lauffähig zu machen springe in das Kapitel Client Config und folge den Anweisungen. Danach kannst du adaptor:ex starten
Später kannst du im Minimalsetup noch berechtigte User hinzufügen.
Erweitertes Setup
Im zweiten Teil des Tutorials lernst du, wie du die Nutzer Authentifizierung anschaltest und das HTTPs Protokoll benutzt.
Um dem Tutorial folgen zu können, lade dir die erweiterte adaptor:ex docker-compose.yml Datei herunter.
curl -o docker-compose.yml https://gitlab.com/machina_ex/adaptor_ex/adaptor_ex_tutorials/-/raw/main/docs/tutorials/server-setup/assets/docker-compose.yml
Wir setzen zuerst die Client Config, daraufhin verändern wir die docker-compose.yml
und schauen auf die Server Optionen. Im letzten Schritt konfigurieren wir noch einen nginx Server zur sicheren Verbindung.
Client Config
Damit der adaptor:ex
Client die Server API ausfindig machen kann, brauchst du eine config Datei. Zur Erstellung dieser Datei gehe wie folgt vor:
Lade die Datei mit curl
direkt auf deinen Server herunter:
curl -o adaptor_client_config.json https://gitlab.com/machina_ex/adaptor_ex/adaptor_ex_tutorials/-/raw/main/docs/tutorials/server-setup/assets/adaptor_client_config.json
oder lege sie manuell an, indem du folgende Zeilen im text editor nano kopierst:
{
"API_URL": "https://adaptor-server.myurl.org/api",
"LOG_STORE": false,
"APP_TITLE": "adaptor:ex",
"LOG_LEVEL": "debug",
"COMMENT": "LOG_LEVEL is not yet implemented"
}
Danach ersetze die API_URL
mit der Adresse deines Servers. Gehe dabei wie folgt vor:
-
Minimalsetup: Setze deine Domain
http://adaptor-server.myurl.org:8081/api
oder IPv4 Addressehttp://123.45.67.89:8081/api
ein. Achte darauf den Standardport des Servers8081
zusätzlich zu deklarieren. Für das Minimalsetup ist dies der einzige Konfigurationsschritt. Du kannst adaptor:ex starten -
Erweitertes Setup:
https://adaptor-server.myurl.org/api
. Der Standardport ist bei diesem Setup ausgelassen. Er wird direkt in derdocker-compose.yml
Datei deklariert. Damit die Verbindung überhttps
gesichert werden kann,brauchst du eine eigene Domain. Wenn du die erweitertedocker-compose.yml
Datei schon herunter geladen hast, fahre im nächsten Kapitel fort. Ansonsten lade sie dir im erweiterten Setup herunter.
Docker Compose File anpassen
Die Server Konfiguration in der neuen docker-compose.yml
sieht wie folgt aus:
adaptor_server:
image: registry.gitlab.com/machina_ex/adaptor_ex/adaptor_ex_server
# build: adaptor_ex_server/ # use this to build local git tree
restart: always
depends_on:
- mongodb
tty: true
stdin_open: true
#entrypoint: [ "node", "index.js", "--headless"] # use this if you don't need mongodb
entrypoint: [ "node", "index.js", "--headless", "--url", "https://adaptor-server.myurl.org", "--auth", "basic" , "-d", "mongodb", "-m","mongodb://mongodb:27017/?replicaSet=adaptor-repl"]
volumes:
- ./adaptor_data:/usr/src/app/adaptorex
environment:
- VIRTUAL_HOST=adaptor-server.myurl.org
- LETSENCRYPT_HOST=adaptor-server.myurl.org
- LETSENCRYPT_EMAIL=your@email.de
- VIRTUAL_PORT=8081
networks:
- proxy-tier
- mongonetwork
Die Client Konfiguration sieht so aus:
adaptor_client:
image: registry.gitlab.com/machina_ex/adaptor_ex/adaptor_ex_client
# build: adaptor_ex_client/
restart: always
volumes:
- ./adaptor_client_config.json:/public/config.json
environment:
- VIRTUAL_HOST=adaptor.myurl.org
- LETSENCRYPT_HOST=adaptor.myurl.org
- LETSENCRYPT_EMAIL=your@email.de
networks:
- proxy-tier
URL und E-Mail eintragen
In beiden Konfigurationen musst du deine eigenen Daten eintragen.
-
Ersetze
adaptor-server.myurl.org
durch deine eigene (sub-) Domain die du für den Server vorgesehen hast an 3 Stellen unterentrypoint
undenvoirment
. -
Ersetze
adaptor.myurl.org
durch deine eigene (sub-) Domain die du für den Client vorgesehen hast an 2 Stellen unterenvoirment
. -
Ersetze die E-mail Adresse
your@email.de
mit deiner eigenen Adresse an 2 Stellen unterenvoirment
.
Sichere Verbindung
In der neuen docker-compose.yml
sind 2 neue Services dazu gekommen: proxy
und letsencrypt-companion
.
Der proxy
Service verteilt HTTP (port 80) und HTTPS (port 443) Anfragen an deinen Server auf die verschiedenen Docker Prozesse. Er entscheided anhand der Subdomain an welchen Prozess er die Anfrage weiterleitet.
Das Lets encrypt Projekt stellt kostenlose SSL Zertifikate aus. Sie werden zur sicheren Verbindung zwischen zwei Geräten benutzt. Der letsencrypt-companion
konfiguriert den proxy
Server automatisiert.
Damit die Verteilung reibungslos funktioniert, musst du einige Daten verändern.
Für den Proxy Docker Container, der das verteilen eingehender Requests auf die anderen Container übernimmt, musst du noch die folgende Docker Datei anlegen.
Erstelle einen Ordner mit dem Namen proxy
:
und anschließend das Dockerfile für den proxy Container:
Füge diesen Inhalt ein:
Zudem müssen wir noch die Datei uploadsize.conf
erstellen:
und mit folgendem Inhalt füllen:
adaptor:ex starten
Deine Verzeichnisstruktur soll bei dem Start folgendermaßen aussehen:
╭< ~/deinProjektordner
╰─> pwd # print working directory
/home/ada/deinProjektordner
╭─< ~/deinProjektordner
╰─> ls # list directory
adaptor_client_config.json docker-compose.yml proxy # proxy nur, bei https
Um die Docker Container zu starten führe folgende Befehle in deinem Projektverzeichnis aus.
Lade die aktuellen Docker images herunter.
Komponiere die Docker Container
Zeige anschließend die Container an um zu überprüfen ob alles geklappt hat
Du solltest die folgende Ausgabe erhalten
Berechtigte User hinzufügen
Auch wenn du keine eigene Domain hast, kannst du die Authentifizierung im Minimalsetup einschalten. Wir raten von der produktiven Nutzung ohne verschlüsselte Kommunikation allerdings ab. Verbinde mich sicher
Die Server Option "--auth", "basic"
muss in der docker-compose.yml Datei unter entrypoint
angegeben sein.
Wenn du auf einen Nutzer Login verzichten willst, entferne ggf. die Optionen
"--auth", "basic"
für denadaptor-server
in der docker-compose.yml Datei unterentrypoint
und starte adaptor:ex neu mitdocker compose restart
. Du kannst dann direkt direkt auf den adaptor:ex editor zugreifen.
Um User hinzuzufügen, müssen sie in der config.json
File des Servers deklariert werden. Wie du unten sehen kannst gehört die Datei root
, weshalb du ein sudo
voranstellen musst, um die Datei zu bearbeiten.
╭─< ~/deinProjektordner
╰─> ls -la adaptor_data/
insgesamt 8
drwxr-xr-x 2 root root 4096 Nov 20 12:16 .
drwxrwxr-x 3 ada ada 4096 Nov 20 12:15 ..
-rw-r--r-- 1 root root 0 Nov 20 12:16 config.json #gehört Root!
╭─< ~/deinProjektordner
╰─> sudo nano adaptor_data/config.json
Der
adaptor_data
Ordner wird erst erstellt, nachdem das Programm das erste Mal gestartet wurde.
Füge einen users
Eintrag vor der letzten }
hinzu:
"whitelist": [],
"users": [
{
"login": "ada",
"password": "secure!?&"
},
{
"login": "grace",
"password": "secure123"
}
]
}
Damit die Änderungen wirksam werden, muss adapptor:ex im Anschluss neu gestartet werden:
Wenn du mehr über die Config Optionen des adaptor:ex Server lernen möchtest, schau im Quellcode unter: https://gitlab.com/machina_ex/adaptor_ex/adaptor_ex_server#configuration
Den Editor öffnen
Gib deine URL in die Address Zeile deines Browsers ein, um auf deinen Client zuzugreifen. Achte dabei auf folgende Besonderheiten:
- Minimalsetup:
http://adaptor.my-url.org:8080
oderhttp://123.45.67.89:8080
- Hier musst du den Standardport des Clients
8080
mit angeben.
- Hier musst du den Standardport des Clients
- Erweitertes Setup:
https://adaptor.my-url.org
- Hier hast du die Portweiterleitung im
proxy
deklariert.
- Hier hast du die Portweiterleitung im
Falls die Authentifizierung aktiviert ist logge dich mit deinen Userdaten ein.
Erstelle ein neues Game und nutze adaptor:ex
, um interaktive Theatergames zu gestalten, oder lerne das erweiterte Setup kennen.
Solltest du Verbindungsprobleme zwischen Client und Server haben, oder andere Probleme erfahren, schau im Bereich Das Setup überwachen nach.
Das Setup überwachen
Hier ein paar Befehle die für das Debugging und die Wartung deines Setup von Nutzen sein können.
Generell gilt: Wenn du im Terminal in deinem Projektverzeichnis bist, kannst du deine Container auch über docker compose […]
überwachen.
Dazu einfach: cd deinProjektverzeichnis
Docker Container auflisten
Um zu überprüfen welche Docker Container gerade laufen nutze den Befehl:
docker ps
zeigt alle Container, die auf deinem System laufen
oder
docker compose ps
zeigt nur die Container, die du über compose gestartet hast.
Hier siehst du auch unter welchem Namen du mit den Containern interagieren kannst.
Docker Container neu starten
Starte einen Docker Container neu mit restart
docker restart name_of_docker_container
Starte alle Docker Container aus der Compose Datei neu:
docker compose restart
Stoppe alle Container und entferne alle Ressourcen, die durch docker compose up
initialisiert wurden.
docker compose down
Docker Container Konsole öffnen
Öffne die Console innerhalb eines Docker Containers (z.B. deinem adaptor:ex Server) mit attach
docker attach name_of_docker_container
Funktioniert nicht beim Client.
Browser Konsole öffnen
Bei Verbindungsproblemen drücke strg + shift + i
(Chrome und Firefox) um die Entwicklerkonsole zu öffnen.
IP der Mongodatenbank anzeigen
Zeige mit inspect
die IP unter der die MongoDB Datenbank per ssh Tunnel erreichbar ist mit folgendem Befehl an:
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' machinacompose_mongodb-1
Passe auch hier den Namen des Containers ggf. an.
Docker Container Log Datei anzeigen
Zeige mit logs
die Log Datei eines Docker Containers an
docker logs name_of_docker_container
Bei Problemen jeglicher Art, insbesondere bei Verbindungsproblemen ist es ratsam die Logs auf Errors hin zu prüfen:
docker compose logs | grep -i error
-i
bedeutet in diesem Fall case-insensitive
Updates durchführen
Um die docker container images auf dem neuesten Stand zu halten führe den docker pull Befehl aus.
docker compose pull
Unter news werden aktuelle Updates veröffentlicht
Hilfe erhalten
Wenn du nicht weiter kommst, kannst du auf unserem Discord Server Hilfe erhalten.
Ansonsten kannst du auch in der adaptor:ex Server Readme schauen, dort gibt es viele hilfreiche Infos: gitlab.com/machina_ex/adaptor_ex/adaptor_ex_server