This commit is contained in:
2025-11-16 12:36:02 +09:00
parent 3a25e6a4cb
commit eb3f3807fd
61 changed files with 1438 additions and 1139 deletions

92
scripts/setup_postgres.sh Executable file
View 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 - запустить бота"