200 lines
7.1 KiB
Markdown
200 lines
7.1 KiB
Markdown
# 🔄 Перенос зашифрованных данных между серверами
|
||
|
||
## 📋 Обзор
|
||
|
||
При переносе зашифрованных данных важно передать **и данные, и ключ шифрования** вместе.
|
||
|
||
## 🎯 Способы переноса
|
||
|
||
### **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
|
||
```
|
||
|
||
## 🎯 Результат
|
||
|
||
После успешной миграции:
|
||
- ✅ Все данные перенесены с шифрованием
|
||
- ✅ Ключ шифрования восстановлен
|
||
- ✅ Приложение работает на новом сервере
|
||
- ✅ Безопасность данных сохранена
|
||
|
||
**Миграция зашифрованных данных завершена успешно!** 🔒 |