Add init/run scripts and Cursor/VSCode configurations
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 6s

- Add init.sh: initializes app with Docker, creates prod backup, restores to local DB
- Add run.sh: restarts all containers
- Update restore-db.sh: auto-selects latest dump, terminates active connections before restore
- Add .cursor/commands.json: Cursor commands (init, run, backupFromProd, restoreToLocal)
- Add .vscode/tasks.json: VSCode tasks for running scripts
- Add .vscode/launch.json: launch configurations for restarting server
- Remove play-life-backend/env.example (unified .env in root)
This commit is contained in:
poignatov
2026-01-03 17:08:42 +03:00
parent 2b9a024d3e
commit 6d7d59d2ae
7 changed files with 409 additions and 26 deletions

View File

@@ -47,14 +47,32 @@ DB_USER=${DB_USER:-playeng}
DB_PASSWORD=${DB_PASSWORD:-playeng}
DB_NAME=${DB_NAME:-playeng}
# Проверяем наличие дампа
# Если используется .env (по умолчанию), всегда восстанавливаем в локальную базу
# Переопределяем DB_HOST для локального подключения
if [ "$ENV_FILE" = "$DEFAULT_ENV_FILE" ] || [ "$ENV_FILE" = ".env" ]; then
DB_HOST=localhost
echo "📋 Восстановление в локальную базу (DB_HOST=localhost, DB_PORT=$DB_PORT)"
fi
# Если дамп не указан, выбираем самый свежий
if [ -z "$DUMP_FILE" ]; then
echo "❌ Ошибка: Укажите имя дампа"
echo "Использование: ./restore-db.sh [--env-file FILE] [имя_дампа.sql.gz]"
DUMP_DIR="database-dumps"
if [ ! -d "$DUMP_DIR" ]; then
echo "❌ Ошибка: Директория дампов не найдена: $DUMP_DIR"
exit 1
fi
# Ищем самый свежий дамп
LATEST_DUMP=$(ls -t "$DUMP_DIR"/*.{sql.gz,sql} 2>/dev/null | head -n 1)
if [ -z "$LATEST_DUMP" ]; then
echo "❌ Ошибка: Дампы не найдены в директории $DUMP_DIR"
exit 1
fi
DUMP_FILE=$(basename "$LATEST_DUMP")
echo "📦 Автоматически выбран самый свежий дамп: $DUMP_FILE"
echo ""
echo "Доступные дампы:"
ls -lh database-dumps/*.sql.gz 2>/dev/null | awk '{print " " $9}' | sed "s|database-dumps/||g" || echo " (нет дампов)"
exit 1
fi
# Определяем полный путь к файлу
@@ -86,7 +104,11 @@ if [ ! -f "$FULL_DUMP_PATH" ]; then
fi
echo "⚠️ ВНИМАНИЕ: Это действие удалит все данные в базе $DB_NAME!"
echo " Хост: $DB_HOST:$DB_PORT"
if [ "$ENV_FILE" = "$DEFAULT_ENV_FILE" ] || [ "$ENV_FILE" = ".env" ]; then
echo " Восстановление в локальную базу: $DB_HOST:$DB_PORT"
else
echo " Хост: $DB_HOST:$DB_PORT"
fi
echo " Пользователь: $DB_USER"
read -p " Продолжить? (yes/no): " confirm
@@ -97,7 +119,11 @@ fi
echo "🔄 Восстановление базы данных из дампа..."
echo " База: $DB_NAME"
echo " Хост: $DB_HOST:$DB_PORT"
if [ "$ENV_FILE" = "$DEFAULT_ENV_FILE" ] || [ "$ENV_FILE" = ".env" ]; then
echo " Восстановление в локальную базу: $DB_HOST:$DB_PORT"
else
echo " Хост: $DB_HOST:$DB_PORT"
fi
echo " Файл: $FULL_DUMP_PATH"
# Распаковываем и модифицируем дамп
@@ -121,6 +147,9 @@ echo " Владелец таблиц в дампе заменён на: $DB_US
# Восстанавливаем через docker-compose, если контейнер запущен
if docker-compose ps db 2>/dev/null | grep -q "Up"; then
echo " Используется docker-compose..."
# Завершаем все активные подключения к базе данных
echo " Завершение активных подключений к базе $DB_NAME..."
docker-compose exec -T db psql -U "$DB_USER" -d postgres -c "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '$DB_NAME' AND pid <> pg_backend_pid();" 2>/dev/null || true
# Очищаем базу и восстанавливаем
docker-compose exec -T db psql -U "$DB_USER" -d postgres -c "DROP DATABASE IF EXISTS $DB_NAME;"
docker-compose exec -T db psql -U "$DB_USER" -d postgres -c "CREATE DATABASE $DB_NAME;"
@@ -128,6 +157,10 @@ if docker-compose ps db 2>/dev/null | grep -q "Up"; then
elif command -v psql &> /dev/null; then
# Или напрямую через psql
echo " Используется локальный psql..."
# Завершаем все активные подключения к базе данных
echo " Завершение активных подключений к базе $DB_NAME..."
PGPASSWORD="$DB_PASSWORD" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d postgres -c "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '$DB_NAME' AND pid <> pg_backend_pid();" 2>/dev/null || true
# Очищаем базу и восстанавливаем
PGPASSWORD="$DB_PASSWORD" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d postgres -c "DROP DATABASE IF EXISTS $DB_NAME;"
PGPASSWORD="$DB_PASSWORD" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d postgres -c "CREATE DATABASE $DB_NAME;"
PGPASSWORD="$DB_PASSWORD" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" < "$TEMP_DUMP"