Cloud-Netzwerk anbinden (CloudNet & Co.)
Das Cloud-Modul zeigt die Live-Topologie eines dynamischen Netzwerks (CloudNet, eigene Orchestrierung) im ACP unter Cloud: Tasks/Gruppen und ihre laufenden Services mit Spielerzahlen und Online-Status. Nexus orchestriert nicht selbst – ein schlanker Connector meldet die laufenden Services per HTTP.
CloudNet 4: offizieller Connector (empfohlen)
Für CloudNet 4 gibt es ein fertiges Node-Modul (nexus-cloudnet-connector, Download-Button im ACP unter Cloud → CloudNet anbinden; Version folgt dem Update-Kanal aus /license):
-
Jar in den
modules-Ordner des CloudNet-Nodes legen, Node neu starten. -
Im ACP
report.tokensetzen (Module → cloud). -
modules/JuByteNexus-Connector/config.jsonausfüllen und Modul neu laden:{ "nexusUrl": "https://panel.example.com", "token": "<report.token>", "connector": "cloudnet-1", "reportIntervalSeconds": 10, "includeProxies": true }
Das Modul meldet alle Services (Spielerzahlen via CloudNet-Bridge-Properties) im Takt an das Panel, führt die im ACP ausgelösten START/STOP-Befehle über die CloudNet-Driver-API aus (Server hinzufügen → „Neuen Server über die Cloud erstellen" bzw. Cloud → Service → „Stoppen") und quittiert sie mit dem nächsten Heartbeat. Es nutzt nur die stabile Driver-API (gebaut gegen 4.0.0-RC10, Java 21) und lädt auch ohne Bridge-Modul – dann fehlen lediglich die Spielerzahlen.
Alle anderen Clouds nutzen dieselbe generische Report-API:
1. Token setzen
ACP → Module → cloud → Einstellungen: report.token auf ein zufälliges Secret setzen (leer = alle Reports werden abgelehnt). Optional:
service.ttl-seconds(Default 30) – innerhalb dieser Zeit gilt ein Service als online.prune.after-seconds(Default 600) – länger stille Services werden aus der Topologie entfernt.
2. Services melden (Heartbeat)
Der Connector schickt im Takt (z. B. alle 5–10 s) die vollständige aktuelle Service-Liste:
POST /api/v1/modules/cloud/report
X-Cloud-Token: <report.token>
Content-Type: application/json
{
"connector": "cloudnet-eu",
"services": [
{ "name": "Lobby-1", "task": "Lobby", "state": "RUNNING",
"host": "10.0.0.5", "port": 25565, "playersOnline": 12, "maxPlayers": 100 },
{ "name": "BedWars-3", "task": "BedWars", "state": "RUNNING",
"host": "10.0.0.9", "port": 25571, "playersOnline": 8, "maxPlayers": 16 }
]
}
Antwort: { "applied": 2 }. Services werden per connector+name aktualisiert (Upsert); was nicht mehr gemeldet wird, läuft über die TTL aus und wird vom Prune-Job entfernt. Der Endpoint authentifiziert ausschließlich über X-Cloud-Token (constant-time geprüft) – kein Nexus-Login nötig.
CloudNet-Beispiel
Ein kleines CloudNet-Modul (oder ein externes Skript, das die CloudNet-REST/Node-API abfragt) sammelt ServiceInfoSnapshots, mappt task → task, name → name, onlinePlayers/maxPlayers und postet sie an den Endpoint oben. Da der Vertrag bewusst generisch ist, lässt sich genauso Pterodactyl, ein Docker-Swarm oder eine Eigenbau-Cloud anbinden.
3. Befehle entgegennehmen (Server erstellen & stoppen)
Die Antwort auf jeden POST /report enthält die für diesen Connector ausstehenden Befehle:
{
"applied": 2,
"commands": [
{ "id": "…", "action": "START", "task": "BedWars", "amount": 2 },
{ "id": "…", "action": "STOP", "serviceName": "Lobby-3", "task": "Lobby" }
]
}
Der Connector führt sie auf der Cloud aus (Service starten bzw. stoppen) und meldet die erledigten IDs beim nächsten Heartbeat zurück – derselbe /report-Call, kein Extra-Endpoint:
{ "connector": "cloudnet-eu", "services": [ … ], "ackedCommandIds": ["…", "…"] }
Ausgelöst werden die Befehle im ACP (beides erfordert cloud.manage):
- Server → Server hinzufügen → „Neuen Server über die Cloud erstellen" – Connector, Task und Anzahl wählen →
START. - Cloud → Service → „Stoppen" →
STOPfür genau diesen Service.
Der neu gestartete Service erscheint automatisch beim nächsten Heartbeat in der Topologie; gestoppte laufen über die TTL aus.
4. Im ACP ansehen
Unter Cloud erscheinen Kennzahlen (Connectoren, Services online, Spieler, Tasks), pro Task eine Auslastungs-Karte und eine Live-Tabelle aller Services (Auto-Refresh alle 10 s). Mit der Permission cloud.manage lässt sich ein hängengebliebener Geister-Service manuell entfernen; cloud.view genügt zum Ansehen.