# 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/ +login anonymous +app_update 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/.service`: ```ini [Unit] Description= Dedicated Server After=network.target [Service] Type=simple User=steam Group=steam WorkingDirectory=/opt/ ExecStart=/opt//start.sh Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target ``` Aktivieren: ```bash systemctl daemon-reload systemctl enable ``` ## 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,.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": "", "name": "", "host": "192.168.2.XX", "type": "", "runtime": "systemd", "serviceName": "", "rconPort": XXXXX, "rconPassword": "", "workDir": "/opt/", "configPath": "/pfad/zur/config" } ``` ### 6.2 SSH-Funktionen hinzufügen (optional) Falls Config-Editor benötigt wird, in `backend/services/ssh.js`: ```javascript const _CONFIG_PATH = "/pfad/zu/configs"; const _ALLOWED_FILES = ["config1.ini", "config2.ini"]; export async function listConfigs(server) { // Implementation } export async function readConfig(server, filename) { // Implementation } export async function writeConfig(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: "" 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 : { address: '.zeasy.dev:', logo: '/.png', links: [ { label: 'Steam', url: 'https://store.steampowered.com/app/XXXXXX' } ] } } // In getServerInfo(): if (name.includes('')) return serverInfo. ``` ### 8.2 Logo in ServerDetail.jsx ```javascript if (name.includes("")) return "/.png" ``` ### 8.3 ActivityLog Labels ```javascript const serverLabels = { // ... : '' } ``` ### 8.4 API-Funktionen (falls Config-Editor) In `frontend/src/api.js`: ```javascript export async function getConfigs(token) { return fetchAPI('/servers//config', { headers: { Authorization: `Bearer ${token}` }, }) } // etc. ``` ### 8.5 Config-Editor Komponente (optional) Neue Datei `frontend/src/components/ConfigEditor.jsx` erstellen (basierend auf bestehenden Editoren). ### 8.6 Icon hinzufügen PNG-Datei nach `frontend/public/.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 |