Mehrere Docker-Hosts: Matches verteilt auf die Hosts starten
CS2_DOCKER_HOSTS nimmt eine Liste von Docker-Hosts. Jedes Match läuft auf dem Host mit den meisten freien Ports und merkt sich seinen Host, damit Status, Konfiguration und Stopp dort landen. Ohne die Variable bleibt alles beim bisherigen einzelnen Host. deploy/docker-host-einrichten.sh richtet einen Host per SSH ein.
This commit is contained in:
1 parent
1a304cb398
commit
eda15bc585
9 files changed
+297
-5
No files matched your search
@@ -22,6 +22,32 @@ function bool(name, fallback) {
|
||||
return ['1', 'true', 'yes', 'ja', 'on'].includes(raw.toLowerCase());
|
||||
}
|
||||
|
||||
function parseDockerHosts(raw) {
|
||||
if (!raw) return null;
|
||||
let list;
|
||||
try {
|
||||
list = JSON.parse(raw);
|
||||
} catch {
|
||||
throw new Error('CS2_DOCKER_HOSTS ist kein gültiges JSON');
|
||||
}
|
||||
if (!Array.isArray(list) || list.length === 0) throw new Error('CS2_DOCKER_HOSTS braucht mindestens einen Eintrag');
|
||||
const names = new Set();
|
||||
return list.map((h) => {
|
||||
if (!h.name || !h.publicHost) throw new Error('Jeder Docker-Host braucht name und publicHost');
|
||||
if (names.has(h.name)) throw new Error(`Docker-Host-Name "${h.name}" kommt doppelt vor`);
|
||||
names.add(h.name);
|
||||
return {
|
||||
name: String(h.name),
|
||||
dockerHost: h.dockerHost ?? null,
|
||||
publicHost: String(h.publicHost),
|
||||
rconHost: h.rconHost ?? h.publicHost,
|
||||
portRangeStart: h.portStart == null ? undefined : Number(h.portStart),
|
||||
portRangeEnd: h.portEnd == null ? undefined : Number(h.portEnd),
|
||||
volume: h.volume ?? undefined,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function str(name, fallback = '') {
|
||||
const raw = process.env[name];
|
||||
return raw === undefined || raw === '' ? fallback : raw;
|
||||
@@ -85,6 +111,9 @@ export function loadConfig(overrides = {}) {
|
||||
volume: str('CS2_DOCKER_VOLUME', 'cs2-mapveto-gamefiles'),
|
||||
extraArgs: str('CS2_DOCKER_EXTRA_ARGS'),
|
||||
startTimeoutMinutes: int('CS2_START_TIMEOUT_MINUTES', 20),
|
||||
// Optional: mehrere Docker-Hosts als JSON-Liste, z. B.
|
||||
// [{"name":"host1","dockerHost":"ssh://cs2@192.168.178.111","publicHost":"192.168.178.111","portStart":27100,"portEnd":27139}]
|
||||
hosts: parseDockerHosts(str('CS2_DOCKER_HOSTS')),
|
||||
},
|
||||
|
||||
staticPool: {
|
||||
|
||||
Reference in new issue
Block a user