Docker-Adapter: LAN-Modus ohne GSLT, Container starten nacheinander
Ohne CS2_GSLT starten Match-Container mit CS2_LAN=1. Neue Container warten, bis der vorige seinen SteamCMD-Update-Check abgeschlossen hat, damit nie zwei gleichzeitig das gemeinsame Volume aktualisieren. Anleitung: Docker per SSH (DOCKER_HOST), eindeutige Passwort-Beispiele mit Warnung vor Sonderzeichen (Startskript nutzt eval). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
8996294d7e
commit
59d6dc7177
5 files changed
+178
-22
No files matched your search
+48
-12
@@ -83,12 +83,16 @@ volumes:
|
||||
|
||||
5. Darunter bei **Environment variables** auf *+ Add an environment variable* klicken und anlegen:
|
||||
|
||||
| Name | Wert |
|
||||
|---|---|
|
||||
| `SRCDS_TOKEN` | dein GSLT |
|
||||
| `CS2_RCONPW` | langes, zufälliges Passwort (nur Buchstaben und Ziffern) |
|
||||
| `CS2_PW` | beliebiges Serverpasswort |
|
||||
| `TV_PW` | Passwort für CSTV |
|
||||
| Name | Beispielwert | Bedeutung |
|
||||
|---|---|---|
|
||||
| `SRCDS_TOKEN` | `A1B2C3D4E5F6…` | dein GSLT; leer lassen für LAN-Modus |
|
||||
| `CS2_RCONPW` | `Kx7fQ2mPz9Lw4tNb` | RCON-Passwort, lang und zufällig |
|
||||
| `CS2_PW` | `Lan2026` | Serverpasswort |
|
||||
| `TV_PW` | `Cstv2026` | Passwort für CSTV |
|
||||
|
||||
> **Nur Buchstaben und Ziffern verwenden.** Das Startskript des Images setzt die Werte ungeschützt in einen
|
||||
> Shell-Befehl ein. Leerzeichen, Klammern, Kommas, Anführungszeichen oder `$` führen dazu, dass der Server
|
||||
> nicht startet (`syntax error near unexpected token`) und Docker ihn endlos neu startet.
|
||||
|
||||
So stehen die Zugangsdaten nicht im Stack-Text selbst.
|
||||
|
||||
@@ -208,19 +212,51 @@ CS2_STATIC_SERVERS=192.168.178.50:27015:PASSWORT:27020,192.168.178.50:27025:PASS
|
||||
|
||||
Statt dauerhaft laufender Server kann CS2 Mapveto pro Match einen eigenen Container starten und danach wieder entfernen (`SERVER_ADAPTER=docker`). Damit auch dabei nichts neu geladen wird, nutzt der Adapter das Volume **`cs2-mapveto-gamefiles`**. Das ist genau das Volume, das der Stack oben angelegt und befüllt hat.
|
||||
|
||||
### 1. Docker-Zugriff von CS2 Mapveto auf den Docker-Host
|
||||
|
||||
Läuft CS2 Mapveto auf einem anderen Rechner als Docker (z. B. Windows-PC → Docker-Host im LAN), steuert es Docker per SSH:
|
||||
|
||||
1. Auf dem Docker-Host den Benutzer in die Docker-Gruppe aufnehmen (einmalig, danach neu anmelden):
|
||||
```bash
|
||||
sudo usermod -aG docker server
|
||||
```
|
||||
2. Auf dem Rechner mit CS2 Mapveto einen SSH-Eintrag anlegen (Windows: `C:\Users\<Name>\.ssh\config`) und die Anmeldung per Schlüssel einrichten:
|
||||
```
|
||||
Host cs2docker
|
||||
HostName 192.168.178.111
|
||||
User server
|
||||
```
|
||||
3. Testen, **auf dem Rechner mit CS2 Mapveto**, nicht auf dem Docker-Host:
|
||||
```powershell
|
||||
docker -H ssh://cs2docker ps
|
||||
```
|
||||
|
||||
### 2. `.env` von CS2 Mapveto
|
||||
|
||||
```env
|
||||
SERVER_ADAPTER=docker
|
||||
CS2_GSLT=dein_gslt
|
||||
CS2_PUBLIC_HOST=192.168.178.50
|
||||
DOCKER_HOST=ssh://cs2docker
|
||||
# leer = LAN-Modus (sv_lan 1), sonst ein Game Server Login Token
|
||||
CS2_GSLT=
|
||||
# Adresse, unter der Spieler den Docker-Host erreichen
|
||||
CS2_PUBLIC_HOST=192.168.178.111
|
||||
# Adresse, unter der CS2 Mapveto RCON erreicht – bei getrennten Rechnern ebenfalls der Docker-Host
|
||||
CS2_RCON_HOST=192.168.178.111
|
||||
CS2_DOCKER_VOLUME=cs2-mapveto-gamefiles
|
||||
CS2_DOCKER_IMAGE=joedwards32/cs2:latest
|
||||
# zwei Ports pro Match (Spiel TCP+UDP, CSTV UDP), in der Firewall freigeben
|
||||
CS2_PORT_RANGE_START=27100
|
||||
CS2_PORT_RANGE_END=27139
|
||||
# Container müssen CS2 Mapveto für die Live-Ergebnisse erreichen
|
||||
LOG_RECEIVER_URL=http://192.168.178.31:3000
|
||||
```
|
||||
|
||||
Wichtig dabei:
|
||||
|
||||
- **Den Stack-Server vorher stoppen**, damit nicht zwei Container gleichzeitig dasselbe Volume aktualisieren. Der Stack dient dann nur zum einmaligen Befüllen und für Updates.
|
||||
- Für gleichzeitige Matches gilt dasselbe Problem: Alle Match-Container teilen sich das Volume und prüfen beim Start auf Updates. Das ist unkritisch, solange kein Valve-Update ansteht. Kurz nach einem CS2-Patch nur **ein** Match auf einmal starten.
|
||||
- Das Backend braucht Zugriff auf den Docker-Daemon (es läuft auf demselben Host bzw. hat `/var/run/docker.sock`).
|
||||
- **Den Stack-Server stoppen**, sobald die Spieldateien geladen sind. Der Stack dient nur zum einmaligen Befüllen und für Updates. Das Volume bleibt beim Stoppen und Löschen des Stacks erhalten.
|
||||
- **Starts laufen nacheinander:** Jeder Match-Container prüft beim Start per SteamCMD auf Updates. Damit nie zwei Container gleichzeitig das Volume aktualisieren, startet CS2 Mapveto den nächsten erst, wenn der vorige seinen Update-Check abgeschlossen hat. Nach einem CS2-Patch dauert der erste Start dadurch länger, die übrigen warten kurz.
|
||||
- **Ein GSLT gilt nur für einen laufenden Server.** Ohne Token (LAN-Modus) gibt es diese Grenze nicht.
|
||||
- **Hardware:** Ein CS2-Server braucht etwa 1–2 CPU-Kerne und 2–3 GB RAM. 6 Kerne und 16 GB reichen für etwa 2–3 gleichzeitige Matches.
|
||||
|
||||
Für eine LAN-Party mit festen Servern ist der **Static-Adapter mit Stack aus Schritt 1** die einfachere und robustere Wahl.
|
||||
|
||||
@@ -228,7 +264,7 @@ Für eine LAN-Party mit festen Servern ist der **Static-Adapter mit Stack aus Sc
|
||||
|
||||
## LAN-Betrieb ohne GSLT
|
||||
|
||||
Für reine LAN-Veranstaltungen kann `CS2_LAN=1` gesetzt werden (`sv_lan 1`). Der Server ist dann nur im lokalen Netz erreichbar und braucht kein Token. Spieler müssen im selben Netz sein. Für Zuschauer über das Internet oder externe Teams ist ein GSLT nötig.
|
||||
Für reine LAN-Veranstaltungen kann `CS2_LAN=1` gesetzt werden (`sv_lan 1`). Beim Docker-Adapter genügt es, `CS2_GSLT` leer zu lassen. Der Server ist dann nur im lokalen Netz erreichbar und braucht kein Token. Spieler müssen im selben Netz sein. Für Zuschauer über das Internet oder externe Teams ist ein GSLT nötig.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in new issue
Block a user