Files
GSM/docs/gameserver-hinzufuegen.md
Alexander Zielonka ff3fa0752e palworld added
2026-01-07 12:35:23 +01:00

355 lines
8.6 KiB
Markdown

# Neuen Gameserver zum GSM hinzufügen
Diese Anleitung beschreibt alle Schritte, um einen neuen Gameserver in das Gameserver Management (GSM) System zu integrieren.
## Voraussetzungen
- Proxmox LXC Container oder VM für den Gameserver
- SSH-Zugang vom GSM Server (192.168.2.30) zum neuen Server
- Freie IP-Adresse im Netzwerk (192.168.2.x)
## Schritt 1: Server aufsetzen
### 1.1 LXC Container / VM erstellen
Auf Proxmox (192.168.2.20) einen neuen Container oder VM erstellen:
- **LXC** für leichtgewichtige Server (Factorio, Palworld, etc.)
- **VM** für Server die spezielle Kernel-Features brauchen (Minecraft mit hohem RAM)
Empfohlene Ressourcen je nach Spiel:
| Spiel | CPU Cores | RAM | Speicher |
|-------|-----------|-----|----------|
| Factorio | 2 | 2 GB | 20 GB |
| Minecraft (Modded) | 4-6 | 8-16 GB | 50 GB |
| Palworld | 4 | 16 GB | 30 GB |
| Project Zomboid | 4 | 8 GB | 30 GB |
| V Rising | 2 | 4 GB | 20 GB |
### 1.2 Basis-Setup
```bash
# System updaten
apt update && apt upgrade -y
# Grundlegende Pakete
apt install -y curl wget screen htop
```
### 1.3 SteamCMD installieren (für Steam-Spiele)
```bash
# 32-bit Bibliotheken
apt install -y lib32gcc-s1
# Steam User erstellen
useradd -m -s /bin/bash steam
# SteamCMD installieren
su - steam
mkdir steamcmd && cd steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz
```
### 1.4 Dedicated Server installieren
```bash
# Als steam User
./steamcmd.sh +force_install_dir /opt/<spielname> +login anonymous +app_update <APP_ID> validate +quit
```
Steam App IDs:
- Palworld: `2394010`
- Project Zomboid: `380870`
- V Rising: `1829350`
- Factorio: `427520` (oder manuell von factorio.com)
## Schritt 2: Systemd Service erstellen
Erstelle `/etc/systemd/system/<spielname>.service`:
```ini
[Unit]
Description=<Spielname> Dedicated Server
After=network.target
[Service]
Type=simple
User=steam
Group=steam
WorkingDirectory=/opt/<spielname>
ExecStart=/opt/<spielname>/start.sh
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
```
Aktivieren:
```bash
systemctl daemon-reload
systemctl enable <spielname>
```
## Schritt 3: Node Exporter installieren
Für Metriken im GSM Dashboard:
```bash
apt install -y prometheus-node-exporter
systemctl enable prometheus-node-exporter
systemctl start prometheus-node-exporter
```
Prüfen ob Port 9100 erreichbar ist:
```bash
curl http://localhost:9100/metrics | head
```
## Schritt 4: SSH-Zugang einrichten
Auf dem GSM Server (192.168.2.30):
```bash
# Public Key kopieren
ssh-copy-id -i /root/.ssh/id_ed25519.pub root@192.168.2.XX
```
Testen:
```bash
ssh root@192.168.2.XX "hostname"
```
## Schritt 5: DNS Eintrag erstellen
### 5.1 Cloudflare DDNS Container aktualisieren
Auf dem Raspberry Pi (192.168.2.10):
```bash
cd /home/alex
nano docker-compose.yml
```
Neue Domain zur `CF_DOMAINS` Umgebungsvariable hinzufügen:
```yaml
environment:
- CF_DOMAINS=gsm.zeasy.dev,factorio.zeasy.dev,<neuer-name>.zeasy.dev
```
Container neu starten:
```bash
docker-compose up -d cloudflare-ddns
```
### 5.2 Port Forwarding im Router
Benötigte Ports im Router freigeben:
| Spiel | Ports |
|-------|-------|
| Palworld | 8211/UDP, 27015/UDP |
| Minecraft | 25565/TCP |
| Factorio | 34197/UDP |
| Project Zomboid | 16261/UDP, 16262/UDP |
| V Rising | 9876/UDP, 9877/UDP |
## Schritt 6: GSM Backend konfigurieren
### 6.1 config.json erweitern
Auf dem GSM Server `/opt/gameserver-monitor/backend/config.json`:
```json
{
"id": "<spielname>",
"name": "<Anzeigename>",
"host": "192.168.2.XX",
"type": "<spielname>",
"runtime": "systemd",
"serviceName": "<service-name>",
"rconPort": XXXXX,
"rconPassword": "<passwort>",
"workDir": "/opt/<spielname>",
"configPath": "/pfad/zur/config"
}
```
### 6.2 SSH-Funktionen hinzufügen (optional)
Falls Config-Editor benötigt wird, in `backend/services/ssh.js`:
```javascript
const <SPIELNAME>_CONFIG_PATH = "/pfad/zu/configs";
const <SPIELNAME>_ALLOWED_FILES = ["config1.ini", "config2.ini"];
export async function list<Spielname>Configs(server) {
// Implementation
}
export async function read<Spielname>Config(server, filename) {
// Implementation
}
export async function write<Spielname>Config(server, filename, content) {
// Implementation
}
```
### 6.3 Routes hinzufügen (optional)
In `backend/routes/servers.js` neue Endpoints für Config-Editor.
### 6.4 Backend neustarten
```bash
pm2 restart gameserver-backend
pm2 logs gameserver-backend --lines 20
```
## Schritt 7: Prometheus konfigurieren
Auf dem GSM Server `/etc/prometheus/prometheus.yml`:
```yaml
- job_name: "<spielname>"
static_configs:
- targets: ["192.168.2.XX:9100"]
```
Prometheus neustarten:
```bash
systemctl restart prometheus
```
## Schritt 8: Frontend erweitern
### 8.1 Server-Info in ServerCard.jsx
```javascript
const serverInfo = {
// ...bestehende Server
<spielname>: {
address: '<spielname>.zeasy.dev:<port>',
logo: '/<spielname>.png',
links: [
{ label: 'Steam', url: 'https://store.steampowered.com/app/XXXXXX' }
]
}
}
// In getServerInfo():
if (name.includes('<spielname>')) return serverInfo.<spielname>
```
### 8.2 Logo in ServerDetail.jsx
```javascript
if (name.includes("<spielname>")) return "/<spielname>.png"
```
### 8.3 ActivityLog Labels
```javascript
const serverLabels = {
// ...
<spielname>: '<Anzeigename>'
}
```
### 8.4 API-Funktionen (falls Config-Editor)
In `frontend/src/api.js`:
```javascript
export async function get<Spielname>Configs(token) {
return fetchAPI('/servers/<spielname>/config', {
headers: { Authorization: `Bearer ${token}` },
})
}
// etc.
```
### 8.5 Config-Editor Komponente (optional)
Neue Datei `frontend/src/components/<Spielname>ConfigEditor.jsx` erstellen (basierend auf bestehenden Editoren).
### 8.6 Icon hinzufügen
PNG-Datei nach `frontend/public/<spielname>.png` kopieren (idealerweise 64x64 oder 128x128 Pixel).
### 8.7 Frontend bauen und deployen
```bash
cd /opt/gameserver-monitor/frontend
npm run build
```
## Schritt 9: Anzeigeeinstellungen konfigurieren (optional)
Nach dem Hinzufügen eines Servers können Superadmins die Anzeigeeinstellungen direkt im Web-Interface bearbeiten.
### 9.1 Anzeigeeinstellungen im Frontend
1. Als Superadmin einloggen
2. Server-Detailansicht öffnen
3. Tab **"Anzeige"** auswählen
4. Folgende Felder können bearbeitet werden:
- **Verbindungsadresse**: Die Adresse die Spielern zum Verbinden angezeigt wird (z.B. `palworld.zeasy.dev:8211`)
- **Hinweis**: Zusätzliche Informationen wie Passwort, Version, etc. (z.B. `Passwort: geheim123`)
5. Speichern klicken
### 9.2 Verhalten der Anzeigeeinstellungen
- **Datenbankwerte haben Priorität**: Wenn Anzeigeeinstellungen in der Datenbank gesetzt sind, überschreiben diese die Standardwerte aus dem Code
- **Fallback auf Standardwerte**: Wenn keine Datenbankeinstellungen existieren, werden die hartkodierten Standardwerte aus `ServerCard.jsx` verwendet
- **Minecraft Sonderfall**: Der Standard-Hinweis "Whitelist erforderlich" wird nur angezeigt, wenn kein eigener Hinweis gesetzt wurde
### 9.3 Technische Details
**Datenbank-Tabelle** (`users.sqlite`):
```sql
CREATE TABLE server_display_settings (
server_id TEXT PRIMARY KEY,
address TEXT,
hint TEXT,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
```
**API-Endpoints**:
- `GET /api/servers/display-settings` - Alle Einstellungen abrufen (für Dashboard)
- `GET /api/servers/:id/display-settings` - Einstellungen für einen Server (Superadmin)
- `PUT /api/servers/:id/display-settings` - Einstellungen speichern (Superadmin)
**Dateien**:
- Backend: `backend/routes/servers.js`, `backend/db/init.js`
- Frontend: `frontend/src/pages/ServerDetail.jsx`, `frontend/src/components/ServerCard.jsx`, `frontend/src/api.js`
## Checkliste
- [ ] Server aufgesetzt und Spiel installiert
- [ ] Systemd Service erstellt und aktiviert
- [ ] Node Exporter installiert
- [ ] SSH-Zugang vom GSM Server eingerichtet
- [ ] DNS Eintrag erstellt
- [ ] Port Forwarding konfiguriert
- [ ] Backend config.json erweitert
- [ ] Prometheus Target hinzugefügt
- [ ] Frontend ServerCard/ServerDetail erweitert
- [ ] Server-Icon hinzugefügt
- [ ] Frontend gebaut
- [ ] Backend neugestartet
- [ ] Anzeigeeinstellungen konfiguriert (Verbindungsadresse, Hinweis)
## Aktuelle Server-Übersicht
| Server | IP | Typ | Ports |
|--------|-----|-----|-------|
| GSM Monitor | 192.168.2.30 | LXC | 3000, 9090 |
| Factorio | 192.168.2.50 | LXC | 34197/UDP |
| Minecraft | 192.168.2.51 | VM | 25565/TCP |
| V Rising | 192.168.2.52 | LXC | 9876-9877/UDP |
| Palworld | 192.168.2.53 | LXC | 8211/UDP, 27015/UDP |
| Project Zomboid | 10.0.30.66 | VM (extern) | 16261-16262/UDP |