77 lines
2.9 KiB
Bash
Executable File
77 lines
2.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
C="hxki-postgres"
|
||
|
||
echo "=== FIX POSTGRES ADMIN (one-shot) ==="
|
||
docker inspect "$C" >/dev/null 2>&1 || { echo "FEHLT: $C"; exit 1; }
|
||
|
||
IMG="$(docker inspect "$C" --format '{{.Config.Image}}')"
|
||
echo "[0] Image: $IMG"
|
||
|
||
# Admin-User/PW/DB aus ENV lesen (Autorität: Container selbst)
|
||
get_env() {
|
||
local key="$1"
|
||
docker inspect "$C" --format '{{range .Config.Env}}{{println .}}{{end}}' \
|
||
| awk -F= -v k="$key" '$1==k{print substr($0, index($0,"=")+1)}' | head -n1
|
||
}
|
||
|
||
ADMIN_USER="$(get_env POSTGRES_USER || true)"
|
||
ADMIN_PW="$(get_env POSTGRES_PASSWORD || true)"
|
||
ADMIN_DB="$(get_env POSTGRES_DB || true)"
|
||
|
||
# Bitnami-Fallbacks
|
||
[ -n "${ADMIN_USER:-}" ] || ADMIN_USER="$(get_env POSTGRESQL_USERNAME || true)"
|
||
[ -n "${ADMIN_PW:-}" ] || ADMIN_PW="$(get_env POSTGRESQL_PASSWORD || true)"
|
||
[ -n "${ADMIN_DB:-}" ] || ADMIN_DB="$(get_env POSTGRESQL_DATABASE || true)"
|
||
|
||
# Default-DB-Fallback
|
||
[ -n "${ADMIN_DB:-}" ] || ADMIN_DB="postgres"
|
||
|
||
echo "[1] Detected ADMIN_USER=${ADMIN_USER:-<leer>} ADMIN_DB=${ADMIN_DB:-<leer>}"
|
||
[ -n "${ADMIN_USER:-}" ] || { echo "FAIL: Konnte ADMIN_USER nicht aus Container ENV lesen."; exit 1; }
|
||
[ -n "${ADMIN_PW:-}" ] || { echo "FAIL: Konnte ADMIN_PW nicht aus Container ENV lesen."; exit 1; }
|
||
|
||
# Zielwerte für n8n (aus n8n-Container-ENV – Autorität!)
|
||
N8N="hxki-n8n"
|
||
docker inspect "$N8N" >/dev/null 2>&1 || { echo "FEHLT: $N8N"; exit 1; }
|
||
|
||
get_env_n8n() {
|
||
local key="$1"
|
||
docker inspect "$N8N" --format '{{range .Config.Env}}{{println .}}{{end}}' \
|
||
| awk -F= -v k="$key" '$1==k{print substr($0, index($0,"=")+1)}' | head -n1
|
||
}
|
||
|
||
PG_USER="$(get_env_n8n DB_POSTGRESDB_USER || true)"
|
||
PG_PW="$(get_env_n8n DB_POSTGRESDB_PASSWORD || true)"
|
||
PG_DB="$(get_env_n8n DB_POSTGRESDB_DATABASE || true)"
|
||
|
||
[ -n "${PG_USER:-}" ] || { echo "FAIL: n8n ENV fehlt DB_POSTGRESDB_USER"; exit 1; }
|
||
[ -n "${PG_PW:-}" ] || { echo "FAIL: n8n ENV fehlt DB_POSTGRESDB_PASSWORD"; exit 1; }
|
||
[ -n "${PG_DB:-}" ] || { echo "FAIL: n8n ENV fehlt DB_POSTGRESDB_DATABASE"; exit 1; }
|
||
|
||
echo "[2] Target (für n8n): user=$PG_USER db=$PG_DB"
|
||
|
||
echo "[3] Apply in Postgres (create/alter role + create db)"
|
||
docker exec -i "$C" sh -lc "export PGPASSWORD='${ADMIN_PW}'; psql -v ON_ERROR_STOP=1 -U '${ADMIN_USER}' -d '${ADMIN_DB}'" <<SQL
|
||
DO \$\$
|
||
BEGIN
|
||
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname='${PG_USER}') THEN
|
||
CREATE ROLE ${PG_USER} LOGIN PASSWORD '${PG_PW}';
|
||
ELSE
|
||
ALTER ROLE ${PG_USER} WITH LOGIN PASSWORD '${PG_PW}';
|
||
END IF;
|
||
|
||
IF NOT EXISTS (SELECT 1 FROM pg_database WHERE datname='${PG_DB}') THEN
|
||
CREATE DATABASE ${PG_DB} OWNER ${PG_USER};
|
||
END IF;
|
||
END
|
||
\$\$;
|
||
GRANT ALL PRIVILEGES ON DATABASE ${PG_DB} TO ${PG_USER};
|
||
SQL
|
||
|
||
echo "[4] Quick check: kann sich n8n-user anmelden?"
|
||
docker exec -i "$C" sh -lc "export PGPASSWORD='${PG_PW}'; psql -v ON_ERROR_STOP=1 -U '${PG_USER}' -d '${PG_DB}' -c 'select 1;' >/dev/null"
|
||
echo "OK: Postgres Credentials passen jetzt für n8n."
|
||
echo "=== ENDE ==="
|