fix: ожидание PostgreSQL при старте, скрипт fix-db-connection

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
shop
2026-05-17 09:38:03 +03:00
parent 20987ad793
commit 8dae5d37fc
5 changed files with 110 additions and 8 deletions
+29 -3
View File
@@ -1,5 +1,5 @@
#!/bin/bash
# PostgreSQL 17 на Ubuntu — пользователь и БД для магазина
# PostgreSQL 17 на Ubuntu — установка службы, пользователь и БД shop
# Запуск: sudo bash scripts/setup-postgres-ubuntu.sh
set -euo pipefail
@@ -8,11 +8,29 @@ DB_PASS="${DB_PASS:-shop}"
DB_NAME="${DB_NAME:-shop}"
if ! command -v psql >/dev/null; then
echo "Установите PostgreSQL 17:"
echo "PostgreSQL не установлен."
echo " apt install -y postgresql-17 postgresql-client-17"
echo " systemctl enable --now postgresql"
exit 1
fi
echo "Запуск PostgreSQL..."
systemctl enable postgresql 2>/dev/null || true
systemctl start postgresql
for i in $(seq 1 30); do
if pg_isready -h 127.0.0.1 -p 5432 -q 2>/dev/null; then
break
fi
sleep 1
if [ "$i" -eq 30 ]; then
echo "Ошибка: PostgreSQL не слушает 127.0.0.1:5432"
echo " journalctl -u postgresql -n 30 --no-pager"
exit 1
fi
done
echo "Создание пользователя и базы..."
sudo -u postgres psql -v ON_ERROR_STOP=1 <<EOF
DO \$\$
BEGIN
@@ -24,9 +42,17 @@ END
SELECT 'CREATE DATABASE ${DB_NAME} OWNER ${DB_USER}'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '${DB_NAME}')\gexec
EOF
GRANT ALL PRIVILEGES ON DATABASE ${DB_NAME} TO ${DB_USER};
sudo -u postgres psql -v ON_ERROR_STOP=1 -d "${DB_NAME}" <<EOF
GRANT ALL ON SCHEMA public TO ${DB_USER};
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO ${DB_USER};
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO ${DB_USER};
EOF
echo ""
echo "PostgreSQL готов."
echo "Добавьте в /opt/shop/.env:"
echo "DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@127.0.0.1:5432/${DB_NAME}"
echo ""
echo "Проверка: psql \"postgresql://${DB_USER}:${DB_PASS}@127.0.0.1:5432/${DB_NAME}\" -c 'SELECT 1'"