#!/bin/bash # ############################################################################# # SCRIPT : deploy-fb-monitor.sh # VERSION : 1.2.0 # DESCRIPTION : Deployment- & Backup-Tool für FB-Enterprise-Monitor # AUTHOR : Andreas O. Schmidt # CONTACT : cert.a.o.schmidt@outlook.de # # ISMS/WIKI : https://wiki.deinefirma.internal # GIT : https://github.com[DeinAccount]/[Projekt]/blob/main/deploy.sh # # REVISION : # - Last : 2026-02-04 # - Next : 2026-08-04 # ############################################################################# # FritzBox-Monitor Deployment & Backup Tool PROJECT_NAME="fbsyslog-monitor" VERSION=$2 TAG=$3 BACKUP_DIR="./backups" TIMESTAMP=$(date +%Y%m%d_%H%M%S) DATADIR=.data case "$1" in pack) echo "📦 Packe Monitor-Setup für neuen Standort..." mkdir -p $BACKUP_DIR tar -czvf "${BACKUP_DIR}/${PROJECT_NAME}_${VERSION}_${TIMESTAMP}.tar.gz" \ syslog-fb-monitor.py dockerfile requirements.txt compose.yaml.dist .env.dist README.md deploy-fb-monitor.sh echo "✅ Archiv erstellt: ${BACKUP_DIR}/${PROJECT_NAME}_${VERSION}_${TAG}_${TIMESTAMP}.tar.gz" ;; backup) echo "📦 Packe Monitor-Backup für neuen Standort..." mkdir -p $BACKUP_DIR tar -czvf "${BACKUP_DIR}/${PROJECT_NAME}_${VERSION}_${TIMESTAMP}.tar.gz" \ syslog-fb-monitor.py dockerfile requirements.txt compose.yaml .env.dist .env README.md deploy-fb-monitor.sh echo "✅ Archiv erstellt: ${BACKUP_DIR}/${PROJECT_NAME}_${VERSION}_${TAG}_${TIMESTAMP}.tar.gz" ;; deploy) echo "🚀 Initialisiere neues Standort-Deployment..." mkdir -p ${DATADIR} # 1. Interaktive Abfrage read -p "📍 Standort-Name (z.B. hamburg1): " SITE_NAME read -p "🌐 IP der FRITZ!Box: " FB_IP read -p "🖥️ IP des Syslog-Servers: " SYSLOG_IP # 2. Dateien vorbereiten cp .env.dist .env sed -i "s/^FRITZ_IP=.*/FRITZ_IP=${FB_IP}/" .env sed -i "s/^SYSLOG_SERVER=.*/SYSLOG_SERVER=${SYSLOG_IP}/" .env sed -i "s/^SYSLOG_SENDER_NAME=.*/SYSLOG_SENDER_NAME=fritzbox_${SITE_NAME}/" .env C_NAME="fritz-monitor-${SITE_NAME}" echo -e "\n# containername=${C_NAME}" >> .env if [ -f compose.yaml.dist ]; then cp compose.yaml.dist compose.yaml sed -i "s/container_name:.*/container_name: ${C_NAME}/" compose.yaml fi # 3. Manuelle Kontrolle echo "Öffne .env zur Endkontrolle..." sleep 1 nano .env # 4. Start und Erster Log-Check via Compose # --build erzwingt frisches Image, -d läuft im Hintergrund docker compose up -d --build echo "⏳ Kurzer Wait für den ersten Connect (50s)..." sleep 50 echo "📊 Zeige erste Logs (Service-Level)..." # Nutzt den Service-Namen aus der compose.yaml, ignoriert Synology-Präfixe docker compose logs --tail 50 echo "⏳ Langer Wait für vollständigen Initial-Sync (200s)..." sleep 200 echo "📊 Zeige finale Logs vor Abschluss..." docker compose logs --tail 50 read -p "wenn alles Okay ist, weiter mit enter, bei fehlern, mit Strg+C abbrechen:" # 5. Variable auf false setzen und finaler Restart echo "✅ Initialer Sync verarbeitet, setze SEND_INITIAL_LOG auf false" sed -i 's/^SEND_INITIAL_LOG=.*/SEND_INITIAL_LOG=false/' .env echo "Restart mit neuen Einstellungen..." docker compose up -d echo "🏁 Setup für Standort ${SITE_NAME} abgeschlossen!" # Zur Sicherheit zeigen wir an, wie der Container nun wirklich heißt docker compose ps ;; start) echo "🚀 Starte Monitor-Container..." mkdir ${DATADIR} docker compose up -d --build echo "📊 Zeige Logs (Abbrechen mit Strg+C)..." sleep 20 docker logs -f fritz-syslog-forwarder ;; stop) echo "🚀 Stoppe Monitor-Container..." docker compose logs docker compose down echo "📊 Zeige Logs (Abbrechen mit Strg+C)..." sleep 2 docker logs -f fritz-syslog-forwarder ;; update) echo "🚀 Update Monitor-Container..." docker compose down && docker compose up -d --build echo "📊 Zeige Logs (Abbrechen mit Strg+C)..." sleep 2 docker logs -f fritz-syslog-forwarder ;; help) echo -e "--- 📖 Lange Hilfe: FRITZ!Box Enterprise Monitor Deployment ---" echo -e "Dieses Skript automatisiert das Rollout von FB-Monitoren." echo -e "\nBefehle:" echo -e " pack : Erstellt ein sauberes Archiv ohne .env für neue Standorte." echo -e " backup : Sichert alles inkl. .env und Hashes (Zustandssicherung)." echo -e " deploy : Interaktives Setup (IPs, Name, Nano, Initial-Sync)." echo -e " update : Zieht neues Image und startet Container neu." echo -e " stop : Fährt den Stack am Standort sauber runter." echo -e "\nParameter:" echo -e " : Versionsnummer für das Archiv (z.B. 1.0.2)" echo -e " : Standort oder Status (z.B. 'hamburg' oder 'stable')" exit 0 ;; *) echo -e "❌ Ungültiger Aufruf!" echo -e "Nutzung: $0 {pack|backup|deploy|update|stop|help} [[] []]" echo -e "\nSynopsys:" echo -e " $0 pack 0.1.2 'release' -> Sauberes Paket packen" echo -e " $0 backup 0.1.2 'hamburg1' -> Lokales Backup inkl. Hashes" echo -e " $0 deploy -> Interaktives Standort-Setup" exit 1 ;; #*) # echo "Nutzung: $0 {pack|backup|setup|deploy|update|stop} [[] []] \n synopsys: \n deploy-fb-monitor.sh pack 0.1.2 'latest' \n deploy-fb-monitor.sh backup 0.1.2 'site1' \n deploy-fb-monitor.sh pack 0.1.2 \n deploy-fb-monitor.sh backup site1 " # exit 1 # ;; esac