From 468534979e341d8f13dd8e9d185a1c2ebe5529c6 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 28 Jan 2026 13:57:45 +0100 Subject: [PATCH] cleanup und INSTALL --- INSTALL.md | 13 ++++++ sync-ispconfig-cleanup.sh | 89 ++++++++++++++++++++++++++++++++++----- 2 files changed, 92 insertions(+), 10 deletions(-) mode change 100644 => 100755 sync-ispconfig-cleanup.sh diff --git a/INSTALL.md b/INSTALL.md index 6de04ed..506470b 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -32,6 +32,8 @@ ACME Zertifikatserneuerung wie gewohnt über crontab Pfad: `/usr/local/bin/sync-ispconfig-proxy.conf` +Sollte als Cronjob laufen um Änderungen vom ISPconfg Master zu übernehmen + ### 2.2 Server-Liste Pfad: `/usr/local/bin/proxy_based_server.conf` @@ -41,6 +43,17 @@ Pfad: `/usr/local/bin/proxy_based_server.conf` Pfad: `/usr/local/bin/sync-ispconfig-proxy.sh` +### 2.4 Das Cleanup Script + +Pfad: `/usr/local/bin/sync-ispconfig-cleanup.sh + +ISPcconfig löscht unabhängig vom Proxyserver auf den clients die apache vhost oder ngingx conf Dateien +Auf dem Proxyserver müssen die nginx .conf Dateien manuell gelöscht werden. +Das Script mit Parameter -e führt dies durch. +Ohne Parameter läuft es im dry-run. +**Derzeit in der Testphase - deshalb zur Sicherheit manuell mit dry-run ausführen.** +Verwaiste nginx .conf Dateien beinträchtigen das System nicht. + ## 3. Client Setup (vServer / Apache) Die Backends müssen den Proxy als vertrauenswürdig einstufen. diff --git a/sync-ispconfig-cleanup.sh b/sync-ispconfig-cleanup.sh old mode 100644 new mode 100755 index b125fe3..47189a4 --- a/sync-ispconfig-cleanup.sh +++ b/sync-ispconfig-cleanup.sh @@ -1,22 +1,91 @@ #!/bin/bash -# Vergleicht lokale Configs mit der Datenbank und löscht Überreste -source /usr/local/bin/sync-ispconfig-proxy.conf -# Hol alle aktuell aktiven Domains aus der DB +# Konfiguration laden +source /usr/local/bin/sync-ispconfig-proxy.conf +PROXY_CONF="/usr/local/bin/proxy_based_server.conf" + +# Standardeinstellungen +DRY_RUN=true +CONFIG_DIR="/etc/nginx/conf.d/proxy_generated" +FILES_DELETED=false + +# Hilfe-Funktion +show_help() { + cat << EOF +Nutzung: $(basename "$0") [OPTIONEN] + +Vergleicht lokale Nginx-Konfigurationen mit der ISPConfig-Datenbank. +Entfernt verwaiste Dateien, sofern sie nicht in der Blocklist stehen. + +Optionen: + -e, --execute Führt Löschvorgänge und Nginx-Reload tatsächlich aus. + -h, --help Zeigt diese Hilfe an. +EOF +} + +# Parameter-Parsing +while [[ "$#" -gt 0 ]]; do + case $1 in + -e|--execute) DRY_RUN=false ;; + -h|--help) show_help; exit 0 ;; + *) echo "Fehler: Unbekannte Option $1"; show_help; exit 1 ;; + esac + shift +done + +if [ "$DRY_RUN" = true ]; then + echo "--- DRY-RUN MODUS: Keine Änderungen am System ---" +fi + +# 1. Blocklist extrahieren +BLOCKLIST=$(sed -n '/^\[blocklist\]/,/^\[/p' "$PROXY_CONF" | grep -v '^\[' | grep -v '^#' | sed '/^$/d') + +# 2. Aktive Domains aus DB holen SQL_QUERY="SELECT domain FROM web_domain WHERE active = 'y';" DB_DOMAINS=$(mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -Bse "$SQL_QUERY") -# Gehe durch alle Dateien im Proxy-Ordner -for file in /etc/nginx/conf.d/proxy_generated/*.conf; do +if [ $? -ne 0 ]; then + echo "Fehler: Datenbankverbindung fehlgeschlagen." + exit 1 +fi + +# 3. Cleanup-Schleife +for file in "$CONFIG_DIR"/*.conf; do [ -e "$file" ] || continue filename=$(basename "$file" .conf) + # Blocklist Check + if echo "$BLOCKLIST" | grep -qxw "$filename"; then + continue + fi + + # DB Check if ! echo "$DB_DOMAINS" | grep -qxw "$filename"; then - echo "Lösche veraltete Config: $filename" - rm "$file" - # Optional: acme.sh Zertifikate auch entfernen - # /root/.acme.sh/acme.sh --remove -d "$filename" --ecc + if [ "$DRY_RUN" = true ]; then + echo "[Simuliert] Lösche: $file" + FILES_DELETED=true + else + echo "Lösche veraltete Config: $file" + rm "$file" + FILES_DELETED=true + fi fi done -nginx -t && systemctl reload nginx +# 4. Bedingter Nginx Reload +if [ "$FILES_DELETED" = true ]; then + if [ "$DRY_RUN" = true ]; then + echo "[Simuliert] Änderungen gefunden: nginx -t && systemctl reload nginx" + else + echo "Änderungen vorgenommen. Prüfe Nginx Syntax..." + if nginx -t; then + systemctl reload nginx + echo "Nginx erfolgreich neu geladen." + else + echo "Fehler in Nginx-Konfiguration! Reload abgebrochen." + exit 1 + fi + fi +else + echo "Keine verwaisten Dateien gefunden. Kein Reload notwendig." +fi