Files
DLE/migrate-encrypted-data.sh

204 lines
7.4 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
/**
* Copyright (c) 2024-2025 Тарабанов Александр Викторович
* All rights reserved.
*
* This software is proprietary and confidential.
* Unauthorized copying, modification, or distribution is prohibited.
*
* For licensing inquiries: info@hb3-accelerator.com
* Website: https://hb3-accelerator.com
* GitHub: https://github.com/VC-HB3-Accelerator
*/
# Скрипт для переноса зашифрованных данных между серверами
# Использование: ./migrate-encrypted-data.sh
# Конфигурация
SOURCE_HOST="localhost" # Исходный сервер
TARGET_HOST="new-server.com" # Целевой сервер
DB_NAME="dapp_db"
DB_USER="dapp_user"
DB_PASSWORD="dapp_password"
BACKUP_DIR="./migration_backups"
# Создаём папку для бэкапов
mkdir -p "$BACKUP_DIR"
echo "🔄 Перенос зашифрованных данных между серверами..."
# Проверяем наличие ключа шифрования
if [ ! -f "./ssl/keys/full_db_encryption.key" ]; then
echo "❌ Ключ шифрования не найден: ./ssl/keys/full_db_encryption.key"
exit 1
fi
# Функция для создания бэкапа с ключом
create_backup_with_key() {
echo "📦 Создание бэкапа с ключом шифрования..."
# Создаём бэкап базы данных
BACKUP_FILE="$BACKUP_DIR/encrypted_backup_$(date +%Y%m%d_%H%M%S).sql"
docker exec dapp-postgres pg_dump -U "$DB_USER" "$DB_NAME" > "$BACKUP_FILE"
# Создаём архив с бэкапом и ключом
ARCHIVE_FILE="$BACKUP_DIR/migration_package_$(date +%Y%m%d_%H%M%S).tar.gz"
tar -czf "$ARCHIVE_FILE" \
-C . "$BACKUP_FILE" \
-C . ssl/keys/full_db_encryption.key \
-C . encrypt-all-tables.sh \
-C . decrypt-all-tables.sh \
-C . backend/services/encryptedDataService.js
echo "✅ Бэкап создан: $ARCHIVE_FILE"
echo "📋 Содержимое архива:"
tar -tzf "$ARCHIVE_FILE"
}
# Функция для восстановления на целевом сервере
restore_on_target() {
echo "🔄 Восстановление на целевом сервере..."
# Распаковываем архив
tar -xzf "$ARCHIVE_FILE" -C .
# Восстанавливаем ключ шифрования
mkdir -p ./ssl/keys
cp ssl/keys/full_db_encryption.key ./ssl/keys/
chmod 600 ./ssl/keys/full_db_encryption.key
# Восстанавливаем базу данных
docker exec dapp-postgres psql -U "$DB_USER" "$DB_NAME" < "$BACKUP_FILE"
echo "✅ Данные восстановлены на целевом сервере"
}
# Функция для переноса через SSH
migrate_via_ssh() {
echo "🌐 Перенос через SSH..."
# Создаём бэкап
create_backup_with_key
# Отправляем архив на целевой сервер
scp "$ARCHIVE_FILE" user@$TARGET_HOST:/tmp/
# Выполняем восстановление на целевом сервере
ssh user@$TARGET_HOST << 'EOF'
cd /tmp
tar -xzf migration_package_*.tar.gz -C /path/to/app/
cd /path/to/app/
chmod 600 ssl/keys/full_db_encryption.key
docker exec dapp-postgres psql -U dapp_user dapp_db < encrypted_backup_*.sql
echo "✅ Миграция завершена"
EOF
echo "✅ Перенос через SSH завершён"
}
# Функция для переноса через S3/облачное хранилище
migrate_via_cloud() {
echo "☁️ Перенос через облачное хранилище..."
# Создаём бэкап
create_backup_with_key
# Загружаем в S3 (пример)
aws s3 cp "$ARCHIVE_FILE" s3://your-bucket/migrations/
echo "📤 Архив загружен в облачное хранилище"
echo "📥 Для восстановления скачайте архив и выполните:"
echo " tar -xzf migration_package_*.tar.gz"
echo " docker exec dapp-postgres psql -U dapp_user dapp_db < encrypted_backup_*.sql"
}
# Функция для переноса через USB/локальный носитель
migrate_via_local() {
echo "💾 Перенос через локальный носитель..."
# Создаём бэкап
create_backup_with_key
echo "📁 Архив создан: $ARCHIVE_FILE"
echo "💿 Скопируйте файл на USB-накопитель или другой носитель"
echo "🔄 На целевом сервере выполните:"
echo " tar -xzf migration_package_*.tar.gz"
echo " docker exec dapp-postgres psql -U dapp_user dapp_db < encrypted_backup_*.sql"
}
# Функция для проверки целостности
verify_migration() {
echo "🔍 Проверка целостности миграции..."
# Проверяем наличие ключа
if [ ! -f "./ssl/keys/full_db_encryption.key" ]; then
echo "❌ Ключ шифрования не найден"
return 1
fi
# Проверяем подключение к БД
if ! docker exec dapp-postgres pg_isready -U "$DB_USER" -d "$DB_NAME" > /dev/null 2>&1; then
echo "❌ Не удалось подключиться к базе данных"
return 1
fi
# Проверяем зашифрованные данные
docker exec dapp-postgres psql -U "$DB_USER" -d "$DB_NAME" -c "
SELECT
table_name,
COUNT(*) as encrypted_columns
FROM information_schema.columns
WHERE table_schema = 'public'
AND column_name LIKE '%_encrypted'
GROUP BY table_name
ORDER BY table_name;"
echo "✅ Проверка целостности завершена"
}
# Главное меню
echo "🎯 Выберите способ переноса:"
echo "1) Создать бэкап с ключом"
echo "2) Перенос через SSH"
echo "3) Перенос через облачное хранилище"
echo "4) Перенос через локальный носитель"
echo "5) Проверить целостность"
echo "6) Выход"
read -p "Выберите опцию (1-6): " choice
case $choice in
1)
create_backup_with_key
;;
2)
read -p "Введите IP целевого сервера: " TARGET_HOST
migrate_via_ssh
;;
3)
migrate_via_cloud
;;
4)
migrate_via_local
;;
5)
verify_migration
;;
6)
echo "👋 Выход"
exit 0
;;
*)
echo "❌ Неверный выбор"
exit 1
;;
esac
echo ""
echo "🎯 Инструкция по восстановлению на целевом сервере:"
echo "1. Скопируйте архив на целевой сервер"
echo "2. Распакуйте архив: tar -xzf migration_package_*.tar.gz"
echo "3. Восстановите ключ: chmod 600 ssl/keys/full_db_encryption.key"
echo "4. Восстановите БД: docker exec dapp-postgres psql -U dapp_user dapp_db < encrypted_backup_*.sql"
echo "5. Проверьте целостность: ./verify-migration.sh"