refactor
This commit is contained in:
92
scripts/setup_postgres.sh
Executable file
92
scripts/setup_postgres.sh
Executable file
@@ -0,0 +1,92 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Скрипт для подготовки PostgreSQL базы данных для Lottery Bot
|
||||
# Использует настройки из .env файла
|
||||
|
||||
set -e
|
||||
|
||||
echo "🗄️ Подготовка PostgreSQL базы данных для Lottery Bot..."
|
||||
|
||||
# Загружаем переменные из .env
|
||||
if [ -f .env ]; then
|
||||
export $(cat .env | grep -v '^#' | xargs)
|
||||
else
|
||||
echo "❌ Файл .env не найден!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Парсим URL базы данных
|
||||
if [[ $DATABASE_URL =~ postgresql\+asyncpg://([^:]+):([^@]+)@([^/]+)/(.+) ]]; then
|
||||
DB_USER="${BASH_REMATCH[1]}"
|
||||
DB_PASS="${BASH_REMATCH[2]}"
|
||||
DB_HOST="${BASH_REMATCH[3]}"
|
||||
DB_NAME="${BASH_REMATCH[4]}"
|
||||
else
|
||||
echo "❌ Неверный формат DATABASE_URL в .env файле"
|
||||
echo "Ожидается: postgresql+asyncpg://user:password@host/database"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "📋 Параметры подключения:"
|
||||
echo " Хост: $DB_HOST"
|
||||
echo " Пользователь: $DB_USER"
|
||||
echo " База данных: $DB_NAME"
|
||||
|
||||
# Функция для выполнения SQL команд
|
||||
run_psql() {
|
||||
PGPASSWORD="$DB_PASS" psql -h "$DB_HOST" -U "$DB_USER" -d "$1" -c "$2"
|
||||
}
|
||||
|
||||
run_psql_admin() {
|
||||
PGPASSWORD="$DB_PASS" psql -h "$DB_HOST" -U "$DB_USER" -d "postgres" -c "$1"
|
||||
}
|
||||
|
||||
# Проверяем подключение к PostgreSQL
|
||||
echo "🔍 Проверка подключения к PostgreSQL..."
|
||||
if ! PGPASSWORD="$DB_PASS" psql -h "$DB_HOST" -U "$DB_USER" -d "postgres" -c "SELECT 1;" > /dev/null 2>&1; then
|
||||
echo "❌ Не удалось подключиться к PostgreSQL"
|
||||
echo "Проверьте:"
|
||||
echo " 1. Запущен ли PostgreSQL сервер"
|
||||
echo " 2. Правильность учетных данных в .env"
|
||||
echo " 3. Доступность сервера по адресу $DB_HOST"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Подключение к PostgreSQL успешно"
|
||||
|
||||
# Создаем базу данных, если она не существует
|
||||
echo "🔨 Создание базы данных '$DB_NAME'..."
|
||||
if run_psql_admin "SELECT 1 FROM pg_database WHERE datname='$DB_NAME';" | grep -q '1'; then
|
||||
echo "ℹ️ База данных '$DB_NAME' уже существует"
|
||||
else
|
||||
run_psql_admin "CREATE DATABASE \"$DB_NAME\" WITH ENCODING='UTF8' LC_COLLATE='ru_RU.UTF-8' LC_CTYPE='ru_RU.UTF-8';"
|
||||
echo "✅ База данных '$DB_NAME' создана"
|
||||
fi
|
||||
|
||||
# Создаем расширения
|
||||
echo "🔧 Настройка расширений PostgreSQL..."
|
||||
run_psql "$DB_NAME" "CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";"
|
||||
run_psql "$DB_NAME" "CREATE EXTENSION IF NOT EXISTS \"pg_stat_statements\";"
|
||||
|
||||
echo "✅ Расширения настроены"
|
||||
|
||||
# Устанавливаем права доступа
|
||||
echo "🔐 Настройка прав доступа..."
|
||||
run_psql "$DB_NAME" "GRANT CONNECT ON DATABASE \"$DB_NAME\" TO \"$DB_USER\";"
|
||||
run_psql "$DB_NAME" "GRANT USAGE ON SCHEMA public TO \"$DB_USER\";"
|
||||
run_psql "$DB_NAME" "GRANT CREATE ON SCHEMA public TO \"$DB_USER\";"
|
||||
run_psql "$DB_NAME" "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"$DB_USER\";"
|
||||
run_psql "$DB_NAME" "GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"$DB_USER\";"
|
||||
|
||||
# Устанавливаем права по умолчанию
|
||||
run_psql "$DB_NAME" "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO \"$DB_USER\";"
|
||||
run_psql "$DB_NAME" "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO \"$DB_USER\";"
|
||||
|
||||
echo "✅ Права доступа настроены"
|
||||
|
||||
echo "🎉 PostgreSQL база данных готова к работе!"
|
||||
echo ""
|
||||
echo "Следующие шаги:"
|
||||
echo " 1. make migrate - применить миграции"
|
||||
echo " 2. make setup - настроить администраторов"
|
||||
echo " 3. make run - запустить бота"
|
||||
Reference in New Issue
Block a user