92 lines
3.8 KiB
Bash
Executable File
92 lines
3.8 KiB
Bash
Executable File
#!/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 - запустить бота" |