✅ ЧТО СДЕЛАНО: - Поднят новый standalone OnlyOffice Document Server (порт 8083) - Настроен Nginx для доступа через office.clientright.ru:9443 - Создан open_file_v3_standalone.php для работы с новым OnlyOffice - Реализована поддержка прямых S3 URL (bucket публичный) - Добавлен s3_proxy.php с поддержкой Range requests - Создан onlyoffice_callback.php для сохранения (базовая версия) - Файлы успешно открываются и загружаются! ⚠️ TODO (на завтра): - Доработать onlyoffice_callback.php для сохранения обратно в ОРИГИНАЛЬНЫЙ путь в S3 - Добавить Redis маппинг documentKey → S3 path - Обновить CRM JS для использования open_file_v3_standalone.php - Протестировать сохранение файлов - Удалить тестовые файлы 📊 РЕЗУЛЬТАТ: - OnlyOffice Standalone РАБОТАЕТ! ✅ - Файлы открываются напрямую из S3 ✅ - Редактор загружается БЫСТРО ✅ - Автосохранение настроено ✅ (но нужна доработка callback)
6.8 KiB
6.8 KiB
🎉 ФИНАЛЬНАЯ СВОДКА - S3 МОНИТОРИНГ
✅ ЧТО РАБОТАЕТ:
1️⃣ S3 Monitor (Docker контейнер)
Контейнер: s3-monitor
Статус: ✅ Работает
Bucket: f9825c87-4e3558f6-f9b6-405c-ad3d-d1535c49b61c
Файлов: 24,523
Интервал: каждые 30 секунд
Автоперезапуск: ✅
Что делает:
- Каждые 30 секунд сканирует S3 bucket
- Получает ВСЕ файлы (24,523 штук через pagination)
- Сравнивает с предыдущим состоянием
- Публикует изменения в Redis
Команды:
docker logs s3-monitor -f # Логи в реальном времени
docker stop s3-monitor # Остановить
docker start s3-monitor # Запустить
docker restart s3-monitor # Перезапустить
2️⃣ Redis Bridge (Nextcloud → CRM Redis)
Процесс: /usr/bin/nodejs redis_bridge.js
Статус: ✅ Работает
Порт NC Redis: 127.0.0.1:6380
Порт CRM Redis: 147.45.146.17:6379
Что делает:
- Слушает Nextcloud Redis канал
notify_storage_update - Фильтрует временные файлы (.part, .lock, cache)
- Дедупликация - один file_id = одно событие (в течение 5 сек)
- Публикует в CRM Redis канал
crm:file:events
Команды:
tail -f redis_bridge.log # Логи
ps aux | grep redis_bridge # Статус
pkill -f redis_bridge.js # Остановить
nohup /usr/bin/nodejs redis_bridge.js > redis_bridge.log 2>&1 & # Запустить
3️⃣ Redis Канал (централизованная шина событий)
Host: 147.45.146.17
Port: 6379
Password: CRM_Redis_Pass_2025_Secure!
Channel: crm:file:events
📊 ФОРМАТ СОБЫТИЙ:
От S3 Monitor:
{
"type": "file_created",
"source": "s3_monitor",
"timestamp": "2025-10-30T20:49:31.593Z",
"path": "folder/subfolder/file.xlsx",
"filename": "file.xlsx",
"action": "created",
"size": 8224,
"etag": "7004954627252c9d0a7e6417f8325d07",
"last_modified": "2025-10-30T20:49:14.132Z"
}
От Nextcloud (redis_bridge):
{
"type": "file_update",
"source": "nextcloud",
"timestamp": "2025-10-30T20:52:21.236Z",
"storage_id": 4,
"path": "crm2/CRM_Active_Files/file.pdf",
"file_id": 42594,
"filename": "file.pdf",
"operation": "update"
}
Оба публикуются в один канал: crm:file:events
🎯 КАК ОБРАБАТЫВАТЬ В N8N:
Шаг 1: Импортируй workflow обработчик
Файл: n8n_s3_event_processor.json
Шаг 2: Настрой Redis Trigger
Node: Redis Subscribe
Channel: crm:file:events
Credential: CRM Redis
Шаг 3: Parse JSON (если нужно)
// n8n автоматически парсит, но если нужно:
const message = $json.message;
const event = typeof message === 'string' ? JSON.parse(message) : message;
return [{ json: event }];
Шаг 4: Фильтруй по типу
// Только новые файлы
$json.type === 'file_created'
// Только XLSX
$json.filename.endsWith('.xlsx')
// Только из определённой папки
$json.path.includes('Documents/')
Шаг 5: Обработай файл
Switch по расширению:
├─ .xlsx → Обработка Excel
├─ .pdf → OCR и извлечение данных
├─ .jpg → Обработка изображений
└─ Другие → Логирование
🧪 ПРОВЕРКА СОБЫТИЙ:
Подпишись на Redis:
redis-cli -h 147.45.146.17 -p 6379 -a 'CRM_Redis_Pass_2025_Secure!' \
SUBSCRIBE crm:file:events
Загрузи файл:
- Через Nextcloud WebUI
- Через S3 Browser
- Через aws-cli
Увидишь событие:
1) "message"
2) "crm:file:events"
3) "{\"type\":\"file_created\",\"filename\":\"test.pdf\",...}"
📋 ИСТОЧНИКИ СОБЫТИЙ:
| Источник | Метод | Задержка | Фильтры |
|---|---|---|---|
| Nextcloud WebUI | Redis Bridge | 1-2 сек | ✅ Дедупликация ✅ Фильтр .part ✅ Фильтр cache |
| S3 прямая загрузка | S3 Monitor | 0-30 сек | Нет |
| CRM API | Прямая публикация | 0 сек | Настраивается |
🔧 ДОПОЛНИТЕЛЬНАЯ ФИЛЬТРАЦИЯ В N8N:
Если всё ещё приходит много событий от Nextcloud, добавь в n8n:
// Фильтр: пропускаем дубликаты по filename + timestamp
const cache = $getWorkflowStaticData('node');
cache.recent = cache.recent || [];
const key = `${$json.filename}_${$json.file_id}`;
const now = Date.now();
// Очищаем старые (>10 секунд)
cache.recent = cache.recent.filter(item => (now - item.time) < 10000);
// Проверяем дубликат
if (cache.recent.find(item => item.key === key)) {
return []; // Пропускаем дубликат
}
// Добавляем в кеш
cache.recent.push({ key, time: now });
return [$input.item];
📁 ФАЙЛЫ:
Все в:
/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/
Рабочие скрипты:
- ✅
s3_monitor_docker.js- S3 мониторинг (запущен в Docker) - ✅
redis_bridge.js- Nextcloud→CRM мост (запущен) - ✅
.env.s3monitor- credentials для S3
N8N Workflows для импорта:
n8n_s3_event_processor.json- обработчик событий (НОВЫЙ!)n8n_nextcloud_activity_monitor.json- альтернатива через Activity APIn8n_s3_monitor_workflow.json- альтернатива S3 Monitor (если не хочешь Docker)
Документация:
SETUP_CHECKLIST.md- чек-лист настройкиS3_MONITORING_GUIDE.md- руководство по S3ARCHITECTURE.md- схема архитектурыNEXTCLOUD_API_OVERVIEW.md- обзор Nextcloud API
🎉 ГОТОВО!
Система полностью работает:
- ✅ S3 мониторинг (24,523 файла)
- ✅ Nextcloud мониторинг (с дедупликацией)
- ✅ Redis публикация
- ✅ Автоперезапуск
- ✅ Фильтрация дубликатов
Теперь импортируй n8n_s3_event_processor.json в n8n и начинай обрабатывать файлы! 🚀