Files
play-life/dump-db.sh
poignatov 7398918bc0
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 57s
Release v1.1.0: Add Telegram and Todoist integrations UI
- Add telegram_integrations table to store bot token and chat_id
- Add Integrations tab with Todoist and Telegram integration screens
- Remove TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID from env variables
- All Telegram configuration now done through UI
- Telegram webhook registration happens when user saves bot token
- Rename TELEGRAM_WEBHOOK_BASE_URL to WEBHOOK_BASE_URL
2025-12-31 19:11:28 +03:00

120 lines
4.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Скрипт для создания дампа базы данных
# Использование:
# ./dump-db.sh [имя_дампа] # Дамп из .env
# ./dump-db.sh --env-file .env.prod [имя] # Дамп из указанного файла
# ./dump-db.sh production-backup # Именованный дамп из .env
set -e
# Значения по умолчанию
DEFAULT_ENV_FILE=".env"
ENV_FILE="$DEFAULT_ENV_FILE"
DUMP_NAME=""
# Парсим аргументы
while [[ $# -gt 0 ]]; do
case $1 in
--env-file)
ENV_FILE="$2"
shift 2
;;
*)
if [ -z "$DUMP_NAME" ]; then
DUMP_NAME="$1"
else
echo "❌ Ошибка: Неизвестный аргумент: $1"
echo "Использование: ./dump-db.sh [--env-file FILE] [имя_дампа]"
exit 1
fi
shift
;;
esac
done
# Загружаем переменные окружения из указанного файла
if [ -f "$ENV_FILE" ]; then
export $(cat "$ENV_FILE" | grep -v '^#' | grep -v '^$' | xargs)
echo "📋 Используется файл окружения: $ENV_FILE"
else
echo "⚠️ Файл $ENV_FILE не найден, используются значения по умолчанию"
fi
DB_HOST=${DB_HOST:-localhost}
DB_PORT=${DB_PORT:-5432}
DB_USER=${DB_USER:-playeng}
DB_PASSWORD=${DB_PASSWORD:-playeng}
DB_NAME=${DB_NAME:-playeng}
# Создаем директорию для дампов, если её нет
mkdir -p database-dumps
# Генерируем имя файла с датой и временем, если не указано
if [ -z "$DUMP_NAME" ]; then
DUMP_NAME="dump_$(date +%Y%m%d_%H%M%S).sql"
else
DUMP_NAME="$DUMP_NAME.sql"
fi
DUMP_PATH="database-dumps/$DUMP_NAME"
echo "🗄️ Создание дампа базы данных..."
echo " База: $DB_NAME"
echo " Хост: $DB_HOST:$DB_PORT"
echo " Пользователь: $DB_USER"
echo " Файл: $DUMP_PATH"
# Создаем дамп через docker-compose, если контейнер запущен
if docker-compose ps db 2>/dev/null | grep -q "Up"; then
echo " Используется docker-compose..."
docker-compose exec -T db pg_dump -U "$DB_USER" -d "$DB_NAME" > "$DUMP_PATH"
elif command -v pg_dump &> /dev/null; then
# Или напрямую через pg_dump, если БД доступна локально
echo " Используется локальный pg_dump..."
PGPASSWORD="$DB_PASSWORD" pg_dump -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" > "$DUMP_PATH"
elif command -v docker &> /dev/null; then
# Используем Docker образ postgres для создания дампа
# Используем latest для совместимости с разными версиями сервера
echo " Используется Docker (postgres:latest)..."
# Используем --network host для доступа к удаленным хостам
docker run --rm -i --network host \
-e PGPASSWORD="$DB_PASSWORD" \
postgres:latest \
pg_dump -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" > "$DUMP_PATH"
else
echo "❌ Ошибка: pg_dump не найден, docker-compose не запущен и Docker недоступен"
echo " Установите PostgreSQL клиент или Docker"
exit 1
fi
# Сжимаем дамп
echo " Сжатие дампа..."
gzip -f "$DUMP_PATH"
DUMP_PATH="${DUMP_PATH}.gz"
echo "✅ Дамп успешно создан: $DUMP_PATH"
echo " Размер: $(du -h "$DUMP_PATH" | cut -f1)"
# Ограничиваем количество дампов (максимум 10)
MAX_DUMPS=10
DUMP_COUNT=$(ls -1 database-dumps/*.sql.gz 2>/dev/null | wc -l | tr -d ' ')
if [ "$DUMP_COUNT" -gt "$MAX_DUMPS" ]; then
echo ""
echo "🧹 Очистка старых дампов (максимум $MAX_DUMPS)..."
# Сортируем по дате модификации (новые первыми) и удаляем самые старые
OLD_DUMPS=$(ls -1t database-dumps/*.sql.gz 2>/dev/null | tail -n +$((MAX_DUMPS + 1)))
if [ -n "$OLD_DUMPS" ]; then
REMOVED_COUNT=0
for old_dump in $OLD_DUMPS; do
rm -f "$old_dump"
REMOVED_COUNT=$((REMOVED_COUNT + 1))
echo " Удален: $(basename "$old_dump")"
done
echo " Удалено дампов: $REMOVED_COUNT"
echo " Осталось дампов: $MAX_DUMPS"
fi
fi