diff --git a/deploy/install.sh b/deploy/install.sh index cbf382e..d5a76ca 100755 --- a/deploy/install.sh +++ b/deploy/install.sh @@ -19,7 +19,11 @@ REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" ETC_DIR="/etc/$APP_SLUG" ENV_FILE="$ETC_DIR/env" DATA_DIR="/var/lib/$APP_SLUG" -SERVICE_USER="$APP_SLUG" +# Der Dienst läuft als EIGENTÜMER des Repos. Wer als root nach /root klont, für den +# läuft der Dienst als root – nur so ist /root/... für den Dienst überhaupt +# zugänglich (ein eigener Dienst-Benutzer käme sonst nicht an Code/venv unter /root). +SERVICE_USER="$(stat -c '%U' "$REPO_DIR" 2>/dev/null || echo root)" +SERVICE_GROUP="$(stat -c '%G' "$REPO_DIR" 2>/dev/null || echo root)" UNIT_FILE="/etc/systemd/system/$APP_SLUG.service" ASSUME_YES=0 @@ -75,13 +79,10 @@ ensure_node() { } ensure_node -# --- Dienst-Benutzer und Verzeichnisse -------------------------------------- -if ! id -u "$SERVICE_USER" >/dev/null 2>&1; then - info "Lege Dienst-Benutzer '$SERVICE_USER' an …" - useradd --system --user-group --home-dir "$DATA_DIR" --shell /usr/sbin/nologin "$SERVICE_USER" -fi +# --- Verzeichnisse (Dienst läuft als Repo-Eigentümer, s. o.) ---------------- +info "Dienst läuft als Benutzer '$SERVICE_USER' (Eigentümer des Repos)." mkdir -p "$DATA_DIR" "$ETC_DIR" -chown -R "$SERVICE_USER:$SERVICE_USER" "$DATA_DIR" +chown -R "$SERVICE_USER:$SERVICE_GROUP" "$DATA_DIR" # --- Python-venv + Abhängigkeiten ------------------------------------------- info "Richte Python-venv ein und installiere Abhängigkeiten …" @@ -156,7 +157,7 @@ Wants=network-online.target [Service] Type=simple User=$SERVICE_USER -Group=$SERVICE_USER +Group=$SERVICE_GROUP WorkingDirectory=$REPO_DIR/backend EnvironmentFile=$ENV_FILE ExecStart=$REPO_DIR/backend/.venv/bin/uvicorn app.main:app --host \${APP_BIND_HOST} --port \${APP_PORT}