initial COM2 system snapshot
This commit is contained in:
104
COM2_DB_VOLUME_REPAIR_ONE_SHOT.sh
Executable file
104
COM2_DB_VOLUME_REPAIR_ONE_SHOT.sh
Executable file
@@ -0,0 +1,104 @@
|
||||
#!/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 <<SQL
|
||||
DO \$\$
|
||||
BEGIN
|
||||
-- User sicherstellen
|
||||
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname='${PG_USER}') THEN
|
||||
CREATE ROLE ${PG_USER} LOGIN;
|
||||
END IF;
|
||||
END
|
||||
\$\$;
|
||||
|
||||
ALTER ROLE ${PG_USER} WITH PASSWORD '${PG_PASSWORD}';
|
||||
|
||||
DO \$\$
|
||||
BEGIN
|
||||
IF NOT EXISTS (SELECT 1 FROM pg_database WHERE datname='${PG_DB}') THEN
|
||||
CREATE DATABASE ${PG_DB} OWNER ${PG_USER};
|
||||
END IF;
|
||||
END
|
||||
\$\$;
|
||||
SQL
|
||||
" >/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} <<SQL
|
||||
CREATE DATABASE IF NOT EXISTS \`${MAUTIC_DB}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
CREATE USER IF NOT EXISTS '${MAUTIC_DB_USER}'@'%' IDENTIFIED BY '${MAUTIC_DB_PASSWORD}';
|
||||
GRANT ALL PRIVILEGES ON \`${MAUTIC_DB}\`.* TO '${MAUTIC_DB_USER}'@'%';
|
||||
FLUSH PRIVILEGES;
|
||||
SQL
|
||||
" >/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 ==="
|
||||
Reference in New Issue
Block a user