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