- Admin → Update: neuere Versionen (Tags) vom Git-Server anzeigen und per Knopf einspielen; ausgeführt vom Dienst auf dem Rechner (Docker/update-einrichten.sh, Docker/update-ausfuehren.sh), nur vorwärts, Fehler bei ausbleibendem Neustart, abgebrochene Läufe sperren nicht - Tests (npm test): Zusammenführen paralleler Änderungen, Rechteprüfung beim Speichern; SESSIONS_DIR lenkt den Datenordner für Testserver um - node_modules, Sicherungen und Uploads aus dem Repo genommen - cors und requireRole() entfernt Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
58 lines
2.1 KiB
Bash
Executable File
58 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# update-einrichten.sh — richtet auf dem Rechner (Pi) den Dienst ein, der
|
|
# Updates aus der App ausführt (Admin → Update). Einmal ausführen, im
|
|
# geklonten Repo, mit sudo. Mehrfach ausführbar.
|
|
#
|
|
# sudo bash Docker/update-einrichten.sh
|
|
#
|
|
# Danach: systemd beobachtet sessions/update/auftrag.json; legt die App dort
|
|
# einen Auftrag ab, startet Docker/update-ausfuehren.sh. Der Container selbst
|
|
# bekommt keinen Zugriff auf Docker.
|
|
set -u
|
|
|
|
if [ "$(id -u)" -ne 0 ]; then echo "Bitte mit sudo ausführen."; exit 1; fi
|
|
REPO="$(cd "$(dirname "$0")/.." && pwd)"
|
|
DIR="$REPO/sessions/update"
|
|
EIGNER=$(stat -c %U "$REPO")
|
|
|
|
if ! runuser -u "$EIGNER" -- git -C "$REPO" remote get-url origin >/dev/null 2>&1; then
|
|
echo "Kein Git-Repo mit 'origin' in $REPO — die App muss aus einem Klon des Git-Servers laufen."; exit 1
|
|
fi
|
|
|
|
mkdir -p "$DIR"
|
|
# Der Container läuft als Benutzer node (uid 1000) und legt hier den Auftrag ab.
|
|
chown 1000:1000 "$DIR"
|
|
|
|
# Laufende Version vermerken: der nächstliegende Tag.
|
|
VERSION=$(runuser -u "$EIGNER" -- git -C "$REPO" describe --tags --abbrev=0 2>/dev/null || echo "")
|
|
COMMIT=$(runuser -u "$EIGNER" -- git -C "$REPO" rev-parse --short HEAD)
|
|
printf '{"version":"%s","commit":"%s","am":"%s"}\n' "$VERSION" "$COMMIT" "$(date -Iseconds)" > "$DIR/installiert.json"
|
|
printf '{"eingerichtet":"%s"}\n' "$(date -Iseconds)" > "$DIR/dienst.json"
|
|
|
|
cat > /etc/systemd/system/projektuebersicht-update.service <<EOF
|
|
[Unit]
|
|
Description=Projektübersicht: Update aus der App ausführen
|
|
After=docker.service network-online.target
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
ExecStart=/bin/bash $REPO/Docker/update-ausfuehren.sh
|
|
TimeoutStartSec=3600
|
|
EOF
|
|
|
|
cat > /etc/systemd/system/projektuebersicht-update.path <<EOF
|
|
[Unit]
|
|
Description=Projektübersicht: auf Update-Auftrag aus der App warten
|
|
|
|
[Path]
|
|
PathExists=$DIR/auftrag.json
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
systemctl daemon-reload
|
|
systemctl enable --now projektuebersicht-update.path
|
|
echo " ✓ Update-Dienst eingerichtet (laufende Version: ${VERSION:-unbekannt}, $COMMIT)"
|
|
echo " • Die App braucht UPDATE_REPO_API in docker-compose.yml; danach einmal: docker compose up -d --build"
|