Wiki: Anleitung für mehrere Docker-Hosts
1 parent
01a85964a0
commit
4ffea5bd71
2 files changed
+116
No files matched your search
+1
@@ -13,6 +13,7 @@ Diese Seiten erklären den Betrieb und die Bedienung der Match-Verwaltung für C
|
||||
- [Turnierregeln](Turnierregeln) – Serverwerte nach FACEIT- und ESL-Richtwerten
|
||||
- [Admin-Bereich und Rollback](Admin-Bereich-und-Rollback) – Verwaltung aller Matches, Rundenrücksprung
|
||||
- [Docker-Betrieb](Docker-Betrieb) – CS2-Server als Container auf einem Docker-Host
|
||||
- [Mehrere Docker-Hosts](Mehrere-Docker-Hosts) – Gameserver auf mehrere Rechner verteilen
|
||||
- [Reverse-Proxy](Reverse-Proxy) – Webseite per HTTPS unter eigener Domain
|
||||
|
||||
## Stand
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
# Mehrere Docker-Hosts einrichten
|
||||
|
||||
Mit mehreren Docker-Hosts verteilt CS2 Mapveto die Gameserver auf mehrere Rechner. Jedes neue Match startet auf dem Host mit den meisten freien Plätzen. Der Host bleibt im Match gespeichert.
|
||||
|
||||
Diese Anleitung geht davon aus, dass alle Rechner im LAN stehen und du sie per Windows-PC (mit Git Bash) erreichst.
|
||||
|
||||
## 1. Voraussetzungen
|
||||
|
||||
- Auf jedem Rechner läuft Linux mit Docker (Installation: https://docs.docker.com/engine/install/).
|
||||
- Auf jedem Rechner gibt es ein Benutzerkonto, das in der Gruppe `docker` ist. Test: `docker ps` ohne `sudo` funktioniert.
|
||||
- Auf jedem Rechner sind rund 90 GB freier Platz unter `/var/lib/docker`.
|
||||
- Die Ports 27100 bis 27139 (TCP und UDP) sind auf jedem Rechner frei.
|
||||
|
||||
## 2. SSH-Schlüssel anlegen
|
||||
|
||||
Auf dem Windows-PC, in Git Bash:
|
||||
|
||||
```bash
|
||||
ssh-keygen -t ed25519 -f ~/.ssh/cs2_docker
|
||||
```
|
||||
|
||||
Den öffentlichen Schlüssel auf jeden Rechner kopieren (nach jeder Abfrage das Passwort des Rechners eingeben):
|
||||
|
||||
```bash
|
||||
ssh-copy-id -i ~/.ssh/cs2_docker.pub cs2@192.168.178.111
|
||||
ssh-copy-id -i ~/.ssh/cs2_docker.pub cs2@192.168.178.112
|
||||
```
|
||||
|
||||
Danach muss die Anmeldung ohne Passwort funktionieren:
|
||||
|
||||
```bash
|
||||
ssh -i ~/.ssh/cs2_docker cs2@192.168.178.111 "docker ps"
|
||||
```
|
||||
|
||||
Die Ausgabe ist eine leere Liste oder eine Tabelle, aber keine Passwortabfrage und keine Fehlermeldung.
|
||||
|
||||
Tipp: Damit du die Option `-i` nicht jedes Mal angeben musst, trage die Rechner in `~/.ssh/config` ein:
|
||||
|
||||
```
|
||||
Host cs2-host1
|
||||
HostName 192.168.178.111
|
||||
User cs2
|
||||
IdentityFile ~/.ssh/cs2_docker
|
||||
|
||||
Host cs2-host2
|
||||
HostName 192.168.178.112
|
||||
User cs2
|
||||
IdentityFile ~/.ssh/cs2_docker
|
||||
```
|
||||
|
||||
Dann heißt das Ziel `cs2-host1` statt `cs2@192.168.178.111`.
|
||||
|
||||
## 3. Hosts einrichten
|
||||
|
||||
Im Projektordner das Einrichtungsskript für jeden Host starten:
|
||||
|
||||
```bash
|
||||
bash deploy/docker-host-einrichten.sh cs2-host1
|
||||
bash deploy/docker-host-einrichten.sh cs2-host2
|
||||
```
|
||||
|
||||
Das Skript:
|
||||
1. prüft die Verbindung,
|
||||
2. prüft Docker und zeigt den freien Platz,
|
||||
3. legt das Volume `cs2-mapveto-gamefiles` an,
|
||||
4. lädt das Image `joedwards32/cs2:latest`.
|
||||
|
||||
Am Ende gibt es für jeden Host einen fertigen Eintrag für die `.env`.
|
||||
|
||||
## 4. Die Hosts in der `.env` eintragen
|
||||
|
||||
In der `.env` im Projektordner eine Zeile mit einer JSON-Liste schreiben. Alle Einträge auf eine Zeile:
|
||||
|
||||
```
|
||||
CS2_DOCKER_HOSTS=[{"name":"host1","dockerHost":"ssh://cs2-host1","publicHost":"192.168.178.111","portStart":27100,"portEnd":27139},{"name":"host2","dockerHost":"ssh://cs2-host2","publicHost":"192.168.178.112","portStart":27100,"portEnd":27139}]
|
||||
```
|
||||
|
||||
Bedeutung der Felder:
|
||||
|
||||
| Feld | Bedeutung |
|
||||
|---|---|
|
||||
| `name` | Eindeutiger Name des Hosts, z. B. `host1` |
|
||||
| `dockerHost` | Ziel für Docker per SSH, `ssh://…` (genau wie im SSH-Eintrag) |
|
||||
| `publicHost` | Adresse, unter der Spieler den Host erreichen |
|
||||
| `portStart`, `portEnd` | Portbereich für Matches auf diesem Host |
|
||||
| `rconHost` | optional, wenn das Backend eine andere Adresse braucht |
|
||||
| `volume` | optional, Standard ist `cs2-mapveto-gamefiles` |
|
||||
|
||||
Das Backend braucht die Adressen `publicHost` und `rconHost` in beide Richtungen: Spieler müssen den Host erreichen, und das Backend muss die RCON-Ports erreichen.
|
||||
|
||||
## 5. Anwendung neu starten
|
||||
|
||||
Die Anwendung liest die `.env` nur beim Start. Also: Anwendung stoppen und wieder starten (`npm start` bzw. den Container neu starten).
|
||||
|
||||
## 6. Prüfen
|
||||
|
||||
1. Im Admin-Bereich (`/admin`) erscheint oben die Karte **Docker-Hosts**. Pro Host stehen dort der Name, die Adresse, die belegten und freien Plätze und die laufenden Matches.
|
||||
2. Ein Testmatch anlegen, Veto spielen. Die Karte zeigt danach einen Gameserver beim Host mit den meisten freien Plätzen.
|
||||
3. Im Serverpanel des Matches steht die Adresse des Hosts (`Server <Host>:<Port>`).
|
||||
|
||||
## Typische Probleme
|
||||
|
||||
| Problem | Lösung |
|
||||
|---|---|
|
||||
| `Permission denied (publickey)` | Der Schlüssel fehlt auf dem Rechner. `ssh-copy-id` erneut ausführen. |
|
||||
| `docker: permission denied` | Der Benutzer ist nicht in der Gruppe `docker`. Auf dem Rechner: `sudo usermod -aG docker cs2`, danach neu anmelden. |
|
||||
| Das Skript meldet wenig freien Platz | Speicher freimachen oder `/var/lib/docker` auf eine größere Platte verlegen. CS2 braucht rund 90 GB. |
|
||||
| `Kein Docker-Host mit freien Ports` | Alle Hosts sind voll, oder die Ports sind belegt. Die Karte „Docker-Hosts“ zeigt, wo es hakt. |
|
||||
| Ein Host fehlt in der Karte | Der Eintrag in `CS2_DOCKER_HOSTS` ist fehlerhaft. Die Anwendung meldet beim Start den Fehler, z. B. `CS2_DOCKER_HOSTS ist kein gültiges JSON`. |
|
||||
| Der erste Start dauert sehr lange | Das ist normal. Der Host lädt die CS2-Spieldateien (60 bis 90 GB). Spätere Starts sind schneller. |
|
||||
| Ein Match hängt auf „Server wird angefordert“ | Die Startzeit läuft bis zu 20 Minuten. Danach „Server neu starten / wiederholen“ im Admin-Bereich. |
|
||||
|
||||
## Ein Host fällt aus
|
||||
|
||||
Ein laufendes Match lässt sich nicht automatisch auf einen anderen Host verschieben. Der Admin beendet den Server über **Server stoppen** und startet ihn mit **Server neu starten / wiederholen** neu. Welcher Host dann gewählt wird, hängt von den freien Plätzen ab. Ist der Ausfall dauerhaft, den Host aus `CS2_DOCKER_HOSTS` entfernen und die Anwendung neu starten.
|
||||
Reference in new issue
Block a user