CI: Game-API per Bind-Mount deployen + Selbst-Neustart der API
Build & Deploy / deploy (push) Successful in 18s

- deploy.yml kopiert server.js auf den VPS; API beobachtet mtime und
  startet bei Aenderung selbst neu (Restart-Policy)
This commit is contained in:
Kimi Work
2026-10-10 19:16:35 +02:00
parent b1fb42fe7c
commit c25293e03d
2 changed files with 20 additions and 0 deletions
+5
View File
@@ -31,6 +31,11 @@ jobs:
rm -rf /deploy/web/dist/* rm -rf /deploy/web/dist/*
cp -a app/dist/. /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 - name: Health-Check
run: | run: |
apk add --no-cache curl apk add --no-cache curl
+15
View File
@@ -398,4 +398,19 @@ setInterval(() => {
speichern(); speichern();
}, 10 * 60 * 1000).unref(); }, 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})`)); server.listen(PORT, () => console.log(`1bis8-game-api lauscht auf :${PORT} (Räume: ${Object.keys(rooms).length})`));