Installer-Bugfix: sudo-Abhängigkeit entfernt, SQL-Ausführung über stdin statt su-Argument
CI / backend-tests (push) Failing after 1s
CI / backend-tests (push) Failing after 1s
Zielserver (minimales Debian-13-LXC) hat kein sudo vorinstalliert; zusätzlich führte die vorherige su -c "$*"-Konstruktion zu Word-Splitting der SQL-Statements. Fix: psql läuft über su -s /bin/bash postgres -c "psql -tA -d '<db>'" mit SQL via stdin. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
This commit is contained in:
@@ -16,21 +16,30 @@ DB_PASSWORD="${DB_PASSWORD:-$(openssl rand -base64 24)}"
|
|||||||
JWT_SECRET_KEY="${JWT_SECRET_KEY:-$(openssl rand -base64 48)}"
|
JWT_SECRET_KEY="${JWT_SECRET_KEY:-$(openssl rand -base64 48)}"
|
||||||
APP_DOMAIN="${APP_DOMAIN:-_}" # "_" = nginx catch-all, solange keine Domain feststeht
|
APP_DOMAIN="${APP_DOMAIN:-_}" # "_" = nginx catch-all, solange keine Domain feststeht
|
||||||
|
|
||||||
|
# Kein sudo-Dependency: minimale LXC-Images haben sudo oft nicht vorinstalliert,
|
||||||
|
# Skript läuft ohnehin als root (Ausführung dokumentiert das oben).
|
||||||
|
# SQL wird bewusst über stdin an psql gepiped statt als su-Argument übergeben –
|
||||||
|
# vermeidet doppelte Shell-Quoting-/Word-Splitting-Fallstricke (Bugfix nach Testlauf).
|
||||||
|
run_psql() {
|
||||||
|
local db="$1" sql="$2"
|
||||||
|
printf '%s\n' "${sql}" | su -s /bin/bash postgres -c "psql -tA -d '${db}'"
|
||||||
|
}
|
||||||
|
|
||||||
echo "== apt update/install =="
|
echo "== apt update/install =="
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
apt-get update -qq
|
apt-get update -qq
|
||||||
apt-get install -y -qq postgresql nginx python3-venv python3-pip git openssl
|
apt-get install -y -qq postgresql nginx python3-venv python3-pip git openssl
|
||||||
|
|
||||||
echo "== PostgreSQL: Rolle + Datenbank =="
|
echo "== PostgreSQL: Rolle + Datenbank =="
|
||||||
if ! sudo -u postgres psql -tAc "SELECT 1 FROM pg_roles WHERE rolname='${DB_USER}'" | grep -q 1; then
|
if [ "$(run_psql postgres "SELECT 1 FROM pg_roles WHERE rolname='${DB_USER}';")" != "1" ]; then
|
||||||
sudo -u postgres psql -c "CREATE ROLE ${DB_USER} WITH LOGIN PASSWORD '${DB_PASSWORD}';"
|
run_psql postgres "CREATE ROLE ${DB_USER} WITH LOGIN PASSWORD '${DB_PASSWORD}';"
|
||||||
echo "Rolle ${DB_USER} angelegt."
|
echo "Rolle ${DB_USER} angelegt."
|
||||||
else
|
else
|
||||||
echo "Rolle ${DB_USER} existiert bereits, überspringe."
|
echo "Rolle ${DB_USER} existiert bereits, überspringe."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! sudo -u postgres psql -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | grep -q 1; then
|
if [ "$(run_psql postgres "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}';")" != "1" ]; then
|
||||||
sudo -u postgres psql -c "CREATE DATABASE ${DB_NAME} OWNER ${DB_USER};"
|
run_psql postgres "CREATE DATABASE ${DB_NAME} OWNER ${DB_USER};"
|
||||||
echo "Datenbank ${DB_NAME} angelegt."
|
echo "Datenbank ${DB_NAME} angelegt."
|
||||||
else
|
else
|
||||||
echo "Datenbank ${DB_NAME} existiert bereits, überspringe."
|
echo "Datenbank ${DB_NAME} existiert bereits, überspringe."
|
||||||
@@ -38,10 +47,10 @@ fi
|
|||||||
|
|
||||||
# gen_random_uuid() ist seit PG13 built-in, aber pgcrypto schadet nicht und macht es
|
# gen_random_uuid() ist seit PG13 built-in, aber pgcrypto schadet nicht und macht es
|
||||||
# explizit/robust gegen ältere Backports (Review-Fund postgres-expert).
|
# explizit/robust gegen ältere Backports (Review-Fund postgres-expert).
|
||||||
sudo -u postgres psql -d "${DB_NAME}" -c "CREATE EXTENSION IF NOT EXISTS pgcrypto;"
|
run_psql "${DB_NAME}" "CREATE EXTENSION IF NOT EXISTS pgcrypto;"
|
||||||
|
|
||||||
echo "== PostgreSQL: Speicher-Tuning für kleinen VPS (4GB RAM) =="
|
echo "== PostgreSQL: Speicher-Tuning für kleinen VPS (4GB RAM) =="
|
||||||
PG_CONF_DIR=$(sudo -u postgres psql -tAc "SHOW config_file;" | xargs dirname)
|
PG_CONF_DIR=$(run_psql postgres "SHOW config_file;" | xargs dirname)
|
||||||
mkdir -p "${PG_CONF_DIR}/conf.d"
|
mkdir -p "${PG_CONF_DIR}/conf.d"
|
||||||
cat > "${PG_CONF_DIR}/conf.d/mabea-tuning.conf" <<'PGCONF'
|
cat > "${PG_CONF_DIR}/conf.d/mabea-tuning.conf" <<'PGCONF'
|
||||||
# MABEA: konservatives Tuning für ~4GB RAM VPS, nicht enterprise-scale.
|
# MABEA: konservatives Tuning für ~4GB RAM VPS, nicht enterprise-scale.
|
||||||
|
|||||||
Reference in New Issue
Block a user