- Исправлен N8N_CODE_PROCESS_UPLOADED_FILES_FIXED.js: использовать uploads_field_labels[0] вместо [grp] - Создан SQL_CLAIMSAVE_FIXED_NEW_FLOW_DEDUP.sql с дедупликацией documents_meta - Создан SQL_CLEANUP_DOCUMENTS_META_DUPLICATES.sql для очистки существующих дубликатов - Создан полный уникальный индекс idx_document_texts_hash_unique на document_texts(file_hash) - Добавлен SESSION_LOG_2025-11-28_documents_dedup.md с описанием всех изменений Fixes: - field_label теперь корректно отображает 'Переписка' вместо 'group-2' - documents_meta не накапливает дубликаты при повторных сохранениях - ON CONFLICT (file_hash) теперь работает для document_texts
4.7 KiB
4.7 KiB
Инструкция по восстановлению удаленных файлов и защите от повторных удалений
📋 Что было сделано:
- ✅ Создан скрипт для настройки Nextcloud (
fix_nextcloud_settings.php) - ✅ Создан скрипт для восстановления файлов (
restore_all_deleted_files.php) - ✅ Создан скрипт для регулярной индексации (
nextcloud_scan_files.sh)
🚀 Порядок выполнения:
Шаг 1: Настройка Nextcloud (защита от удалений)
cd /var/www/fastuser/data/www/crm.clientright.ru
php fix_nextcloud_settings.php
Что делает:
- Отключает
DeleteOrphanedItems(главная причина удалений) - Включает
readonlyдля External Storage - Увеличивает retention корзины до 365 дней
- Создает скрипт для регулярной индексации
Шаг 2: Восстановление файлов (сначала проверка)
Сначала проверка (dry-run):
php restore_all_deleted_files.php --dry-run
Это покажет, сколько файлов будет восстановлено без реального восстановления.
Ограничение количества (для теста):
php restore_all_deleted_files.php --dry-run 100
Восстановление всех файлов:
php restore_all_deleted_files.php
Восстановление с ограничением (для безопасности):
php restore_all_deleted_files.php "" 1000
Восстановление только файлов проекта:
php restore_all_deleted_files.php "" "" "crm2/CRM_Active_Files/Documents/Project/"
Шаг 3: Настройка регулярной индексации
Добавить в crontab:
crontab -e
Добавить строку:
0 */6 * * * /var/www/fastuser/data/www/crm.clientright.ru/nextcloud_scan_files.sh
Это будет сканировать файлы каждые 6 часов.
Или сканировать только внешнее хранилище (быстрее):
Отредактируйте nextcloud_scan_files.sh и раскомментируйте строку:
docker exec -u www-data nextcloud-fresh php occ files:scan --path="/crm"
📊 Статистика удалений:
- Всего delete markers: ~25,200
- Пик удалений: 1 ноября 2025, 09:00 утра (7,080 файлов)
- Причина: DeleteOrphanedItems в Nextcloud
⚠️ ВАЖНО:
- Сначала настройте Nextcloud (Шаг 1), чтобы предотвратить новые удаления
- Проверьте dry-run перед массовым восстановлением
- Восстанавливайте постепенно (по 1000-5000 файлов за раз)
- Проверяйте логи после восстановления
🔍 Проверка статуса:
Проверить статус задач Nextcloud:
docker exec -u www-data nextcloud-fresh php occ background-job:list
Проверить настройки External Storage:
docker exec -u www-data nextcloud-fresh php occ files_external:list
Проверить retention корзины:
docker exec -u www-data nextcloud-fresh php occ config:app:get files trashbin_retention_obligation
Проверить логи восстановления:
ls -lh /var/www/fastuser/data/www/crm.clientright.ru/restore_log_*.json
🛡️ Защита от повторных удалений:
После выполнения всех шагов система будет защищена:
- ✅ DeleteOrphanedItems отключен
- ✅ External Storage в режиме readonly
- ✅ Retention корзины увеличен до 365 дней
- ✅ Регулярная индексация файлов настроена
📝 Логи:
- Логи восстановления:
restore_log_YYYY-MM-DD_HH-MM-SS.json - Логи индексации:
/var/log/nextcloud_scan.log
🆘 Если что-то пошло не так:
- Проверьте логи восстановления
- Проверьте доступность Docker контейнера Nextcloud
- Проверьте права доступа к S3
- Проверьте логи Nextcloud:
docker logs nextcloud-fresh