initial COM2 system snapshot

This commit is contained in:
gitea
2026-03-06 15:22:40 +00:00
commit 9c0fa49baf
4377 changed files with 273033 additions and 0 deletions

104
COM2_DB_VOLUME_REPAIR_ONE_SHOT.sh Executable file
View 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 ==="