#!/usr/bin/env bash # ============================================================================= # push-frontend.sh – LOKAL auf dem Dev-Rechner ausführen # # Baut das Frontend und liefert die dist/ an GENAU EINEN Server. # Nötig, weil auf den Servern kein Node läuft und frontend/dist gitignored ist # (server-update.sh kann das Frontend also nicht selbst bauen). # # Usage: # ./push-frontend.sh 137 # → root@192.168.1.137 # ./push-frontend.sh 164 # → root@192.168.1.164 # ./push-frontend.sh 137 --no-build # bestehendes dist/ nur syncen # ============================================================================= set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" FRONTEND_DIR="$SCRIPT_DIR/frontend" REMOTE_PATH="/opt/timemaster" GREEN='\033[0;32m'; RED='\033[0;31m'; NC='\033[0m' log() { echo -e "${GREEN}==>${NC} $*"; } die() { echo -e "${RED}[FEHLER]${NC} $*" >&2; exit 1; } TARGET="${1:-}" case "$TARGET" in 137) SERVER="root@192.168.1.137" ;; 164) SERVER="root@192.168.1.164" ;; *) die "Server angeben: 137 oder 164 (z.B. ./push-frontend.sh 137)" ;; esac # Schutz: nicht versehentlich auf dem Zielserver ausführen for ip in 192.168.1.137 192.168.1.164; do [[ " $(hostname -I 2>/dev/null) " == *" $ip "* ]] && die "Läuft auf einem Zielserver – nur lokal auf dem Dev-Rechner ausführen." done DO_BUILD=true [[ "${2:-}" == "--no-build" ]] && DO_BUILD=false if $DO_BUILD; then log "npm run build" ( cd "$FRONTEND_DIR" && npm run build ) || die "Frontend-Build fehlgeschlagen." fi [[ -f "$FRONTEND_DIR/dist/index.html" ]] || die "dist/index.html fehlt – erst bauen." log "rsync dist/ → $SERVER:$REMOTE_PATH/frontend/dist/" rsync -az --delete "$FRONTEND_DIR/dist/" "$SERVER:$REMOTE_PATH/frontend/dist/" \ || die "rsync fehlgeschlagen (SSH-Key/Host-Key prüfen)." log "✓ Frontend auf $TARGET aktualisiert"