ваше сообщение коммита
This commit is contained in:
200
docs/MIGRATION_GUIDE.md
Normal file
200
docs/MIGRATION_GUIDE.md
Normal file
@@ -0,0 +1,200 @@
|
||||
# 🔄 Перенос зашифрованных данных между серверами
|
||||
|
||||
## 📋 Обзор
|
||||
|
||||
При переносе зашифрованных данных важно передать **и данные, и ключ шифрования** вместе.
|
||||
|
||||
## 🎯 Способы переноса
|
||||
|
||||
### **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
|
||||
```
|
||||
|
||||
## 🎯 Результат
|
||||
|
||||
После успешной миграции:
|
||||
- ✅ Все данные перенесены с шифрованием
|
||||
- ✅ Ключ шифрования восстановлен
|
||||
- ✅ Приложение работает на новом сервере
|
||||
- ✅ Безопасность данных сохранена
|
||||
|
||||
**Миграция зашифрованных данных завершена успешно!** 🔒
|
||||
Reference in New Issue
Block a user