Files
fbsyslogsender/deploy-fb-monitor.sh
T
2026-02-05 06:11:47 +01:00

154 lines
6.0 KiB
Bash

#!/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 " <version> : Versionsnummer für das Archiv (z.B. 1.0.2)"
echo -e " <tag> : 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} [[<version>] [<tag>]]"
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} [[<version>] [<tag>]] \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