# 🔄 Перенос зашифрованных данных между серверами ## 📋 Обзор При переносе зашифрованных данных важно передать **и данные, и ключ шифрования** вместе. ## 🎯 Способы переноса ### **1. 🔑 Перенос с ключом шифрования (Рекомендуемый)** #### **Создание миграционного пакета:** ```bash chmod +x migrate-encrypted-data.sh ./migrate-encrypted-data.sh ``` #### **Что включается в пакет:** - ✅ Бэкап базы данных (зашифрованные данные) - ✅ Ключ шифрования (`full_db_encryption.key`) - ✅ Скрипты шифрования/расшифровки - ✅ Сервис для работы с зашифрованными данными ### **2. 🌐 Перенос через SSH** ```bash # На исходном сервере ./migrate-encrypted-data.sh # Выберите опцию 2 - SSH # Автоматически создастся архив и отправится на целевой сервер ``` ### **3. ☁️ Перенос через облачное хранилище** ```bash # На исходном сервере ./migrate-encrypted-data.sh # Выберите опцию 3 - Облачное хранилище # Архив загрузится в S3/другое облачное хранилище # Скачайте на целевой сервер и восстановите ``` ### **4. 💾 Перенос через локальный носитель** ```bash # На исходном сервере ./migrate-encrypted-data.sh # Выберите опцию 4 - Локальный носитель # Скопируйте архив на USB/SSD/другой носитель # Перенесите на целевой сервер ``` ## 🚀 Пошаговая инструкция ### **Этап 1: Подготовка исходного сервера** #### **A. Создание миграционного пакета:** ```bash # Создаём полный бэкап с ключом ./migrate-encrypted-data.sh # Выберите опцию 1 - "Создать бэкап с ключом" # Результат: migration_package_YYYYMMDD_HHMMSS.tar.gz ``` #### **B. Проверка содержимого:** ```bash # Просмотр содержимого архива 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. Копирование архива:** ```bash # Способ 1: SCP scp migration_package_*.tar.gz user@target-server:/tmp/ # Способ 2: USB/локальный носитель # Скопируйте файл на носитель и перенесите физически # Способ 3: Облачное хранилище # Скачайте архив из S3/другого хранилища ``` #### **B. Восстановление на целевом сервере:** ```bash # 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. Проверка подключения к БД:** ```bash # Проверяем подключение 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. Тестирование приложения:** ```bash # Запускаем приложение docker-compose up -d # Проверяем API curl -X GET http://localhost:8000/api/health curl -X GET http://localhost:8000/api/users ``` ## 🔐 Безопасность при переносе ### **1. Защита ключа шифрования:** ```bash # Правильные права доступа 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. Очистка после переноса:** ```bash # Удаляем временные файлы rm -rf migration_backups/ rm -f /tmp/migration_package_*.tar.gz # Очищаем историю команд history -c ``` ## ⚠️ Важные замечания ### **1. Совместимость версий:** - Убедитесь, что версии PostgreSQL одинаковые - Проверьте совместимость расширений (pgcrypto) - Убедитесь в совместимости Docker образов ### **2. Размер данных:** - Зашифрованные данные занимают больше места - Учитывайте размер при планировании переноса - Используйте сжатие для больших баз данных ### **3. Время простоя:** - Миграция может занять время - Планируйте время простоя - Используйте репликацию для минимизации простоя ### **4. Восстановление:** ```bash # В случае проблем с миграцией # Восстановите из резервной копии 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 ``` ## 🎯 Результат После успешной миграции: - ✅ Все данные перенесены с шифрованием - ✅ Ключ шифрования восстановлен - ✅ Приложение работает на новом сервере - ✅ Безопасность данных сохранена **Миграция зашифрованных данных завершена успешно!** 🔒