6.7 KiB
6.7 KiB
n8n Comment Files S3 Migration
Описание
Скрипт n8n_comment_migration_clean.php предназначен для автоматической миграции файлов комментариев из локального хранилища в S3 с выводом ТОЛЬКО чистого JSON без логов для максимально удобного парсинга в n8n.
Особенности
- Работает с файлами комментариев (vtiger_attachments + vtiger_modcomments)
- Переносит по 100 файлов за раз (настраивается)
- Помечает перенесенные файлы в БД (s3_key, s3_bucket, s3_etag)
- Не повторяет перенос уже обработанных файлов
- Удаляет локальные файлы после успешного переноса
- Помечает проблемные файлы вместо удаления записей
Использование
Прямой вызов PHP
php n8n_comment_migration_clean.php [LIMIT] [DRY_RUN]
Через bash wrapper (рекомендуется)
./n8n_comment_migration.sh
Переменные окружения
LIMIT- количество файлов для обработки (по умолчанию: 100)DRY_RUN- режим тестирования без изменений (0/1, по умолчанию: 0)
Формат JSON ответа
Успешное выполнение
{"status":"success","timestamp":"2025-09-22 15:07:01","summary":{"total_processed":1,"successfully_migrated":1,"failed":0,"marked_problematic":0,"dry_run":false},"migrated_files":[{"attachmentsid":106,"modcommentsid":105,"filename":"определение_от_25.01.2023.pdf","s3_url":"https://s3.twcstorage.ru/...","s3_key":"crm2/CRM_Active_Files/Documents/106/...","local_file_deleted":true}],"problematic_files":[],"exit_code":0}
Предупреждение (проблемные файлы)
{"status":"warning","timestamp":"2025-09-22 15:07:01","summary":{"total_processed":2,"successfully_migrated":1,"failed":0,"marked_problematic":1,"dry_run":false},"migrated_files":[{"attachmentsid":106,"modcommentsid":105,"filename":"file.pdf","s3_url":"https://s3.twcstorage.ru/...","s3_key":"crm2/CRM_Active_Files/Documents/106/...","local_file_deleted":true}],"problematic_files":[{"attachmentsid":107,"modcommentsid":106,"original_filename":"problematic_file.pdf","problematic_filename":"[PROBLEM_2025-09-22_15-07-01] problematic_file.pdf","reason":"Physical file not found"}],"exit_code":1}
Коды выхода
0- Успех1- Предупреждение (есть проблемные файлы)2- Частичная ошибка (есть неудачные миграции)3- Критическая ошибка (проблемы с БД или S3)
Поля ответа
summary
total_processed- общее количество обработанных файловsuccessfully_migrated- успешно мигрированныхfailed- неудачных миграцийmarked_problematic- помеченных как проблемныеdry_run- режим тестирования
migrated_files
Массив успешно мигрированных файлов:
attachmentsid- ID файла в vtiger_attachmentsmodcommentsid- ID комментарияfilename- имя файлаs3_url- URL в S3 (только для реальной миграции)s3_key- ключ в S3 (только для реальной миграции)local_file_deleted- удален ли локальный файл (только для реальной миграции)local_file_path- путь к локальному файлу (только для dry_run)dry_run- режим тестирования (только для dry_run)
problematic_files
Массив проблемных файлов:
attachmentsid- ID файла в vtiger_attachmentsmodcommentsid- ID комментарияoriginal_filename- оригинальное имя файлаproblematic_filename- новое имя с префиксом (только для реальной миграции)reason- причина проблемы
Интеграция с n8n
SSH Node
ssh user@server "/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/n8n_comment_migration.sh"
Парсинг JSON
// В n8n JavaScript Code
const result = JSON.parse($input.all()[0].json.stdout);
if (result.status === 'success') {
return {
success: true,
migrated: result.summary.successfully_migrated,
problematic: result.summary.marked_problematic
};
} else if (result.status === 'warning') {
return {
warning: true,
migrated: result.summary.successfully_migrated,
problematic: result.problematic_files
};
} else {
return {
error: true,
message: result.error || 'Unknown error'
};
}
Мониторинг
Логи
- Основной лог:
/var/www/fastuser/data/www/crm.clientright.ru/logs/n8n_s3_migration.log - Лог комментариев:
/var/www/fastuser/data/www/crm.clientright.ru/logs/n8n_comment_migration.log
Cron задача
# Каждые 10 минут для комментариев
*/10 * * * * /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/n8n_comment_migration.sh
Отличия от основного скрипта
- Работает с vtiger_attachments вместо vtiger_notes
- Связан с комментариями через vtiger_modcomments
- Добавлены поля S3 в таблицу vtiger_attachments (s3_key, s3_bucket, s3_etag, s3_url)
- Сохраняет оригинальное имя файла в поле
nameдля корректного отображения в CRM - S3 URL сохраняется в отдельном поле
s3_url - Больший лимит по умолчанию (100 файлов)
- Отдельная логика поиска файлов для комментариев
Безопасность
- Скрипт работает только с файлами без S3 метаданных
- Исключает системные файлы (file_15_*, пустые имена)
- Помечает проблемные файлы вместо удаления записей
- Логирует все операции для аудита
- Не повторяет перенос уже обработанных файлов