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

8.6 KiB

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

# System updaten
apt update && apt upgrade -y

# Grundlegende Pakete
apt install -y curl wget screen htop

1.3 SteamCMD installieren (für Steam-Spiele)

# 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

# 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:

[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:

systemctl daemon-reload
systemctl enable <spielname>

Schritt 3: Node Exporter installieren

Für Metriken im GSM Dashboard:

apt install -y prometheus-node-exporter
systemctl enable prometheus-node-exporter
systemctl start prometheus-node-exporter

Prüfen ob Port 9100 erreichbar ist:

curl http://localhost:9100/metrics | head

Schritt 4: SSH-Zugang einrichten

Auf dem GSM Server (192.168.2.30):

# Public Key kopieren
ssh-copy-id -i /root/.ssh/id_ed25519.pub root@192.168.2.XX

Testen:

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):

cd /home/alex
nano docker-compose.yml

Neue Domain zur CF_DOMAINS Umgebungsvariable hinzufügen:

environment:
  - CF_DOMAINS=gsm.zeasy.dev,factorio.zeasy.dev,<neuer-name>.zeasy.dev

Container neu starten:

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:

{
  "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:

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

pm2 restart gameserver-backend
pm2 logs gameserver-backend --lines 20

Schritt 7: Prometheus konfigurieren

Auf dem GSM Server /etc/prometheus/prometheus.yml:

  - job_name: "<spielname>"
    static_configs:
      - targets: ["192.168.2.XX:9100"]

Prometheus neustarten:

systemctl restart prometheus

Schritt 8: Frontend erweitern

8.1 Server-Info in ServerCard.jsx

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

if (name.includes("<spielname>")) return "/<spielname>.png"

8.3 ActivityLog Labels

const serverLabels = {
  // ...
  <spielname>: '<Anzeigename>'
}

8.4 API-Funktionen (falls Config-Editor)

In frontend/src/api.js:

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

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):

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