- Исправлен 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
147 lines
4.7 KiB
Markdown
147 lines
4.7 KiB
Markdown
# Инструкция по восстановлению удаленных файлов и защите от повторных удалений
|
||
|
||
## 📋 Что было сделано:
|
||
|
||
1. ✅ Создан скрипт для настройки Nextcloud (`fix_nextcloud_settings.php`)
|
||
2. ✅ Создан скрипт для восстановления файлов (`restore_all_deleted_files.php`)
|
||
3. ✅ Создан скрипт для регулярной индексации (`nextcloud_scan_files.sh`)
|
||
|
||
---
|
||
|
||
## 🚀 Порядок выполнения:
|
||
|
||
### Шаг 1: Настройка Nextcloud (защита от удалений)
|
||
|
||
```bash
|
||
cd /var/www/fastuser/data/www/crm.clientright.ru
|
||
php fix_nextcloud_settings.php
|
||
```
|
||
|
||
**Что делает:**
|
||
- Отключает `DeleteOrphanedItems` (главная причина удалений)
|
||
- Включает `readonly` для External Storage
|
||
- Увеличивает retention корзины до 365 дней
|
||
- Создает скрипт для регулярной индексации
|
||
|
||
---
|
||
|
||
### Шаг 2: Восстановление файлов (сначала проверка)
|
||
|
||
**Сначала проверка (dry-run):**
|
||
```bash
|
||
php restore_all_deleted_files.php --dry-run
|
||
```
|
||
|
||
Это покажет, сколько файлов будет восстановлено без реального восстановления.
|
||
|
||
**Ограничение количества (для теста):**
|
||
```bash
|
||
php restore_all_deleted_files.php --dry-run 100
|
||
```
|
||
|
||
**Восстановление всех файлов:**
|
||
```bash
|
||
php restore_all_deleted_files.php
|
||
```
|
||
|
||
**Восстановление с ограничением (для безопасности):**
|
||
```bash
|
||
php restore_all_deleted_files.php "" 1000
|
||
```
|
||
|
||
**Восстановление только файлов проекта:**
|
||
```bash
|
||
php restore_all_deleted_files.php "" "" "crm2/CRM_Active_Files/Documents/Project/"
|
||
```
|
||
|
||
---
|
||
|
||
### Шаг 3: Настройка регулярной индексации
|
||
|
||
**Добавить в crontab:**
|
||
```bash
|
||
crontab -e
|
||
```
|
||
|
||
**Добавить строку:**
|
||
```
|
||
0 */6 * * * /var/www/fastuser/data/www/crm.clientright.ru/nextcloud_scan_files.sh
|
||
```
|
||
|
||
Это будет сканировать файлы каждые 6 часов.
|
||
|
||
**Или сканировать только внешнее хранилище (быстрее):**
|
||
Отредактируйте `nextcloud_scan_files.sh` и раскомментируйте строку:
|
||
```bash
|
||
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
|
||
|
||
---
|
||
|
||
## ⚠️ ВАЖНО:
|
||
|
||
1. **Сначала настройте Nextcloud** (Шаг 1), чтобы предотвратить новые удаления
|
||
2. **Проверьте dry-run** перед массовым восстановлением
|
||
3. **Восстанавливайте постепенно** (по 1000-5000 файлов за раз)
|
||
4. **Проверяйте логи** после восстановления
|
||
|
||
---
|
||
|
||
## 🔍 Проверка статуса:
|
||
|
||
**Проверить статус задач Nextcloud:**
|
||
```bash
|
||
docker exec -u www-data nextcloud-fresh php occ background-job:list
|
||
```
|
||
|
||
**Проверить настройки External Storage:**
|
||
```bash
|
||
docker exec -u www-data nextcloud-fresh php occ files_external:list
|
||
```
|
||
|
||
**Проверить retention корзины:**
|
||
```bash
|
||
docker exec -u www-data nextcloud-fresh php occ config:app:get files trashbin_retention_obligation
|
||
```
|
||
|
||
**Проверить логи восстановления:**
|
||
```bash
|
||
ls -lh /var/www/fastuser/data/www/crm.clientright.ru/restore_log_*.json
|
||
```
|
||
|
||
---
|
||
|
||
## 🛡️ Защита от повторных удалений:
|
||
|
||
После выполнения всех шагов система будет защищена:
|
||
|
||
1. ✅ DeleteOrphanedItems отключен
|
||
2. ✅ External Storage в режиме readonly
|
||
3. ✅ Retention корзины увеличен до 365 дней
|
||
4. ✅ Регулярная индексация файлов настроена
|
||
|
||
---
|
||
|
||
## 📝 Логи:
|
||
|
||
- Логи восстановления: `restore_log_YYYY-MM-DD_HH-MM-SS.json`
|
||
- Логи индексации: `/var/log/nextcloud_scan.log`
|
||
|
||
---
|
||
|
||
## 🆘 Если что-то пошло не так:
|
||
|
||
1. Проверьте логи восстановления
|
||
2. Проверьте доступность Docker контейнера Nextcloud
|
||
3. Проверьте права доступа к S3
|
||
4. Проверьте логи Nextcloud: `docker logs nextcloud-fresh`
|
||
|