154 lines
6.0 KiB
Bash
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
|
|
|