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

92 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
DIR="/opt/hx-ki/com2-stack"
ENVF="$DIR/.env"
NET="hxki-internal"
BKDIR="/opt/hx-ki/backups/com2-db-$(date +%Y%m%d-%H%M%S)"
cd "$DIR"
mkdir -p "$BKDIR"
echo "=== COM2 DB CAUSE FIX (one-shot, deterministisch) ==="
echo "Compose: $DIR/docker-compose.yml"
echo "ENV: $ENVF"
echo "Backup: $BKDIR"
[ -f "$DIR/docker-compose.yml" ] || { echo "FEHLT: $DIR/docker-compose.yml"; exit 1; }
[ -f "$ENVF" ] || { echo "FEHLT: $ENVF"; exit 1; }
# Kein Placeholders
if grep -qE 'CHANGE_ME|CHANGEME|changeme' "$ENVF"; then
echo "FAIL: In $ENVF sind noch Platzhalter (CHANGE_ME...). Erst echte Passwörter setzen."
exit 1
fi
# Netzwerk external muss existieren (keine YAML-Frickelei, nur Host-Fakt)
docker network inspect "$NET" >/dev/null 2>&1 || docker network create "$NET" >/dev/null
echo "[1] Orchester runter"
docker compose down --remove-orphans || true
# Helper: Named Volume ermitteln (Destination muss Standard sein)
get_named_volume_for_dest() {
local c="$1" dest="$2"
docker inspect "$c" --format '{{range .Mounts}}{{if and (eq .Type "volume") (eq .Destination "'"$dest"'")}}{{println .Name}}{{end}}{{end}}'
}
backup_volume() {
local vol="$1" name="$2"
echo " -> Backup volume $vol -> $BKDIR/${name}.tar.gz"
docker run --rm -v "${vol}:/v:ro" -v "${BKDIR}:/b" alpine \
sh -lc "cd /v && tar -czf /b/${name}.tar.gz ."
}
PGC="hxki-postgres"
MDBC="hxki-mariadb"
echo "[2] Container check"
docker inspect "$PGC" >/dev/null 2>&1 || { echo "FAIL: Container fehlt: $PGC"; exit 1; }
docker inspect "$MDBC" >/dev/null 2>&1 || { echo "FAIL: Container fehlt: $MDBC"; exit 1; }
echo "[3] Volumes ermitteln"
PGVOL="$(get_named_volume_for_dest "$PGC" "/var/lib/postgresql/data" || true)"
MDBVOL="$(get_named_volume_for_dest "$MDBC" "/var/lib/mysql" || true)"
echo " Postgres volume: ${PGVOL:-<NONE>}"
echo " MariaDB volume: ${MDBVOL:-<NONE>}"
[ -n "${PGVOL:-}" ] || { echo "FAIL: Postgres nutzt kein Named Volume auf /var/lib/postgresql/data"; exit 1; }
[ -n "${MDBVOL:-}" ] || { echo "FAIL: MariaDB nutzt kein Named Volume auf /var/lib/mysql"; exit 1; }
echo "[4] Backup DB-Volumes (Beweis/Absicherung)"
backup_volume "$PGVOL" "postgres_${PGVOL}"
backup_volume "$MDBVOL" "mariadb_${MDBVOL}"
echo "[5] Volume-Reset (Ursache fixen: Secrets-Drift eliminieren)"
docker volume rm "$PGVOL" "$MDBVOL"
echo "[6] Orchester hoch (DBs initialisieren NEU aus .env)"
docker compose up -d --remove-orphans
echo
echo "[7] Hard checks (nur Fakten)"
docker ps --format 'NAME={{.Names}} STATUS={{.Status}} PORTS={{.Ports}}' | egrep 'hxki-postgres|hxki-mariadb|hxki-n8n|hxki-mautic|hxki-web|hx-caddy' || true
echo
echo "[8] DB Init-Fakten (Logs kurz)"
echo "--- postgres ---"
docker logs --tail=40 hxki-postgres || true
echo "--- mariadb ---"
docker logs --tail=40 hxki-mariadb || true
echo
echo "[9] App-Fakten (Logs kurz)"
echo "--- n8n ---"
docker logs --tail=60 hxki-n8n || true
echo "--- mautic ---"
docker logs --tail=60 hxki-mautic || true
echo "=== ENDE ==="
echo "Backups: $BKDIR"