π³ Pterodactyl Advanced: Docker-Installation, Multi-Node-Betrieb und Γberwachung mit Prometheus
Back
Dein Pterodactyl-Setup auf das nächste Level bringen π
In den vorherigen Teilen haben wir die Grundinstallation und erste Erweiterungen behandelt. Heute wird es richtig professionell: Wir installieren Pterodactyl komplett mit Docker, bauen ein Multi-Node-Setup auf und richten ein echtes Monitoring mit Prometheus und Grafana ein. Perfekt für alle, die mehrere Server verwalten oder einen kleinen Hosting-Betrieb aufbauen wollen!
π³ Teil 1: Pterodactyl mit Docker installieren
Die bisherigen Installationen waren "klassisch" – also direkt auf dem System. Docker bringt viele Vorteile: Isolation, einfache Updates und bessere Kontrolle. Hier ist die komplette Docker-Installation .
1.1 Vorbereitung
bash
# Docker und Docker Compose installieren (falls nicht vorhanden)
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
# Verzeichnisstruktur anlegen
mkdir -p ~/pterodactyl/{panel,wings,database,redis}
cd ~/pterodactyl
1.2 MariaDB (Datenbank) mit Docker Compose
Erstelle database/docker-compose.yml:
yaml
version: '3.8'
services:
mariadb:
image: mariadb:10.11
container_name: pterodactyl-db
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=dein_root_passwort
- MYSQL_DATABASE=pterodactyl
- MYSQL_USER=pterodactyl
- MYSQL_PASSWORD=dein_db_passwort
volumes:
- ./data:/var/lib/mysql
ports:
- "3306:3306"
networks:
- pterodactyl-network
networks:
pterodactyl-network:
driver: bridge
Starten:
bash
cd database docker-compose up -d
1.3 Redis (Cache) einrichten
Erstelle redis/docker-compose.yml:
yaml
version: '3.8'
services:
redis:
image: redis:alpine
container_name: pterodactyl-redis
restart: unless-stopped
volumes:
- ./data:/data
ports:
- "6379:6379"
networks:
- pterodactyl-network
networks:
pterodactyl-network:
external: true
Starten:
bash
cd ../redis docker-compose up -d
1.4 Pterodactyl Panel mit Docker
Erstelle panel/docker-compose.yml:
yaml
version: '3.8'
services:
panel:
image: ghcr.io/pterodactyl/panel:latest
container_name: pterodactyl-panel
restart: unless-stopped
ports:
- "80:80"
- "443:443"
environment:
# App-Konfiguration
- APP_URL=https://panel.deine-domain.de
- APP_TIMEZONE=Europe/Berlin
- APP_SERVICE_AUTHOR=admin@deine-domain.de
- TRUSTED_PROXIES=*
# Datenbank
- DB_HOST=pterodactyl-db
- DB_PORT=3306
- DB_DATABASE=pterodactyl
- DB_USERNAME=pterodactyl
- DB_PASSWORD=dein_db_passwort
# Cache/Redis
- CACHE_DRIVER=redis
- SESSION_DRIVER=redis
- QUEUE_DRIVER=redis
- REDIS_HOST=pterodactyl-redis
- REDIS_PORT=6379
# Backup
- APP_BACKUP_DRIVER=wings
volumes:
- ./var:/app/var/
- ./logs:/app/storage/logs
- ./nginx:/etc/nginx/http.d/
networks:
- pterodactyl-network
depends_on:
- mariadb
- redis
networks:
pterodactyl-network:
external: true
Wichtig: Passe die Umgebungsvariablen an deine Domain und Passwörter an .
Starten und Admin anlegen:
bash
cd ../panel docker-compose up -d # Admin-Benutzer erstellen docker-compose run --rm panel php artisan p:user:make
1.5 Wings (Daemon) mit Docker
Erstelle wings/docker-compose.yml:
yaml
version: '3.8'
services:
wings:
image: ghcr.io/pterodactyl/wings:latest
container_name: pterodactyl-wings
restart: unless-stopped
privileged: true
environment:
- TZ=Europe/Berlin
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/containers/:/var/lib/docker/containers/
- ./config:/etc/pterodactyl/
- /var/lib/pterodactyl:/var/lib/pterodactyl
ports:
- "8080:8080" # Wings API
- "2022:2022" # SFTP
- "443:443" # SSL (optional)
networks:
- wings-network
networks:
wings-network:
driver: bridge
Wichtig: Der Container läuft im privileged Mode, da er Docker-in-Docker benötigt .
Konfiguration: Bevor Wings startet, musst du im Panel einen Node anlegen und die config.yml in ./wings/config/ ablegen. Die Konfiguration holst du aus dem Panel unter Admin → Nodes → [Dein Node] → Configuration.
bash
cd ../wings # config.yml hier ablegen nano config/config.yml # Token aus Panel einfügen docker-compose up -d
π Teil 2: Multi-Node-Setup – Mehrere Server verbinden
Ein echtes Hosting-Setup besteht aus mehreren Nodes (Wings-Instanzen), die von einem zentralen Panel gesteuert werden . So richtest du weitere Nodes ein:
2.1 Neuen Node im Panel anlegen
-
Location erstellen (falls noch nicht vorhanden):
Admin → Locations → Create New → z.B. "Europe-Frankfurt" -
Node anlegen:
Admin → Nodes → Create New-
Name: z.B. "Node-02"
-
Location: Auswählen
-
FQDN:
node2.deine-domain.de(oder IP) -
Public Ports: z.B.
25565-25600,27015-27030 -
Memory: Gesamt-RAM in MB
-
Disk: Gesamt-Festplatte in MB
-
Daemon Listen Port:
8080(Standard)
-
-
Configuration Token kopieren (unter dem Tab "Configuration")
2.2 Zweiten Wings-Server einrichten
Auf dem zweiten Server (frische Maschine):
bash
# Docker installieren curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh # Wings-Verzeichnis anlegen mkdir -p ~/pterodactyl/wings cd ~/pterodactyl/wings # Docker-Compose-Datei erstellen (gleiche wie oben) nano docker-compose.yml # Inhalt von oben einfügen # Konfigurationsverzeichnis anlegen mkdir -p config # Token aus Panel einfügen nano config/config.yml # Hier den kompletten Inhalt aus dem Panel (Configuration-Tab) einfügen # Wings starten docker-compose up -d
2.3 Node-Verbindung prüfen
Im Panel siehst du unter Admin → Nodes → [Node-02] den Status. Sollte "Connected" anzeigen. Falls nicht:
bash
# Logs prüfen docker logs pterodactyl-wings # Häufige Fehler: Falscher Token, Ports nicht erreichbar, Firewall
Architektur im Überblick:
-
Panel-Server: Läuft mit Docker (Panel + DB + Redis)
-
Node-Server: Läuft nur Wings + Docker
-
Alle Nodes kommunizieren über API mit dem Panel
π Teil 3: Professionelles Monitoring mit Prometheus & Grafana
Das eingebaute Monitoring von Pterodactyl ist gut, aber für ernsthafte Hosting-Umgebungen brauchst du mehr: Langzeitdaten, Alarme und schöne Dashboards. Hier kommt der Pterodactyl Exporter ins Spiel .
3.1 Was ist der Pterodactyl Exporter?
Ein Python-Skript, das über die Pterodactyl-API Metriken abruft und für Prometheus aufbereitet. Damit kannst du:
-
CPU/RAM-Auslastung aller Server über Zeit sehen
-
Player-Zahlen tracken
-
Alarme bei Überlastung einrichten
-
Alles in Grafana visualisieren
3.2 API-Key erstellen
-
Im Panel zu Account → API Credentials gehen
-
Create API Key
-
Description: "Prometheus Exporter"
-
Permissions: Mindestens
Backup → Readfür die zu überwachenden Server -
Key kopieren (wird später benötigt)
3.3 Pterodactyl Exporter installieren
Methode A: Als Service auf dem Panel-Server
bash
# Python und pip installieren apt install -y python3 python3-pip python3-venv # Als eigenständiger Benutzer (empfohlen) useradd -r -s /bin/false prometheus # Verzeichnis anlegen mkdir -p /opt/pterodactyl_exporter cd /opt/pterodactyl_exporter # In virtualenv installieren (sauberer) python3 -m venv venv source venv/bin/activate pip install pterodactyl-exporter deactivate
Konfiguration erstellen config.yml:
yaml
host: panel.deine-domain.de port: 9531 # Port für Prometheus api_key: DEIN_API_KEY_HIER https: true ignore_ssl: false server_list_type: all # oder 'owner' query_interval: 15 # Sekunden
Systemd-Service einrichten /etc/systemd/system/pterodactyl_exporter.service:
ini
[Unit] Description=Pterodactyl Prometheus Exporter After=network-online.target [Service] User=prometheus Group=prometheus WorkingDirectory=/opt/pterodactyl_exporter ExecStart=/opt/pterodactyl_exporter/venv/bin/pterodactyl_exporter --config-file=/opt/pterodactyl_exporter/config.yml Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
Starten:
bash
systemctl daemon-reload systemctl enable pterodactyl_exporter systemctl start pterodactyl_exporter systemctl status pterodactyl_exporter
Methode B: Mit Docker (einfacher)
bash
mkdir -p ~/pterodactyl-exporter
cd ~/pterodactyl-exporter
# config.yml herunterladen und anpassen
curl -fsSL -o config.yml https://raw.githubusercontent.com/LOENS2/pterodactyl_exporter/master/config.example.yml
nano config.yml # API-Key und Host eintragen
# Docker-Compose erstellen
cat > docker-compose.yml <<EOF
version: '3'
services:
exporter:
image: loens/pterodactyl-exporter:latest
container_name: ptero-exporter
restart: unless-stopped
ports:
- "9531:9531"
volumes:
- ./config.yml:/app/config.yml
EOF
docker-compose up -d
3.4 Prometheus konfigurieren
In deiner prometheus.yml:
yaml
scrape_configs:
- job_name: 'pterodactyl'
static_configs:
- targets: ['localhost:9531'] # Oder IP des Exporter-Servers
scrape_interval: 30s
Prometheus neustarten:
bash
systemctl restart prometheus # Oder docker-compose restart
3.5 Grafana-Dashboard importieren
-
In Grafana einloggen
-
Dashboards → Import
-
ID eingeben:
16575 -
Datenquelle "Prometheus" auswählen
-
Import
Fertig! Du siehst jetzt:
-
CPU-Auslastung pro Server
-
RAM-Nutzung
-
Disk I/O
-
Netzwerk-Traffic
-
Player-Zahlen (bei Spielen, die das unterstützen)
-
Status aller Container
3.6 Alarme einrichten (Beispiele)
In Prometheus (oder Alertmanager) kannst du Regeln definieren:
yaml
groups:
- name: pterodactyl_alerts
rules:
- alert: ServerDown
expr: pterodactyl_server_status == 0
for: 5m
annotations:
summary: "Server {{ $labels.name }} ist down!"
- alert: HighCPUUsage
expr: pterodactyl_cpu_usage_percent > 80
for: 10m
annotations:
summary: "Hohe CPU-Last auf {{ $labels.name }}"
π§ Teil 4: Backup-Strategien für Multi-Node
4.1 S3-Backups für alle Nodes
In der Panel-.env (oder als Environment-Variable bei Docker):
bash
APP_BACKUP_DRIVER=s3 AWS_DEFAULT_REGION=eu-central-1 AWS_ACCESS_KEY_ID=dein_key AWS_SECRET_ACCESS_KEY=dein_secret AWS_BACKUPS_BUCKET=mein-pterodactyl-backup AWS_ENDPOINT=https://s3.eu-central-1.wasabisys.com # für Wasabi # Für große Backups (optional) BACKUP_MAX_PART_SIZE=1073741824 # 1GB BACKUP_PRESIGNED_URL_LIFESPAN=120 # 2 Stunden
Alle Backups werden jetzt zentral in der Cloud gespeichert – unabhängig davon, auf welchem Node der Server läuft .
4.2 Backup-Rotation automatisch
Pterodactyl löscht alte Backups automatisch, wenn du die maximale Anzahl pro Server begrenzt. Im Panel unter Server → Backups kannst du Limits setzen.
4.3 Backup-Node als Feature Request
Aktueller Stand: Backups werden immer auf demselben Node gespeichert, auf dem der Server läuft. Es gibt aber eine Feature-Anfrage für dedizierte Backup-Nodes – also separate Server nur für Backups . Wer das heute schon braucht, muss mit S3 oder externen Skripten arbeiten.
π― Zusammenfassung & Architektur-Überblick
Dein erweitertes Pterodactyl-Setup sieht jetzt so aus:
text
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Panel-Server β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββ β
β β MariaDB β β Redis β β Panel β β
β β (Docker) β β (Docker) β β (Docker) β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββ β
βββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββ
β API
βββββββββββββββββββΌββββββββββββββββββ
β β β
βββββββββΌββββββββ βββββββββΌββββββββ βββββββββΌββββββββ
β Node 01 β β Node 02 β β Node 03 β
β (Wings) β β (Wings) β β (Wings) β
β + Spiele β β + Spiele β β + Spiele β
βββββββββββββββββ βββββββββββββββββ βββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Monitoring-Server β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββ β
β β Prometheus β β Grafana β β Exporter β β
β β β β Dashboard β β β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Was du jetzt hast:
| Komponente | Funktion |
|---|---|
| Panel (Docker) | Zentrale Verwaltung aller Server |
| MariaDB (Docker) | Datenbank für Panel |
| Redis (Docker) | Cache für bessere Performance |
| Mehrere Nodes | Verteilte Gameserver |
| Exporter | Metriken für Monitoring |
| Prometheus | Zeitreihen-Datenbank |
| Grafana | Visualisierung + Dashboards |
| S3-Backups | Zentrale Backup-Speicherung |
π Nützliche Befehle für den Betrieb
bash
# Alle Container logs anzeigen docker logs pterodactyl-panel docker logs pterodactyl-wings # Alle Container neustarten cd ~/pterodactyl/panel && docker-compose restart cd ~/pterodactyl/wings && docker-compose restart # Backup der Panel-Datenbank docker exec pterodactyl-db mysqldump -u root -p pterodactyl > backup.sql # Wings-Status auf Node prüfen curl https://node.deine-domain.de:8080/api/system | jq . # Exporter-Test curl http://localhost:9531/metrics | grep pterodactyl
π Ausblick
Mit diesem Setup bist du bestens gerüstet für professionelles Game-Server-Hosting. Du kannst jetzt:
-
Hunderte Server auf mehreren Maschinen verwalten
-
Die Auslastung im Blick behalten
-
Automatisch alarmiert werden, wenn etwas schiefgeht
-
Zentrale Backups in der Cloud speichern
Nächste Schritte für dich:
-
Auto-Scaling überlegen (bei hoher Last automatisch neue Nodes)
-
Kostenabrechnung für Kunden einrichten
-
Eigene Eggs für exotische Spiele bauen
-
Load Balancer vor die Nodes setzen
More blog articles
Du suchst nach einem neuen Server oder Webhosting und wirst von günstigen Lockangeboten überschüttet? Vorsicht – was auf den ersten Blick wie ein Schnäppchen aussieht, kann langfristig zu einer teuren Überraschung werden. Wir zeigen d...
Was ist eigentlich... Webspace? Einfach erklärt (nicht nur für Oma!) Hast du schon mal von Webspace gehört und gedacht: "Was soll das sein?" Keine Sorge, du bist nicht allein. Viele Leute wissen nicht, was das ist - dabei nutzen sie es jeden Tag....
Du hast bereits erste Erfahrungen mit Minecraft Servern gesammelt und möchtest jetzt deinen eigenen, professionellen Server aufsetzen? Egal ob du mit Mods, Plugins oder im klassischen Vanilla-Stil spielen willst – dieser Guide führt dich durch die wichtigsten...