# Gameserver Monitor (GSM) - Dokumentation ## Uebersicht Der Gameserver Monitor ist eine Web-Applikation zur Ueberwachung und Verwaltung von Gameservern. **URL:** https://monitor.dimension47.de **Server:** 192.168.2.30 (LXC Container) --- ## Architektur ``` Browser | v +------------------+ | nginx (Port 80) | Reverse Proxy +--------+---------+ | +-----+-----+ | | v v Frontend Backend (dist/) (Port 3000) | | | +-----+-----+ | | | | | v v v | SQLite SSH RCON | | | | | | +-----+-----+ | | | | | v v v | users.db .50 .51 .52 | whitelist Facto MC VRis | +---> Prometheus (Port 9090) | v Grafana (Port 3001) ``` --- ## Tech Stack | Komponente | Technologie | |------------|-------------| | Frontend | React 18 + Vite + TailwindCSS 4 + recharts | | Backend | Node.js 20 + Express | | Datenbank | SQLite (better-sqlite3) | | Auth | JWT + bcrypt | | Metrics | Prometheus + Node Exporter | | Dashboards | Grafana | | Reverse Proxy | nginx | --- ## Verzeichnisstruktur ``` /opt/gameserver-monitor/ | +-- backend/ | +-- server.js # Express Server Entry | +-- config.json # Server-Konfiguration | +-- .env # JWT_SECRET | +-- package.json | | | +-- routes/ | | +-- servers.js # /api/servers Endpoints | | +-- auth.js # /api/auth Endpoints | | | +-- services/ | | +-- ssh.js # SSH-Verbindungen, Status, Uptime | | +-- rcon.js # RCON-Kommunikation | | +-- prometheus.js # Prometheus Queries | | +-- factorio.js # Factorio Map-Gen Presets/Defaults | | | +-- middleware/ | | +-- auth.js # JWT Middleware | | | +-- db/ | +-- init.js # DB-Schema, Caches, Templates | +-- users.sqlite # User-Datenbank (users, whitelist_cache, factorio_templates, factorio_world_settings) | +-- frontend/ +-- src/ | +-- main.jsx | +-- App.jsx | +-- api.js # API Client | | | +-- pages/ | | +-- Dashboard.jsx | | +-- ServerDetail.jsx | | | +-- components/ | | +-- ServerCard.jsx | | +-- MetricsChart.jsx | | +-- LoginModal.jsx | | +-- SettingsModal.jsx | | +-- UserManagement.jsx | | +-- FactorioWorldManager.jsx # Factorio Save-Verwaltung | | +-- WorldGenForm.jsx # Map-Generation-Formular | | | +-- context/ | +-- UserContext.jsx | +-- public/ | +-- minecraft.png | +-- factorio.png | +-- vrising.png | +-- navbarlogograuer.png | +-- navbarlogoweiss.png | +-- dist/ # Build Output (wird von nginx served) +-- index.html +-- package.json +-- vite.config.js +-- tailwind.config.js ``` --- ## API Endpoints ### Authentifizierung | Method | Endpoint | Auth | Beschreibung | |--------|----------|------|--------------| | POST | /api/auth/login | - | Login, gibt JWT zurueck | | GET | /api/auth/me | JWT | Aktueller User + Rolle | | POST | /api/auth/change-password | JWT | Eigenes Passwort aendern | | GET | /api/auth/users | superadmin | Alle User auflisten | | POST | /api/auth/users | superadmin | Neuen User erstellen | | PATCH | /api/auth/users/:id/role | superadmin | Rolle aendern | | PATCH | /api/auth/users/:id/password | superadmin | Passwort setzen | | DELETE | /api/auth/users/:id | superadmin | User loeschen | ### Server | Method | Endpoint | Auth | Beschreibung | |--------|----------|------|--------------| | GET | /api/servers | optional | Alle Server mit Status/Metrics | | GET | /api/servers/:id | optional | Einzelner Server | | POST | /api/servers/:id/start | moderator | Server starten (body: `{save: "name"}` fuer Factorio) | | POST | /api/servers/:id/stop | moderator | Server stoppen | | POST | /api/servers/:id/restart | moderator | Server neustarten | | GET | /api/servers/:id/logs | moderator | Console Logs | | POST | /api/servers/:id/rcon | moderator | RCON Befehl senden | | GET | /api/servers/:id/whitelist | optional | Whitelist (gecached) | | GET | /api/servers/:id/metrics/history | optional | Prometheus History | ### Factorio World Management | Method | Endpoint | Auth | Beschreibung | |--------|----------|------|--------------| | GET | /api/servers/factorio/saves | moderator | Liste aller Saves | | GET | /api/servers/factorio/current-save | JWT | Aktuell geladener Save | | GET | /api/servers/factorio/presets | moderator | Map-Gen Presets + Defaults | | GET | /api/servers/factorio/presets/:name | moderator | Einzelnes Preset | | GET | /api/servers/factorio/templates | moderator | Gespeicherte Templates | | POST | /api/servers/factorio/templates | moderator | Template speichern | | DELETE | /api/servers/factorio/templates/:id | moderator | Template loeschen | | POST | /api/servers/factorio/create-world | moderator | Neue Welt erstellen | | DELETE | /api/servers/factorio/saves/:name | moderator | Save loeschen | | GET | /api/servers/factorio/saves/:name/settings | moderator | Erstellungs-Settings einer Welt | --- ## Rollensystem | Rolle | Rechte | |-------|--------| | (kein Login) | Dashboard ansehen, Metriken sehen | | user | Wie ohne Login | | moderator | + Server starten/stoppen, Logs, RCON, Whitelist | | superadmin | + Nutzerverwaltung | --- ## Server-Konfiguration `/opt/gameserver-monitor/backend/config.json`: ```json { "servers": [ { "id": "minecraft", "name": "All the Mods 10 | Minecraft", "host": "192.168.2.51", "type": "minecraft", "runtime": "screen", "screenName": "minecraft", "workDir": "/opt/minecraft", "startCmd": "./run.sh", "rconPort": 25575, "rconPassword": "gsm-mc-2026" }, { "id": "factorio", "name": "Factorio", "host": "192.168.2.50", "type": "factorio", "runtime": "docker", "containerName": "factorio", "rconPort": 27015, "rconPassword": "jieTig6IkixaKuu" }, { "id": "vrising", "name": "V Rising", "host": "192.168.2.52", "type": "vrising", "runtime": "systemd", "serviceName": "vrising", "workDir": "/home/steam/vrising" } ] } ``` ### Runtime-Typen | Runtime | Status-Check | Start | Stop | Uptime | |---------|--------------|-------|------|--------| | docker | docker inspect | docker start | docker stop | Container StartedAt | | screen | screen -ls | screen -dmS | screen -X quit | ps -o etimes | | systemd | systemctl is-active | systemctl start | systemctl stop | ActiveEnterTimestamp | --- ## Features ### Oeffentliches Dashboard - Dashboard ist ohne Login sichtbar - Login-Modal fuer Admins ueber "Sign in" Button - Alle Server-Karten sichtbar, aber ohne Admin-Hints ### Gameserver-Uptime - Zeigt Prozess-Uptime statt Host-Uptime - Docker: Container-Laufzeit - Screen: Session-Laufzeit - Systemd: Service-Aktivzeit ### Whitelist-Caching (Minecraft) - Whitelist wird serverseitig in SQLite gecached - Anzeige auch wenn Server offline - Bearbeitung nur wenn Server online - Cache wird bei jeder Aenderung aktualisiert ### Factorio World Management - **Worlds-Tab** in Server-Detail fuer Factorio-Server - **Gesperrte Verwaltung** wenn Server laeuft/startet/stoppt - **Save-Auswahl beim Start**: Klick auf "Start" bei einem Save startet den Server mit diesem Save - **Current-Save-Anzeige**: Im Overview-Tab wird angezeigt, welcher Save beim Starten geladen wird - **Neue Welt erstellen**: - Vollstaendiges Map-Generation-Formular (Terrain, Ressourcen, Gegner, Evolution) - Presets (Default, Rich Resources, Marathon, Death World, etc.) - Templates speichern und laden - Seed-Eingabe (optional) - **World Settings anzeigen**: - Info-Button bei jeder Welt zeigt Erstellungs-Einstellungen - Legacy-Fallback fuer Welten vor diesem Feature ### Navbar-Logo - Grau (navbarlogograuer.png) im Normalzustand - Weiss (navbarlogoweiss.png) bei Hover - Weiche CSS-Transition (300ms) - Link zu https://zeasy.software ### Game-Logos - Automatische Erkennung anhand Server-Name - minecraft.png, factorio.png, vrising.png - Angezeigt in ServerCard und ServerDetail --- ## Wartung ### Backend neustarten ```bash ssh root@192.168.2.30 pkill -f 'node server.js' cd /opt/gameserver-monitor/backend node server.js & ``` ### Frontend neu bauen ```bash ssh root@192.168.2.30 cd /opt/gameserver-monitor/frontend npm run build nginx -s reload ``` ### Logs pruefen ```bash # Backend (laeuft im Hintergrund) # Fehler werden auf stderr ausgegeben # nginx tail -f /var/log/nginx/error.log tail -f /var/log/nginx/access.log ``` ### Neuen Server hinzufuegen 1. config.json bearbeiten (siehe oben) 2. SSH-Key auf neuem Server hinterlegen 3. Node Exporter installieren (fuer Prometheus) 4. Backend neustarten ### User verwalten - Ueber UI: Settings > Users (nur superadmin) - Direkt in DB: `/opt/gameserver-monitor/backend/db/users.sqlite` --- ## Troubleshooting ### 502 Bad Gateway - Backend laeuft nicht - Loesung: Backend manuell starten ### Server zeigt "offline" obwohl online - SSH-Verbindung fehlgeschlagen - Loesung: SSH-Key pruefen, Firewall pruefen ### Whitelist leer - RCON-Verbindung fehlgeschlagen - Loesung: RCON-Port und Passwort pruefen ### Metrics zeigen 0 - Prometheus Target nicht erreichbar - Loesung: Node Exporter auf Gameserver pruefen