ваше сообщение коммита

This commit is contained in:
2025-07-27 03:30:13 +03:00
parent 057fe6254c
commit 1835632be9
141 changed files with 32514 additions and 6661 deletions

200
docs/MIGRATION_GUIDE.md Normal file
View 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
```
## 🎯 Результат
После успешной миграции:
-Все данные перенесены с шифрованием
- ✅ Ключ шифрования восстановлен
- ✅ Приложение работает на новом сервере
- ✅ Безопасность данных сохранена
**Миграция зашифрованных данных завершена успешно!** 🔒