Files
DLE/docs/MIGRATION_GUIDE.md

7.5 KiB
Raw Blame History

🔄 Перенос зашифрованных данных между серверами

📋 Обзор

При переносе зашифрованных данных важно передать и данные, и ключ шифрования вместе.

🎯 Способы переноса

1. 🔑 Перенос с ключом шифрования (Рекомендуемый)

Создание миграционного пакета:

chmod +x migrate-encrypted-data.sh
./migrate-encrypted-data.sh

Что включается в пакет:

  • Бэкап базы данных (зашифрованные данные)
  • Ключ шифрования (full_db_encryption.key)
  • Скрипты шифрования/расшифровки
  • Сервис для работы с зашифрованными данными

2. 🌐 Перенос через SSH

# На исходном сервере
./migrate-encrypted-data.sh
# Выберите опцию 2 - SSH

# Автоматически создастся архив и отправится на целевой сервер

3. ☁️ Перенос через облачное хранилище

# На исходном сервере
./migrate-encrypted-data.sh
# Выберите опцию 3 - Облачное хранилище

# Архив загрузится в S3/другое облачное хранилище
# Скачайте на целевой сервер и восстановите

4. 💾 Перенос через локальный носитель

# На исходном сервере
./migrate-encrypted-data.sh
# Выберите опцию 4 - Локальный носитель

# Скопируйте архив на USB/SSD/другой носитель
# Перенесите на целевой сервер

🚀 Пошаговая инструкция

Этап 1: Подготовка исходного сервера

A. Создание миграционного пакета:

# Создаём полный бэкап с ключом
./migrate-encrypted-data.sh
# Выберите опцию 1 - "Создать бэкап с ключом"

# Результат: migration_package_YYYYMMDD_HHMMSS.tar.gz

B. Проверка содержимого:

# Просмотр содержимого архива
tar -tzf migration_package_*.tar.gz

# Должно содержать:
# - encrypted_backup_*.sql (бэкап БД)
# - ssl/keys/full_db_encryption.key (ключ шифрования)
# - encrypt-all-tables.sh (скрипт шифрования)
# - decrypt-all-tables.sh (скрипт расшифровки)
# - backend/services/encryptedDataService.js (сервис)

Этап 2: Перенос на целевой сервер

A. Копирование архива:

# Способ 1: SCP
scp migration_package_*.tar.gz user@target-server:/tmp/

# Способ 2: USB/локальный носитель
# Скопируйте файл на носитель и перенесите физически

# Способ 3: Облачное хранилище
# Скачайте архив из S3/другого хранилища

B. Восстановление на целевом сервере:

# 1. Распаковка архива
tar -xzf migration_package_*.tar.gz -C /path/to/your/app/

# 2. Восстановление ключа шифрования
chmod 600 ssl/keys/full_db_encryption.key

# 3. Восстановление базы данных
docker exec dapp-postgres psql -U dapp_user dapp_db < encrypted_backup_*.sql

# 4. Проверка целостности
./migrate-encrypted-data.sh
# Выберите опцию 5 - "Проверить целостность"

Этап 3: Проверка работоспособности

A. Проверка подключения к БД:

# Проверяем подключение
docker exec dapp-postgres pg_isready -U dapp_user -d dapp_db

# Проверяем зашифрованные данные
docker exec dapp-postgres psql -U dapp_user -d dapp_db -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;"

B. Тестирование приложения:

# Запускаем приложение
docker-compose up -d

# Проверяем API
curl -X GET http://localhost:8000/api/health
curl -X GET http://localhost:8000/api/users

🔐 Безопасность при переносе

1. Защита ключа шифрования:

# Правильные права доступа
chmod 600 ssl/keys/full_db_encryption.key

# Резервная копия ключа
cp ssl/keys/full_db_encryption.key ssl/keys/full_db_encryption.key.backup

# Проверка целостности
sha256sum ssl/keys/full_db_encryption.key

2. Безопасная передача:

  • Используйте SSH для передачи
  • Шифруйте архив дополнительно
  • Используйте защищённые каналы связи

3. Очистка после переноса:

# Удаляем временные файлы
rm -rf migration_backups/
rm -f /tmp/migration_package_*.tar.gz

# Очищаем историю команд
history -c

⚠️ Важные замечания

1. Совместимость версий:

  • Убедитесь, что версии PostgreSQL одинаковые
  • Проверьте совместимость расширений (pgcrypto)
  • Убедитесь в совместимости Docker образов

2. Размер данных:

  • Зашифрованные данные занимают больше места
  • Учитывайте размер при планировании переноса
  • Используйте сжатие для больших баз данных

3. Время простоя:

  • Миграция может занять время
  • Планируйте время простоя
  • Используйте репликацию для минимизации простоя

4. Восстановление:

# В случае проблем с миграцией
# Восстановите из резервной копии
docker exec dapp-postgres psql -U dapp_user -d dapp_db < backup.sql

# Восстановите ключ
cp ssl/keys/full_db_encryption.key.backup ssl/keys/full_db_encryption.key

🎯 Результат

После успешной миграции:

  • Все данные перенесены с шифрованием
  • Ключ шифрования восстановлен
  • Приложение работает на новом сервере
  • Безопасность данных сохранена

Миграция зашифрованных данных завершена успешно! 🔒