- Создан API create_document_with_text.php для создания DOCX/XLSX/PPTX с текстом от AI - Поддержка Markdown форматирования (заголовки, жирный, курсив, списки, код) - Установлен PHPWord для красивого форматирования документов - Исправлены пути сохранения (crm2/CRM_Active_Files/... без /crm/ в начале) - Замена пробелов на подчеркивания в именах папок - Создана документация для AI и разработчиков - Добавлены API для работы с шаблонами Nextcloud
284 lines
11 KiB
Markdown
284 lines
11 KiB
Markdown
# 🚨 КРИТИЧЕСКИЙ ОТЧЁТ: МАССОВОЕ УДАЛЕНИЕ ФАЙЛОВ
|
||
|
||
## 📅 ДАТА ИНЦИДЕНТА:
|
||
**30 октября 2025, ~10:09**
|
||
|
||
---
|
||
|
||
## 📊 МАСШТАБ ПРОБЛЕМЫ:
|
||
|
||
### Цифры:
|
||
- **1,015 проектов** имеют файлы в БД CRM
|
||
- **1,003 проекта** (~99%) в корзине Nextcloud
|
||
- **10,532 файлов** записей в БД
|
||
- **10,375 файлов** физически в корзине
|
||
- **12 GB** данных в корзине
|
||
|
||
### География удаления:
|
||
```
|
||
/var/lib/docker/volumes/root_nextcloud_data/_data/data/admin/files_trashbin/files/
|
||
```
|
||
|
||
---
|
||
|
||
## 🔍 ЧТО ПРОИЗОШЛО:
|
||
|
||
1. **30 октября 2025** произошло массовое удаление папок проектов из Nextcloud
|
||
2. Все файлы остались **в корзине** (не удалены окончательно)
|
||
3. В CRM **записи в БД остались**, но ссылки на S3/Nextcloud **битые**
|
||
4. Пользователи видят файлы в CRM, но **не могут их открыть**
|
||
|
||
---
|
||
|
||
## 📂 ТОП-20 ПРОЕКТОВ ПО КОЛИЧЕСТВУ ФАЙЛОВ В КОРЗИНЕ:
|
||
|
||
| ID проекта | Файлов | Размер (MB) |
|
||
|------------|--------|-------------|
|
||
| 3624 | 27 | 98.73 |
|
||
| 42049 | 26 | 6.46 |
|
||
| 14388 | 26 | 70.32 |
|
||
| 57349 | 25 | 4.21 |
|
||
| 22734 | 25 | 47.68 |
|
||
| 83455 | 24 | 25.31 |
|
||
| 28221 | 24 | 34.36 |
|
||
| 338978 | 23 | 20.08 |
|
||
| 18319 | 23 | 25.75 |
|
||
| 4313 | 23 | 58.6 |
|
||
| 80291 | 23 | 8.81 |
|
||
| 17925 | 22 | 24.2 |
|
||
| 27220 | 22 | 25.5 |
|
||
| 354597 | 22 | 13.56 |
|
||
| 35512 | 21 | 31.86 |
|
||
| 362324 | 21 | 9.49 |
|
||
| 58462 | 21 | 26.34 |
|
||
| 7517 | 21 | 58.2 |
|
||
| 28104 | 21 | 11.37 |
|
||
| 332945 | 20 | 27.37 |
|
||
|
||
---
|
||
|
||
## ⚠️ ТЕКУЩАЯ ПРОБЛЕМА:
|
||
|
||
### Проект 390983 (Макарова):
|
||
- ✅ **ВОССТАНОВЛЕН** вручную на S3
|
||
- ✅ ACL исправлены
|
||
- ✅ HTML entities исправлены в БД
|
||
- ✅ Кнопка "Через Nextcloud" работает
|
||
|
||
### Проект 62315 (Крылов):
|
||
- ✅ **НАЙДЕНЫ** все 16 файлов в корзине
|
||
- ❌ **НЕ ВОССТАНОВЛЕНЫ** (TWC Storage не принимает кириллицу через API)
|
||
|
||
### Остальные 1001 проект:
|
||
- ❌ **НЕ ПРОВЕРЕНЫ**
|
||
- ❌ **НЕ ВОССТАНОВЛЕНЫ**
|
||
|
||
---
|
||
|
||
## 🎯 ПЛАН ВОССТАНОВЛЕНИЯ:
|
||
|
||
### Вариант 1: МАССОВОЕ ВОССТАНОВЛЕНИЕ ЧЕРЕЗ NEXTCLOUD WEB UI
|
||
**Рекомендуется для срочности**
|
||
|
||
1. Войти в Nextcloud Web: https://office.clientright.ru:8443
|
||
2. Зайти в корзину (Deleted files)
|
||
3. Выбрать все папки проектов
|
||
4. Нажать "Restore"
|
||
5. Запустить индексацию Redis
|
||
|
||
**Плюсы:**
|
||
- ✅ Быстро (1-2 клика)
|
||
- ✅ Все файлы вернутся на место
|
||
- ✅ Кириллица не проблема
|
||
|
||
**Минусы:**
|
||
- ❌ Nextcloud СТАРЫЙ, нужно проверить куда восстановятся
|
||
|
||
---
|
||
|
||
### Вариант 2: МИГРАЦИЯ НА S3 С ТРАНСЛИТЕРАЦИЕЙ
|
||
**Рекомендуется для долгосрочной стабильности**
|
||
|
||
1. Создать скрипт транслитерации путей
|
||
2. Обновить БД (filename, s3_key) на новые пути
|
||
3. Загрузить файлы на S3 с ASCII именами
|
||
4. Установить ACL public-read
|
||
5. Обновить Redis индекс
|
||
|
||
**Плюсы:**
|
||
- ✅ Совместимость с S3 API
|
||
- ✅ Нет проблем с кириллицей
|
||
- ✅ Проще для автоматизации
|
||
|
||
**Минусы:**
|
||
- ❌ Долго (нужно обработать 10K файлов)
|
||
- ❌ Риск ошибок при массовой операции
|
||
- ❌ Нужно изменять БД
|
||
|
||
---
|
||
|
||
### Вариант 3: КОПИРОВАНИЕ В НОВЫЙ NEXTCLOUD
|
||
**Временное решение**
|
||
|
||
1. Скопировать из корзины в новый Nextcloud External Storage
|
||
2. Запустить индексацию
|
||
3. Обновить Redis
|
||
|
||
**Плюсы:**
|
||
- ✅ Быстро
|
||
- ✅ Кириллица работает
|
||
|
||
**Минусы:**
|
||
- ❌ Файлы остаются в старом Nextcloud
|
||
- ❌ Дублирование данных
|
||
|
||
---
|
||
|
||
## 🔧 ТЕХНИЧЕСКИЕ ДЕТАЛИ:
|
||
|
||
### Пути в корзине:
|
||
```bash
|
||
/var/lib/docker/volumes/root_nextcloud_data/_data/data/admin/files_trashbin/files/
|
||
├── Крылов_ЧОУ_ДПО_..._62315.d1761989314/ (16 файлов)
|
||
├── Макарова_ИП_..._390983.d1761989645/ (8 файлов)
|
||
├── ... (1001 папка)
|
||
```
|
||
|
||
### Пример имени папки:
|
||
```
|
||
Крылов_ЧОУ_ДПО_ОБРАЗОВАТЕЛЬНЫЕ_ТЕХНОЛОГИИ_СКИЛБОКС_(КОРОБКА_НАВЫКОВ)_62315.d1761989314
|
||
└─┬─┘ └────┬────┘
|
||
Project ID Timestamp
|
||
```
|
||
|
||
### Timestamp расшифровка:
|
||
```bash
|
||
date -d @1761989314 → 2025-10-30 10:09:12
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 РЕКОМЕНДУЕМЫЕ ДЕЙСТВИЯ (СРОЧНО):
|
||
|
||
### 1. НЕМЕДЛЕННО:
|
||
- [ ] **НЕ ОЧИЩАТЬ КОРЗИНУ NEXTCLOUD!**
|
||
- [ ] Сделать бэкап корзины: `tar -czf /backup/nextcloud_trashbin_$(date +%Y%m%d).tar.gz /var/lib/docker/volumes/root_nextcloud_data/_data/data/admin/files_trashbin/`
|
||
- [ ] Решить: какой вариант восстановления использовать
|
||
|
||
### 2. ВОССТАНОВЛЕНИЕ (выбрать вариант):
|
||
- [ ] **Вариант 1:** Restore через Nextcloud Web UI
|
||
- [ ] **Вариант 2:** Миграция на S3 с транслитерацией
|
||
- [ ] **Вариант 3:** Копирование в новый Nextcloud
|
||
|
||
### 3. ПОСЛЕ ВОССТАНОВЛЕНИЯ:
|
||
- [ ] Запустить индексацию Redis: `node crm_extensions/file_storage/nextcloud_fileid_indexer.js`
|
||
- [ ] Проверить 10-20 проектов вручную
|
||
- [ ] Настроить автоматический бэкап Nextcloud
|
||
|
||
---
|
||
|
||
## 📝 ПОЛНЫЙ СПИСОК ПРОЕКТОВ:
|
||
Сохранён в `/tmp/trashbin_report.json` (1003 проекта)
|
||
|
||
---
|
||
|
||
## 🔗 СВЯЗАННЫЕ ДОКУМЕНТЫ:
|
||
- `PROJECT_390983_FIXED.md` - пример восстановления проекта Макарова
|
||
- `NEXTCLOUD_BUTTON_FIX_REDIS.md` - исправление кнопки "Через Nextcloud"
|
||
- `ИСТОРИЯ_КОСЯКА_С_REDIS.md` - история проблем с Redis кешем
|
||
|
||
---
|
||
|
||
## ⏰ ВРЕМЯ СОЗДАНИЯ ОТЧЁТА:
|
||
`date '+%Y-%m-%d %H:%M:%S'`
|
||
|
||
2025-11-02 23:33:44
|
||
|
||
---
|
||
|
||
## 🔍 РАССЛЕДОВАНИЕ: КАК ЭТО ПРОИЗОШЛО
|
||
|
||
### 📅 ХРОНОЛОГИЯ СОБЫТИЙ:
|
||
|
||
1. **22 октября 2025** - Миграция файлов на S3/Nextcloud
|
||
(найдено множество бэкапов: `backup_before_migration_2025-10-22_*.sql`)
|
||
|
||
2. **30 октября 2025, 10:09:12** - МАССОВОЕ УДАЛЕНИЕ
|
||
- **1003 папки проектов** перемещены в корзину Nextcloud
|
||
- Timestamp в именах папок: `.d1761808152` (30.10.2025 10:09)
|
||
|
||
3. **31 октября - 1 ноября** - Дополнительные удаления
|
||
- Timestamp `.d1761933470` (31.10.2025 20:57)
|
||
- Timestamp `.d1761987435` (01.11.2025 11:57)
|
||
|
||
### 🕵️ ЧТО МОГЛО СТАТЬ ПРИЧИНОЙ:
|
||
|
||
#### Версия 1: **Автоматическая очистка Nextcloud**
|
||
- **Nextcloud имеет функцию автоочистки** External Storage
|
||
- Возможно, 30 октября сработал cron job
|
||
- При переносе на S3 файлы могли быть "отключены" от Nextcloud
|
||
- **Nextcloud решил "удалить" несуществующие файлы**
|
||
|
||
#### Версия 2: **Ручное удаление**
|
||
- Кто-то зашёл в Nextcloud Web UI
|
||
- Выбрал все папки проектов
|
||
- Нажал Delete
|
||
- **Маловероятно:** слишком много папок (1003)
|
||
|
||
#### Версия 3: **Скрипт миграции**
|
||
- При миграции мог быть скрипт очистки старых файлов
|
||
- Скрипт сработал с задержкой (22.10 → 30.10 = 8 дней)
|
||
- **Возможно:** cron job запускается раз в неделю
|
||
|
||
### 🔬 ДОКАЗАТЕЛЬСТВА:
|
||
|
||
```bash
|
||
# Timestamp удаления
|
||
1761808152 → 2025-10-30 10:09:12
|
||
|
||
# Системные логи за это время
|
||
окт 30 00:21:45 ... "cleaning up after shim disconnected"
|
||
окт 30 00:21:45 ... "cleanup warnings"
|
||
|
||
# Docker контейнеры перезапускались
|
||
окт 30 00:20:56 ... "Container nextcloud-redis is not running"
|
||
окт 30 00:21:45 ... ignoring event /tasks/delete
|
||
```
|
||
|
||
### 💡 ВЫВОДЫ:
|
||
|
||
1. **Файлы НЕ ПОТЕРЯНЫ** - все в корзине Nextcloud
|
||
2. **Удаление было автоматическим** - слишком синхронное (1003 папки одновременно)
|
||
3. **Скорее всего - cron job Nextcloud** или скрипт очистки
|
||
4. **Проблема в миграции:** файлы остались в старом Nextcloud, но не были корректно проиндексированы
|
||
|
||
### ⚠️ РИСКИ:
|
||
|
||
**КОРЗИНА NEXTCLOUD ОЧИЩАЕТСЯ АВТОМАТИЧЕСКИ ЧЕРЕЗ 30 ДНЕЙ!**
|
||
|
||
- Удалено: 30 октября 2025
|
||
- Автоочистка: ~30 ноября 2025
|
||
- **ОСТАЛОСЬ ~28 ДНЕЙ** до безвозвратной потери
|
||
|
||
---
|
||
|
||
## 🚀 РЕКОМЕНДУЕМЫЕ СРОЧНЫЕ ДЕЙСТВИЯ:
|
||
|
||
### 1. НЕМЕДЛЕННО (в течение 24 часов):
|
||
```bash
|
||
# Сделать бэкап корзины (ГОТОВО ✅)
|
||
/backup/nextcloud_trashbin_20251102_233351.tar.gz
|
||
```
|
||
|
||
### 2. ЗАВТРА (в течение 48 часов):
|
||
Выбрать вариант восстановления и восстановить файлы
|
||
|
||
### 3. ПОСЛЕ ВОССТАНОВЛЕНИЯ:
|
||
- [ ] Отключить автоочистку Nextcloud
|
||
- [ ] Настроить правильную индексацию S3 External Storage
|
||
- [ ] Проверить cron jobs Nextcloud
|
||
- [ ] Настроить автоматический бэкап Nextcloud
|
||
|
||
---
|
||
|