99 lines
3.2 KiB
Bash
Executable File
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 ==="
|