From c25293e03d56e47a0c8f8d6679ee10571c67c878 Mon Sep 17 00:00:00 2001 From: Kimi Work Date: Sat, 10 Oct 2026 19:16:35 +0200 Subject: [PATCH] CI: Game-API per Bind-Mount deployen + Selbst-Neustart der API - deploy.yml kopiert server.js auf den VPS; API beobachtet mtime und startet bei Aenderung selbst neu (Restart-Policy) --- .gitea/workflows/deploy.yml | 5 +++++ server/game/api/server.js | 15 +++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index e894941..a523c81 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -31,6 +31,11 @@ jobs: rm -rf /deploy/web/dist/* cp -a app/dist/. /deploy/web/dist/ + # Game-API laeuft per Bind-Mount (compose: ./game/api/server.js:/app/server.js). + # Die API beobachtet ihre eigene Datei und startet sich bei Aenderung selbst neu. + - name: Game-API-Code auf den VPS kopieren + run: cp server/game/api/server.js /deploy/game/api/server.js + - name: Health-Check run: | apk add --no-cache curl diff --git a/server/game/api/server.js b/server/game/api/server.js index e233e9e..9a71dc3 100644 --- a/server/game/api/server.js +++ b/server/game/api/server.js @@ -398,4 +398,19 @@ setInterval(() => { speichern(); }, 10 * 60 * 1000).unref(); +/* Selbst-Deploy: Der CI-Job ersetzt server.js im Bind-Mount. Sobald sich die + * Datei aendert, beendet sich der Prozess sauber – die Restart-Policy des + * Containers (unless-stopped) startet ihn mit dem neuen Code neu. */ +const eigeneMtime = fs.statSync(__filename).mtimeMs; +setInterval(() => { + try { + if (fs.statSync(__filename).mtimeMs !== eigeneMtime) { + console.log('server.js wurde aktualisiert – Neustart für neuen Code'); + process.exit(0); + } + } catch { + /* Datei kurzzeitig nicht lesbar – beim naechsten Intervall pruefen */ + } +}, 5000).unref(); + server.listen(PORT, () => console.log(`1bis8-game-api lauscht auf :${PORT} (Räume: ${Object.keys(rooms).length})`));