Zum Inhalt springen

Template-Format

Ein Template ist eine YAML-Datei. Die Spiele im Katalog (games/ im Repository des Katalogs) sind gute Beispiele; der Editor schreibt dasselbe Format. Jedes Feld mit Typ und Standardwert: Template-Referenz.

id: echo-server
name: Echo server
images:
- label: BusyBox
image: busybox:1.37
startupMode: shell
startup: >-
echo "ready on ${SERVER_PORT}"; while read line; do echo "you said: $line"; done
stop:
command: stop
readyPattern: ready on
ports:
- role: game
protocol: tcp
default: 40100
variables:
- key: MAX_PLAYERS
name: Max players
default: "16"
rules: required|integer|between:1,64
configFiles:
- path: server.properties
parser: properties
values:
- key: server-port
value: "{{server.build.default.port}}"
- key: max-players
value: "{{env.MAX_PLAYERS}}"
install:
image: busybox:1.37
entrypoint: sh
script: |
printf 'server-port=\nmax-players=\n' > /mnt/server/server.properties
Feld Bedeutung
id feste ID: Kleinbuchstaben, Ziffern, Bindestriche
name, description was Benutzer sehen
images Runtime-Images in Reihenfolge, je mit label (z. B. “Java 21”) und image; das erste ist der Standard
architectures CPU-Architekturen, für die es die Images gibt, z. B. [amd64]; leer: alle
startupMode image (Standard): Der Entrypoint des Images liest $STARTUP, wie bei Pterodactyl-Images. shell: Der Befehl läuft mit /bin/sh -c.
startup der Startbefehl, mit Platzhaltern
stop command (ein Konsolenbefehl, z. B. stop) oder signal (z. B. SIGINT; Standard SIGTERM), und timeoutSeconds (Standard 30), bevor der Server abgeschossen wird
readyPattern eine Konsolenzeile mit diesem Text markiert den Server als laufend
ports Ports nach Rolle, siehe unten
variables Einstellungen, siehe unten
configFiles Werte, die vor jedem Start in Konfigurationsdateien geschrieben werden: Konfigurationsdateien und Prompts
prompts Fragen in der Konsole, beantwortet mit einem Button: Konfigurationsdateien und Prompts
install, steam wie das Spiel installiert und aktualisiert wird: Installations- und Update-Jobs
query wie der Node nach Spielern fragt, siehe unten
rcon eine Fernkonsole, siehe unten
ports:
- role: game # der Hauptport; immer als SERVER_PORT übergeben
protocol: udp # tcp (Standard) · udp · both
default: 2302 # bevorzugter Port; sonst irgendein freier
- role: query
protocol: udp
default: 27016
variable: QUERY_PORT
- role: ase # MTA: der Server-Browser-Port ist immer Spielport + 123
protocol: udp
offset: 123
offsetFrom: game
  • variable: die Umgebungsvariable, in der der Port übergeben wird.
  • offset / offsetFrom: ein fester Abstand zum Port einer anderen Rolle, für Spiele, die ihn selbst ableiten. Das Panel wählt dann ein Paar, das auf dem Node frei ist.
  • customPorts: true (oberste Ebene): Beim Anlegen eines Servers fügen Benutzer eigene Ports hinzu, übergeben als PORT_<ROLLE>. Für generische Templates.
resources:
memoryMb: 384 # für einen kleinen Server
memoryPerPlayerMb: 4 # pro Spielerplatz dazu …
playersVariable: MAX_PLAYERS # … aus dieser Variablen
cpuPercent: 100 # 100 = ein Kern
diskMb: 2048

Empfohlene Limits, die beim Anlegen eines Servers eingetragen werden; Benutzer können sie ändern.

variables:
- key: RCON_PASSWORD # Umgebungsvariable
name: RCON password
description: Turns RCON on. Empty keeps it off.
default: ""
visibility: secret
rules: nullable|string|max:64
visibility
user (Standard) den Benutzern des Servers angezeigt und von ihnen änderbar
admin nur Owner und Admins des Tenants sehen und ändern sie
secret nur schreibbar: nie wieder angezeigt, verschlüsselt gespeichert; nur Owner und Admins setzen sie
readOnly sichtbar, aber fest
  • rules: Validierung im Stil von Laravel, wie in Pterodactyl-Eggs: required|integer|between:1,100, regex:/^[\w.-]+\.jar$/ …
  • jobOnly: true: Nur Installationen und Updates bekommen den Wert (Download-Tokens, Lizenzschlüssel); der laufende Server nie.
query:
protocol: a2s # a2s (Steam-Spiele) · minecraft (Java Server List Ping) · mta (ASE)
port: query # die Port-Rolle, auf der es antwortet (Standard: game)

Der Node fragt alle 15 Sekunden, solange der Server läuft. Allocations auf 0.0.0.0 werden über den Host abgefragt; eine, die nur an 127.0.0.1 gebunden ist, erreicht ein Agent im Container nicht.

rcon:
protocol: battleye # source (TCP: Minecraft, Project Zomboid, Rust …) · battleye (UDP: DayZ, Arma)
port: rcon # Port-Rolle (Standard: rcon)
password: "{{env.RCON_PASSWORD}}" # meist eine geheime Variable, auch in die Konfiguration des Spiels geschrieben
console: true # die Eingabe der Konsole geht über RCON

Mit console: true gehen Konsolenbefehle, Befehle aus Schedules und der Stopp-Befehl über RCON, für Spiele, die keine Befehle aus ihrer Konsole lesen (DayZ).

Platzhalter Wert
{{VARIABLE}} der Wert einer Variablen, z. B. {{SERVER_MEMORY}}
{{env.VARIABLE}} dasselbe, in Konfigurationsdateien
{{server.build.default.port}} der Spielport (Name bei Pterodactyl)
{{server.build.default.ip}}, {{server.build.memory}} Adresse und Arbeitsspeicher (Namen bei Pterodactyl)

Jeder Server bekommt ausserdem SERVER_PORT, SERVER_IP, SERVER_MEMORY (in MB; ohne Speicherlimit 80 % des Arbeitsspeichers des Nodes) und P_SERVER_UUID, wie Pterodactyl-Images es erwarten, plus eine Variable pro zusätzlicher Port-Rolle.