#!/usr/bin/env bash # Deploy AUF DER BOX: git pull (Source) → venv-Sync → rsync nach /opt → Restart. # Läuft als User hitonabi. KEIN eingebettetes Passwort — der Restart nutzt die # NOPASSWD-sudoers-Whitelist (nur `systemctl restart mission-control-2`). # # Voraussetzungen (einmalig): # - Gitea-Repo angelegt + hier geklont nach ~/mission-control-2 # - sudoers: hitonabi ALL=(root) NOPASSWD: /usr/bin/systemctl restart mission-control-2 # - systemd-Unit installiert (siehe mission-control-2.service) set -euo pipefail SRC="${MC2_SRC:-$HOME/mission-control-2}" PROD="${MC2_PROD:-/opt/mission-control-2}" cd "$SRC" git fetch -q origin git reset -q --hard origin/main # Backend-venv auf der Box sicherstellen + Abhängigkeiten aktuell halten. if [ ! -d "$SRC/backend/.venv" ]; then python3 -m venv "$SRC/backend/.venv" fi "$SRC/backend/.venv/bin/python" -m pip install -q -r "$SRC/backend/requirements.txt" # Nach /opt spiegeln (Frontend-dist kommt aus dem Repo mit). sudo rsync -a --delete \ --exclude '.git' --exclude 'node_modules' \ "$SRC/" "$PROD/" # venv separat syncen (rsync oben schließt sie nicht aus, aber Pfade im venv sind # absolut — daher venv direkt im PROD neu aufbauen, robust): if [ ! -d "$PROD/backend/.venv" ]; then sudo python3 -m venv "$PROD/backend/.venv" fi sudo "$PROD/backend/.venv/bin/python" -m pip install -q -r "$PROD/backend/requirements.txt" sudo systemctl restart mission-control-2 echo "OK — Mission Control 2.0 neu gestartet (:9001)."