204 lines
7.4 KiB
Bash
Executable File
204 lines
7.4 KiB
Bash
Executable File
#!/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" |