#!/usr/bin/env bash set -euo pipefail DIR="/opt/hx-ki/com2-stack" ENVF="$DIR/.env" echo "=== COM2 · DB VOLUME REPAIR (one-shot, deterministisch) ===" [ -f "$ENVF" ] || { echo "FEHLT: $ENVF"; exit 1; } # .env laden set -a # shellcheck disable=SC1090 source "$ENVF" set +a # Hard stop bei Platzhaltern 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 # Erwartete Variablen (min.) : "${PG_USER:?PG_USER fehlt}" : "${PG_PASSWORD:?PG_PASSWORD fehlt}" : "${PG_DB:?PG_DB fehlt}" : "${MAUTIC_DB:?MAUTIC_DB fehlt}" : "${MAUTIC_DB_USER:?MAUTIC_DB_USER fehlt}" : "${MAUTIC_DB_PASSWORD:?MAUTIC_DB_PASSWORD fehlt}" : "${MARIADB_ROOT_PASSWORD:?MARIADB_ROOT_PASSWORD fehlt}" echo "[1] POSTGRES fix im bestehenden Volume (User/Pass/DB)" # In der offiziellen postgres-image ist "local" i.d.R. trust -> psql ohne Passwort im Container möglich. # Wir connecten als der initiale Admin-User (POSTGRES_USER im Container), der bei dir "hxki" ist. if ! docker exec -i hxki-postgres sh -lc "psql -U '${PG_USER}' -d postgres -tAc \"SELECT 1\" >/dev/null" 2>/dev/null; then echo "FAIL: Kann Postgres im Container nicht per local-socket als ${PG_USER} erreichen." echo " Ursache: entweder Container nicht running oder local auth ist nicht trust." exit 1 fi # Passwort angleichen + DB sicherstellen docker exec -i hxki-postgres sh -lc " psql -U '${PG_USER}' -d postgres -v ON_ERROR_STOP=1 </dev/null echo "OK: Postgres User/Pass/DB synchronisiert (Volume bleibt intakt)" echo echo "[2] MARIADB fix im bestehenden Volume (root erreichbar? user/db/grants)" # Versuch 1: root via unix_socket (ohne Passwort) – klappt bei manchen Setups if docker exec -i hxki-mariadb sh -lc "mysql -uroot -e 'SELECT 1' >/dev/null" 2>/dev/null; then MYSQL_AUTH="mysql -uroot" else # Versuch 2: root mit Passwort aus .env MYSQL_AUTH="mysql -uroot -p'${MARIADB_ROOT_PASSWORD}'" if ! docker exec -i hxki-mariadb sh -lc "${MYSQL_AUTH} -e 'SELECT 1' >/dev/null" 2>/dev/null; then echo "FAIL: MariaDB root login schlägt fehl (weder socket noch Passwort)." echo " Das heißt: Volume hat ein anderes root-PW als in .env." echo " Ferrari-like Optionen: (A) altes root-PW wiederfinden ODER (B) Volume kontrolliert neu initialisieren." exit 1 fi fi # DB + User + Grants für Mautic docker exec -i hxki-mariadb sh -lc " ${MYSQL_AUTH} </dev/null echo "OK: MariaDB mautic DB/User/Grants synchronisiert (Volume bleibt intakt)" echo echo "[3] Services neu starten (damit sie die jetzt korrekten Credentials nutzen)" cd "$DIR" docker compose restart hxki-postgres hxki-mariadb hxki-n8n hxki-mautic >/dev/null || true echo echo "[4] Hard Checks (nur Fakten)" echo "--- n8n should stop DB-auth loop ---" docker logs --tail=25 hxki-n8n || true echo "--- mautic should stop DB-auth loop ---" docker logs --tail=25 hxki-mautic || true echo "=== ENDE ==="