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})`));