Files
crm.clientright.ru/crm_extensions/file_storage/AUTO_S3_MIGRATION_README.md

6.3 KiB
Raw Blame History

🚀 Auto S3 Migration System

📋 Описание

Универсальная система автоматической миграции локальных файлов в S3. Работает с любыми файлами CRM: PDFMaker, загрузки пользователей, документы и т.д.

🔧 Компоненты системы

1. auto_migrate_to_s3.php - Основной скрипт миграции

  • Находит новые локальные файлы (тип 'I', без S3 метаданных)
  • Загружает их в S3
  • Обновляет базу данных (S3 метаданные, тип 'E')
  • Удаляет локальные файлы после успешной миграции
  • Создает резервные копии перед изменениями
  • Подробное логирование

2. run_auto_s3_migration.sh - Wrapper скрипт

  • Удобный запуск с параметрами через переменные окружения
  • Логирование времени выполнения
  • Настройка приоритета процесса (nice/ionice)

3. trigger_s3_migration.php - Программный хук

  • Функция triggerS3Migration() для вызова из кода
  • Асинхронный и синхронный режимы
  • Можно интегрировать в любые части CRM

🚀 Использование

Ручной запуск (тест)

# Dry-run режим (безопасно)
cd /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage
php auto_migrate_to_s3.php --limit=10 --age-minutes=60 --dry-run=1

# Реальная миграция
php auto_migrate_to_s3.php --limit=20 --age-minutes=30 --dry-run=0

Через wrapper скрипт

# Dry-run
DRY_RUN=1 AGE_MINUTES=10 LIMIT=5 ./run_auto_s3_migration.sh

# Реальная миграция
DRY_RUN=0 AGE_MINUTES=15 LIMIT=20 ./run_auto_s3_migration.sh

Программный вызов

// В любом месте кода CRM
include_once 'crm_extensions/file_storage/trigger_s3_migration.php';

// Запуск в фоне (рекомендуется)
triggerS3Migration(5, 10, true); // 5 минут, 10 файлов, асинхронно

// Синхронный запуск
$success = triggerS3Migration(2, 5, false);

Автоматизация через Cron

Рекомендуемая настройка:

# Каждые 5 минут - миграция файлов младше 10 минут
*/5 * * * * cd /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage && DRY_RUN=0 AGE_MINUTES=10 LIMIT=20 ./run_auto_s3_migration.sh >> /var/www/fastuser/data/www/crm.clientright.ru/logs/cron_s3_migration.log 2>&1

Для тестирования:

# Каждую минуту в dry-run режиме
* * * * * cd /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage && DRY_RUN=1 AGE_MINUTES=5 LIMIT=5 ./run_auto_s3_migration.sh >> /var/www/fastuser/data/www/crm.clientright.ru/logs/cron_s3_migration_test.log 2>&1

📊 Параметры

Параметр Описание По умолчанию
--limit Максимум файлов за раз 50
--age-minutes Возраст файлов в минутах 5
--dry-run Режим тестирования (0/1) 0 (false)
--force Принудительная миграция 0 (false)

📁 Логи и мониторинг

Основной лог:

tail -f /var/www/fastuser/data/www/crm.clientright.ru/logs/auto_s3_migration.log

Cron лог:

tail -f /var/www/fastuser/data/www/crm.clientright.ru/logs/cron_s3_migration.log

Резервные копии:

/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/backups/auto_migration/

Преимущества решения

  1. 🛡️ Безопасность - Не трогает исходный код PDFMaker или других модулей
  2. 🔄 Универсальность - Работает с любыми файлами CRM
  3. Гибкость - Можно запускать по расписанию, вручную или программно
  4. 📊 Мониторинг - Подробные логи и статистика
  5. 🔙 Откат - Резервные копии всех изменений
  6. 🎯 Точность - Фильтрация по времени создания файлов

🎯 Алгоритм работы

  1. Поиск файлов - находит локальные файлы (filelocationtype='I', без s3_key)
  2. Фильтрация - только недавно созданные файлы (параметр age-minutes)
  3. Поиск на диске - находит физический файл в структуре storage
  4. Загрузка в S3 - использует существующий S3StorageService
  5. Обновление БД - добавляет S3 метаданные, меняет тип на 'E'
  6. Очистка - удаляет локальный файл после успешной миграции
  7. Логирование - записывает все операции в лог

🚨 Безопасность

  • Dry-run по умолчанию - безопасное тестирование
  • Резервные копии - перед каждым изменением БД
  • Проверка размера файла - сверка с БД
  • Обработка ошибок - продолжает работу при сбоях
  • Лимиты - ограничение количества файлов за раз

🔧 Настройка

  1. Установка cron задачи (рекомендуется)
  2. Мониторинг логов первые дни
  3. Настройка параметров под нагрузку системы

Система готова к использованию! 🎉