initial COM2 system snapshot
This commit is contained in:
98
COM2_REBUILD_FROM_EXISTING.sh
Executable file
98
COM2_REBUILD_FROM_EXISTING.sh
Executable file
@@ -0,0 +1,98 @@
|
||||
#!/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 ==="
|
||||
Reference in New Issue
Block a user