Files
hx-ki.com2/COM2_REBUILD_FROM_EXISTING.sh
2026-03-06 15:22:40 +00:00

99 lines
3.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
BASE="/opt/hx-ki/com-stack/docker-compose.yml"
OUTDIR="/opt/hx-ki/com2-stack"
OUT="$OUTDIR/docker-compose.yml"
TS="$(date +%Y%m%d-%H%M%S)"
echo "=== COM2 REBUILD (Autorität wird: $OUT) ==="
# 0) Basis muss existieren (dein aktueller „Wahrheits-Compose“)
[ -f "$BASE" ] || { echo "FEHLT: $BASE"; exit 1; }
mkdir -p "$OUTDIR"
echo "[1] Backup vom aktuellen com-stack Compose"
cp -a "$BASE" "${BASE}.bak.${TS}"
echo "[2] Erzeuge kanonische YAML aus Basis-Compose"
TMP_CANON="/tmp/com2.base.${TS}.yml"
docker compose -f "$BASE" config > "$TMP_CANON"
echo "[3] Entferne Service: grafana (falls vorhanden)"
TMP_NOGRAF="/tmp/com2.nograf.${TS}.yml"
awk '
BEGIN{skip=0}
/^ grafana:$/ {skip=1; next}
skip==1 && /^ [A-Za-z0-9_.-]+:$/ {skip=0}
skip==0 {print}
' "$TMP_CANON" > "$TMP_NOGRAF"
echo "[4] Suche vorhandene Mautic-Compose-Datei auf dem Server"
MAUTIC_FILE="$(grep -RIl --exclude-dir='.git' --include='*.yml' --include='*.yaml' -E '^[[:space:]]*mautic:' /opt/hx-ki 2>/dev/null | head -n1 || true)"
if [ -z "${MAUTIC_FILE:-}" ]; then
echo "WARN: Keine vorhandene 'mautic:' Definition unter /opt/hx-ki gefunden."
echo " -> COM2-Compose wird OHNE Mautic geschrieben (weil du 0% Vermutung willst)."
cp -a "$TMP_NOGRAF" "$OUT"
else
echo "OK: Mautic-Definition gefunden in: $MAUTIC_FILE"
TMP_MAUTIC_CANON="/tmp/com2.mautic.${TS}.yml"
docker compose -f "$MAUTIC_FILE" config > "$TMP_MAUTIC_CANON"
echo "[5] Extrahiere nur den Mautic-Service-Block (deterministisch)"
TMP_MAUTIC_BLOCK="/tmp/com2.mautic.block.${TS}.yml"
awk '
BEGIN{inservices=0; grab=0}
/^services:$/ {inservices=1; next}
inservices==1 && /^ mautic:$/ {grab=1; print " mautic:"; next}
grab==1 && /^ [A-Za-z0-9_.-]+:$/ {grab=0}
grab==1 {print}
' "$TMP_MAUTIC_CANON" > "$TMP_MAUTIC_BLOCK"
if ! grep -q '^ mautic:$' "$TMP_MAUTIC_BLOCK"; then
echo "WARN: Konnte mautic-Block nicht extrahieren -> schreibe ohne Mautic (0% Vermutung)."
cp -a "$TMP_NOGRAF" "$OUT"
else
echo "[6] Füge Mautic in COM2-Compose ein (unter services:)"
# Insert mautic block right after 'services:' line
awk -v block="$TMP_MAUTIC_BLOCK" '
BEGIN{inserted=0}
/^services:$/ {
print
if (inserted==0) {
while ((getline line < block) > 0) print line
close(block)
inserted=1
}
next
}
{print}
' "$TMP_NOGRAF" > "$OUT"
fi
fi
echo "[7] Host-Caddy stoppen (damit Docker-Caddy Port 80/443 bekommt), falls aktiv"
if systemctl is-active --quiet caddy 2>/dev/null; then
systemctl stop caddy
fi
echo "[8] hxki-internal sicherstellen"
if ! docker network ls --format '{{.Name}}' | grep -q '^hxki-internal$'; then
docker network create hxki-internal >/dev/null
fi
echo "[9] COM2 Orchester starten NUR aus $OUT"
cd "$OUTDIR"
docker compose down --remove-orphans || true
docker compose up -d --remove-orphans
echo
echo "=== COM2 STATUS (nur Fakten) ==="
docker ps --format 'NAME={{.Names}} STATUS={{.Status}} PORTS={{.Ports}}'
echo
echo "hxki-internal Mitglieder:"
docker network inspect hxki-internal --format '{{range $id,$c := .Containers}}{{println $c.Name}}{{end}}' | sort
echo "=== ENDE ==="