#!/usr/bin/env bash # Den Hub auf den LXC ausrollen. # # Warum ein Skript und kein `git pull` im Container: der Container hat keinen # Zugang zum Repo, und er soll auch keinen bekommen. Ausgerollt wird, was # hier im Arbeitsverzeichnis liegt - damit ist immer nachvollziehbar, welcher # Stand laeuft, auch wenn gerade etwas nicht gepusht ist. # # Aufruf: scripts/deploy-hub.sh # Umgebung (mit Vorgaben): # PVE_HOST=192.168.2.20 Proxmox-Host # CT=141 Container-ID set -euo pipefail PVE_HOST="${PVE_HOST:-192.168.2.20}" CT="${CT:-141}" REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" STAND="$(date -u +%Y%m%d-%H%M%S)" echo "Packe den Arbeitsstand ..." cd "$REPO" # node_modules bleibt draussen: das Projekt hat keine Laufzeit-Abhaengigkeiten, # TypeScript wird nur fuer die Typpruefung gebraucht und nicht im Betrieb. tar czf "/tmp/abdulive-${STAND}.tgz" \ --exclude='./node_modules' \ --exclude='./.git' \ --exclude='./dist' \ --exclude='./docs/handbuch/build' \ apps packages config scripts package.json tsconfig.json echo "Schiebe nach ${PVE_HOST} -> CT ${CT} ..." scp -q "/tmp/abdulive-${STAND}.tgz" "root@${PVE_HOST}:/tmp/abdulive.tgz" ssh "root@${PVE_HOST}" "pct push ${CT} /tmp/abdulive.tgz /tmp/abdulive.tgz && rm -f /tmp/abdulive.tgz" rm -f "/tmp/abdulive-${STAND}.tgz" echo "Entpacke und starte neu ..." ssh "root@${PVE_HOST}" "pct exec ${CT} -- bash -lc ' set -e # In einen frischen Ordner entpacken und erst danach umhaengen: bricht das # Entpacken ab, laeuft der alte Stand unveraendert weiter. rm -rf /opt/abdulive.neu mkdir -p /opt/abdulive.neu tar xzf /tmp/abdulive.tgz -C /opt/abdulive.neu --no-same-owner rm -f /tmp/abdulive.tgz rm -rf /opt/abdulive.alt [ -d /opt/abdulive ] && mv /opt/abdulive /opt/abdulive.alt || true mv /opt/abdulive.neu /opt/abdulive systemctl restart abdulive-hub 2>/dev/null || true '" echo "Fertig. Stand ${STAND}." ssh "root@${PVE_HOST}" "pct exec ${CT} -- systemctl is-active abdulive-hub" || true