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.
Ein minimales Template
Abschnitt betitelt „Ein minimales Template“id: echo-servername: Echo serverimages: - label: BusyBox image: busybox:1.37startupMode: shellstartup: >- echo "ready on ${SERVER_PORT}"; while read line; do echo "you said: $line"; donestop: command: stopreadyPattern: ready onports: - role: game protocol: tcp default: 40100variables: - key: MAX_PLAYERS name: Max players default: "16" rules: required|integer|between:1,64configFiles: - 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: gamevariable: 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 alsPORT_<ROLLE>. Für generische Templates.
Ressourcen
Abschnitt betitelt „Ressourcen“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: 2048Empfohlene Limits, die beim Anlegen eines Servers eingetragen werden; Benutzer können sie ändern.
Variablen
Abschnitt betitelt „Variablen“variables: - key: RCON_PASSWORD # Umgebungsvariable name: RCON password description: Turns RCON on. Empty keeps it off. default: "" visibility: secret rules: nullable|string|max:64visibility |
|
|---|---|
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.
Spielerzahl
Abschnitt betitelt „Spielerzahl“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 RCONMit 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
Abschnitt betitelt „Platzhalter“| 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.