CI: Game-API per Bind-Mount deployen + Selbst-Neustart der API
Build & Deploy / deploy (push) Successful in 18s
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:
@@ -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
|
||||
|
||||
@@ -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})`));
|
||||
|
||||
Reference in New Issue
Block a user