✅ ЧТО СДЕЛАНО: - Поднят новый 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)
7.8 KiB
🔍 Руководство по мониторингу S3
Проблема
Тебе нужно ловить любые изменения файлов в S3 bucket, даже если они загружены:
- Вручную через S3 Browser / Cyberduck
- Из внешних скриптов
- Не через CRM или Nextcloud
❌ Почему не Event Notifications?
TWC Storage не поддерживает S3 Event Notifications официально (не документировано).
✅ РЕШЕНИЕ: n8n Workflow с Polling
Как работает:
n8n каждые 30 сек → Список файлов в S3 → Сравнение с предыдущим состоянием →
→ Обнаружены изменения → Публикация в Redis → Твои обработчики
📋 Пошаговая инструкция
Шаг 1: Импортируй workflow в n8n
- Открой n8n: https://n8n.clientright.pro
- Создай новый workflow
- Нажми Import from File
- Загрузи файл:
n8n_s3_monitor_workflow.json
Шаг 2: Настрой S3 Credentials
В n8n создай credentials:
Тип: AWS S3
Имя: TWC S3
Параметры:
Access Key ID: [твой S3 ключ из Nextcloud]
Secret Access Key: [твой S3 секрет из Nextcloud]
Region: ru-1
Custom Endpoints: ✅ (включить!)
S3 Endpoint: https://s3.twcstorage.ru
Force Path Style: ✅ (включить!)
Как получить ключи:
docker exec nextcloud-fresh php occ files_external:list --output=json | jq -r '.[0].configuration | "Key: \(.key)\nSecret: \(.secret)\nBucket: \(.bucket)"'
Шаг 3: Настрой Redis Credentials
Тип: Redis
Имя: CRM Redis
Параметры:
Host: 147.45.146.17
Port: 6379
Password: CRM_Redis_Pass_2025_Secure!
Database: 0
Шаг 4: Настрой Environment Variables (если нужно)
В n8n Settings → Environment Variables:
S3_BUCKET=f9825c87-18698658-c378-4aa7-91cc-0c131bebccda
WEBHOOK_URL=https://твой-эндпоинт.com/webhook (опционально)
Шаг 5: Настрой Bucket и Prefix
В ноде List S3 Files:
Bucket Name: укажи свой bucket (или используй{{$env.S3_BUCKET}})Prefix: укажи папку для мониторинга (напримерnextcloud/data/admin/files/)- Оставь пустым для мониторинга всего bucket
Шаг 6: Активируй Workflow
- Нажми Active (включи workflow)
- Первый запуск создаст начальное состояние файлов
- Последующие запуски будут сравнивать с предыдущим состоянием
🧪 Тестирование
1. Загрузи тестовый файл в S3
Через S3 Browser, Cyberduck или aws-cli:
echo "test" > test.txt
aws s3 cp test.txt s3://твой-bucket/test.txt \
--endpoint-url https://s3.twcstorage.ru
2. Подожди 30 секунд (интервал polling)
3. Проверь Redis
redis-cli -h 147.45.146.17 -p 6379 -a 'CRM_Redis_Pass_2025_Secure!' \
SUBSCRIBE crm:file:events
Должно прийти:
{
"type": "file_created",
"source": "s3_monitor",
"timestamp": "2025-10-30T12:34:56Z",
"path": "test.txt",
"filename": "test.txt",
"size": 5,
"etag": "\"098f6bcd4621d373cade4e832627b4f6\"",
"last_modified": "2025-10-30T12:34:50Z"
}
⚙️ Настройка интервала
Измени интервал проверки в ноде "Каждые 30 секунд":
- 10 секунд - почти реал-тайм, но больше нагрузка на S3 API
- 30 секунд - оптимальный баланс (рекомендуется)
- 60 секунд - экономия API запросов
Важно: TWC может лимитировать количество API запросов!
📊 Типы событий
Workflow генерирует 3 типа событий:
file_created- новый файл появился в bucketfile_modified- файл изменился (другой ETag)file_deleted- файл удалён из bucket
🔄 Обработка событий в других workflows
Создай новый workflow в n8n:
Trigger: Redis (Subscribe)
Host: 147.45.146.17
Port: 6379
Password: CRM_Redis_Pass_2025_Secure!
Channel: crm:file:events
Filter: По типу события
// Обрабатываем только создание файлов
return $json.type === 'file_created';
Switch: По расширению файла
const ext = $json.filename.split('.').pop().toLowerCase();
switch(ext) {
case 'pdf':
return [0]; // Обработка PDF
case 'jpg':
case 'png':
return [1]; // Обработка изображений
case 'xlsx':
case 'csv':
return [2]; // Обработка таблиц
default:
return [3]; // Остальные файлы
}
🎯 Пример: Автоматическая обработка ERV файлов
Redis Subscribe (crm:file:events) →
→ Filter (filename contains "erv") →
→ Download from S3 →
→ Process ERV →
→ Upload to CRM →
→ Notify user
📝 Мониторинг нескольких buckets
Если тебе нужно мониторить несколько buckets:
- Вариант 1: Создай отдельный workflow для каждого bucket
- Вариант 2: Используй Loop в workflow для перебора buckets
🚨 Важные замечания
- State сохраняется в Static Data - не удаляй workflow без экспорта!
- Первый запуск не генерирует события - только создаёт начальное состояние
- ETag используется для определения изменений - если файл перезаписан с тем же содержимым, событие не сработает
- Polling = задержка - событие придёт через 0-30 секунд после реального изменения
🔧 Troubleshooting
Проблема: Не приходят события
- Проверь что workflow Active (зелёная галочка)
- Проверь логи workflow (Execute → View executions)
- Проверь credentials (S3 и Redis)
Проблема: Слишком много событий
- Уменьши область мониторинга через
Prefix - Увеличь интервал polling до 60-120 секунд
Проблема: Пропускаются изменения
- Уменьши интервал до 10-15 секунд
- Проверь что State сохраняется (Static Data)
📚 Дополнительные материалы
🎉 Готово!
Теперь у тебя есть полноценный мониторинг S3 bucket в реальном времени!
Все изменения файлов будут автоматически публиковаться в Redis канал crm:file:events,
откуда их могут подхватить другие твои системы (CRM, другие n8n workflows, и т.д.)