palworld added
This commit is contained in:
354
docs/gameserver-hinzufuegen.md
Normal file
354
docs/gameserver-hinzufuegen.md
Normal file
@@ -0,0 +1,354 @@
|
||||
# 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 |
|
||||
Reference in New Issue
Block a user