fix: ожидание PostgreSQL при старте, скрипт fix-db-connection
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
#!/bin/bash
|
||||
# Быстрое исправление ECONNREFUSED 127.0.0.1:5432
|
||||
set -euo pipefail
|
||||
|
||||
cd /opt/shop 2>/dev/null || cd "$(dirname "$0")/.."
|
||||
|
||||
echo "=== Исправление подключения к PostgreSQL ==="
|
||||
|
||||
if ! dpkg -l | grep -q postgresql; then
|
||||
echo "Установка PostgreSQL 17..."
|
||||
apt update
|
||||
apt install -y postgresql-17 postgresql-client-17 || {
|
||||
echo "Если пакет не найден — см. README (репозиторий PGDG)"
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
|
||||
bash scripts/setup-postgres-ubuntu.sh
|
||||
|
||||
if [ -f .env ] && ! grep -q '^DATABASE_URL=' .env; then
|
||||
echo "DATABASE_URL=postgresql://shop:shop@127.0.0.1:5432/shop" >> .env
|
||||
echo "Добавлен DATABASE_URL в .env"
|
||||
fi
|
||||
|
||||
cp -f deploy/shop.service /etc/systemd/system/shop.service
|
||||
systemctl daemon-reload
|
||||
systemctl restart shop
|
||||
sleep 2
|
||||
|
||||
if curl -sf http://127.0.0.1:3000/health; then
|
||||
echo ""
|
||||
echo "OK — магазин работает"
|
||||
systemctl reload caddy 2>/dev/null || true
|
||||
else
|
||||
echo "Ошибка — смотрите: journalctl -u shop -n 20 --no-pager"
|
||||
exit 1
|
||||
fi
|
||||
@@ -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'"
|
||||
|
||||
Reference in New Issue
Block a user