README.md aktualisiert
This commit is contained in:
153
README.md
153
README.md
@@ -1,33 +1,42 @@
|
|||||||
# GameDig Server Status API
|
# GameDig Server Status API
|
||||||
|
|
||||||
Pterodactyl Egg das Gameserver per [GameDig](https://github.com/gamedig/node-gamedig) abfragt
|
Ein Node.js-Dienst für Pterodactyl Panel, der Gameserver (DayZ, CS2, Rust, ARK u.v.m.) per [GameDig](https://github.com/gamedig/node-gamedig) abfragt und die Ergebnisse als JSON-REST-API bereitstellt.
|
||||||
und die Ergebnisse als JSON-REST-API bereitstellt.
|
|
||||||
|
|
||||||
## Unterstützte Spiele (Auswahl)
|
## Funktionen
|
||||||
|
|
||||||
| Spiel | `type` in config.json |
|
- Unterstützt über 320 Spieltypen via GameDig v4
|
||||||
|---|---|
|
- Konfigurierbares Abfrage-Intervall
|
||||||
| DayZ | `dayz` |
|
- Optionaler API-Key-Schutz
|
||||||
| Counter-Strike 2 | `cs2` |
|
- CORS-Header für Webintegration
|
||||||
| Rust | `rust` |
|
- Einfache Konfiguration per `config.json`
|
||||||
| ARK: Survival Evolved | `arkse` |
|
|
||||||
| + 320 weitere | [GameDig Games-Liste](https://github.com/gamedig/node-gamedig/blob/master/GAMES_LIST.md) |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Installation
|
## Dateien
|
||||||
|
|
||||||
1. `egg.json` im Pterodactyl-Panel importieren *(Admin → Nests → Import Egg)*
|
| Datei | Beschreibung |
|
||||||
2. Neuen Server anlegen und einen **Port** zuweisen
|
|---|---|
|
||||||
3. Server starten → Installationsscript lädt automatisch alle Dateien von diesem Repo
|
| `server.js` | Hauptskript – GameDig-Abfragen + HTTP-Server |
|
||||||
4. `config.json` im **Dateimanager** mit deinen Serveradressen anpassen
|
| `entrypoint.sh` | Startskript für Pterodactyl |
|
||||||
5. Server neu starten
|
| `package.json` | npm-Abhängigkeiten |
|
||||||
|
| `config.json` | Serverliste (muss angepasst werden) |
|
||||||
|
| `egg-gameserver-status-api.json` | Pterodactyl Egg |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Installation in Pterodactyl
|
||||||
|
|
||||||
|
1. Egg importieren: Admin → Nests → Import Egg → `egg-gameserver-status-api.json`
|
||||||
|
2. Neuen Server erstellen, Egg auswählen, Port zuweisen
|
||||||
|
3. Server installieren lassen
|
||||||
|
4. `config.json` im Dateimanager anpassen (siehe unten)
|
||||||
|
5. Server starten
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Konfiguration
|
## Konfiguration
|
||||||
|
|
||||||
### config.json (im Pterodactyl-Dateimanager bearbeiten)
|
### config.json
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@@ -35,14 +44,15 @@ und die Ergebnisse als JSON-REST-API bereitstellt.
|
|||||||
{
|
{
|
||||||
"label": "DayZ Main Server",
|
"label": "DayZ Main Server",
|
||||||
"type": "dayz",
|
"type": "dayz",
|
||||||
"host": "1.2.3.4",
|
"host": "192.168.1.10",
|
||||||
"port": 2302,
|
"port": 2302,
|
||||||
|
"queryPort": 2303,
|
||||||
"image": "https://example.com/images/dayz.jpg"
|
"image": "https://example.com/images/dayz.jpg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "CS2 Server",
|
"label": "CS2 Server",
|
||||||
"type": "cs2",
|
"type": "cs2",
|
||||||
"host": "1.2.3.4",
|
"host": "192.168.1.10",
|
||||||
"port": 27015,
|
"port": 27015,
|
||||||
"image": "https://example.com/images/cs2.jpg"
|
"image": "https://example.com/images/cs2.jpg"
|
||||||
}
|
}
|
||||||
@@ -50,99 +60,92 @@ und die Ergebnisse als JSON-REST-API bereitstellt.
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Egg-Variablen (im Pterodactyl-Panel konfigurierbar)
|
**Felder:**
|
||||||
|
|
||||||
|
| Feld | Pflicht | Beschreibung |
|
||||||
|
|---|---|---|
|
||||||
|
| `label` | ✓ | Anzeigename des Servers |
|
||||||
|
| `type` | ✓ | GameDig-Spieltyp (z.B. `dayz`, `cs2`, `rust`, `arkse`) |
|
||||||
|
| `host` | ✓ | IP-Adresse oder Hostname |
|
||||||
|
| `port` | ✓ | Spielport |
|
||||||
|
| `queryPort` | – | Optionaler Query-Port (wenn abweichend vom Spielport) |
|
||||||
|
| `image` | – | URL zum Spielbild für das Widget |
|
||||||
|
|
||||||
|
**Hinweis zu DayZ:** Der Query-Port ist standardmässig `Spielport + 1` (z.B. 2302 → 2303). Falls manuell geändert, `queryPort` explizit setzen.
|
||||||
|
|
||||||
|
**Spieltypen:** Vollständige Liste unter [GAMES_LIST.md](https://github.com/gamedig/node-gamedig/blob/master/GAMES_LIST.md)
|
||||||
|
|
||||||
|
### Umgebungsvariablen (Pterodactyl)
|
||||||
|
|
||||||
| Variable | Standard | Beschreibung |
|
| Variable | Standard | Beschreibung |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `QUERY_INTERVAL` | `60` | Abfrageintervall in Sekunden (min. 10) |
|
| `QUERY_INTERVAL` | `60` | Abfrage-Intervall in Sekunden (Minimum: 10) |
|
||||||
| `API_KEY` | *(leer)* | Optionaler API-Schlüssel – leer = offen |
|
| `API_KEY` | *(leer)* | API-Key zum Schutz der Endpunkte. Leer = kein Schutz |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## API-Endpunkte
|
## API-Endpunkte
|
||||||
|
|
||||||
### `GET /api/servers`
|
### GET /api/servers
|
||||||
|
|
||||||
|
Gibt den Status aller konfigurierten Server zurück.
|
||||||
|
|
||||||
**Ohne API-Key:**
|
**Ohne API-Key:**
|
||||||
```
|
```
|
||||||
GET http://dein-server:PORT/api/servers
|
GET http://<host>:<port>/api/servers
|
||||||
```
|
```
|
||||||
|
|
||||||
**Mit API-Key via Header:**
|
**Mit API-Key:**
|
||||||
```
|
```
|
||||||
GET http://dein-server:PORT/api/servers
|
GET http://<host>:<port>/api/servers?key=DEINKEY
|
||||||
X-API-Key: dein-key
|
# oder
|
||||||
|
GET http://<host>:<port>/api/servers
|
||||||
|
X-API-Key: DEINKEY
|
||||||
```
|
```
|
||||||
|
|
||||||
**Mit API-Key via URL-Parameter:**
|
**Antwort:**
|
||||||
```
|
|
||||||
GET http://dein-server:PORT/api/servers?key=dein-key
|
|
||||||
```
|
|
||||||
|
|
||||||
**Beispiel-Antwort:**
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"updated": "2026-02-26T14:32:00.000Z",
|
"updated": "2026-02-26T12:00:00.000Z",
|
||||||
"interval_seconds": 60,
|
"interval_seconds": 60,
|
||||||
"servers": [
|
"servers": [
|
||||||
{
|
|
||||||
"label": "DayZ Main Server",
|
|
||||||
"type": "dayz",
|
|
||||||
"address": "1.2.3.4:2302",
|
|
||||||
"image": "https://example.com/images/dayz.jpg",
|
|
||||||
"status": "online",
|
|
||||||
"players": 12,
|
|
||||||
"maxPlayers": 60,
|
|
||||||
"map": "ChernarusPlus",
|
|
||||||
"name": "My DayZ Server",
|
|
||||||
"ping": 42,
|
|
||||||
"connect": "1.2.3.4:2302"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"label": "CS2 Server",
|
"label": "CS2 Server",
|
||||||
"type": "cs2",
|
"type": "cs2",
|
||||||
"address": "1.2.3.4:27015",
|
"address": "192.168.1.10:27015",
|
||||||
"status": "offline",
|
"image": "https://example.com/images/cs2.jpg",
|
||||||
"error": "Connection timed out"
|
"status": "online",
|
||||||
|
"players": 8,
|
||||||
|
"maxPlayers": 16,
|
||||||
|
"map": "de_dust2",
|
||||||
|
"ping": 4
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### `GET /health`
|
### GET /health
|
||||||
|
|
||||||
Kein API-Key erforderlich. Geeignet für Uptime-Monitoring.
|
Statuscheck ohne Authentifizierung.
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{ "status": "ok", "updated": "2026-02-26T14:32:00.000Z" }
|
{
|
||||||
|
"status": "ok",
|
||||||
|
"uptime": 3600.5
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## DayZ Besonderheit
|
## Wichtiger Hinweis: NAT / Docker-Netzwerk
|
||||||
|
|
||||||
DayZ nutzt einen separaten Query-Port (`Game-Port + 24714`).
|
GameDig verwendet UDP. Wenn der Pterodactyl-Server und die abzufragenden Gameserver auf **demselben Host** laufen, kann ein Hairpin-NAT-Problem auftreten. In diesem Fall die **interne IP** statt der öffentlichen IP in `config.json` verwenden.
|
||||||
Falls die Abfrage fehlschlägt, den Query-Port direkt angeben:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{ "type": "dayz", "host": "1.2.3.4", "port": 27016 }
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Dateien im Container
|
## Technische Details
|
||||||
|
|
||||||
```
|
- **Runtime:** Node.js 20 (Alpine)
|
||||||
/home/container/
|
- **Docker Image:** `ghcr.io/pterodactyl/yolks:nodejs_20`
|
||||||
├── server.js ← Hauptscript (API + Query-Loop)
|
- **Modul-System:** ESM (`"type": "module"` in package.json)
|
||||||
├── entrypoint.sh ← Startscript
|
- **GameDig:** v4.x (CommonJS, via Default-Import)
|
||||||
├── config.json ← Serverkonfiguration (selbst bearbeiten)
|
|
||||||
├── package.json ← npm-Konfiguration
|
|
||||||
└── node_modules/ ← Abhängigkeiten (automatisch installiert)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Update
|
|
||||||
|
|
||||||
Um `server.js` oder `entrypoint.sh` zu aktualisieren, einfach die Dateien in
|
|
||||||
diesem Repo anpassen und den Server im Pterodactyl-Panel **neu installieren**
|
|
||||||
*(Server → Settings → Reinstall Server)*.
|
|
||||||
|
|||||||
Reference in New Issue
Block a user