# ⚠️ ОПАСНЫЕ НАСТРОЙКИ NEXTCLOUD ## 📅 ДАТА ПРОВЕРКИ: 3 ноября 2025 --- ## 🚨 ОБНАРУЖЕННЫЕ ОПАСНЫЕ АВТОМАТИЧЕСКИЕ ЗАДАЧИ: ### 1. 🗑️ **ExpireTrash** - Автоочистка корзины ``` Job ID: 6 Class: OCA\Files_Trashbin\BackgroundJob\ExpireTrash Last Run: 2025-11-01T20:25:04+00:00 ``` **ЧТО ДЕЛАЕТ:** - Автоматически удаляет файлы из корзины через определённый период - По умолчанию: **30 дней** **ОПАСНОСТЬ:** - ⚠️ Файлы из корзины **безвозвратно удаляются** - ⚠️ **БЕЗ предупреждения** администратора - ⚠️ Может удалить важные данные **ТЕКУЩИЙ СТАТУС:** - ✅ Включено (enabled) - ⏰ Последний запуск: 1 ноября - 📅 Следующий: ~1 декабря 2025 **РИСК:** ``` 🔴 КРИТИЧЕСКИЙ Удалённые 30 октября файлы будут безвозвратно удалены ~30 ноября! ``` --- ### 2. 🧹 **DeleteOrphanedItems** - Удаление "сиротских" файлов ``` Job ID: 31 Class: OCA\Files\BackgroundJob\DeleteOrphanedItems Last Run: 2025-11-03T06:48:13+00:00 ``` **ЧТО ДЕЛАЕТ:** - Удаляет файлы, которые **не связаны** с записями в БД Nextcloud - Ищет "потерянные" файлы в файловой системе **ОПАСНОСТЬ:** - ⚠️ Может удалить файлы, которые **не проиндексированы** - ⚠️ При проблемах с External Storage может удалить **ВСЁ** - ⚠️ **ВЕРОЯТНАЯ ПРИЧИНА** нашего факапа! **ТЕКУЩИЙ СТАТУС:** - ✅ Включено (enabled) - ⏰ Запускается **ЕЖЕДНЕВНО** - 📅 Последний запуск: **сегодня утром** **РИСК:** ``` 🔴 КРИТИЧЕСКИЙ Это скорее всего и удалило наши 1,003 проекта! ``` **ЛОГИКА:** 1. 22 октября - миграция на S3 2. Файлы на S3, но **не проиндексированы** в Nextcloud 3. 30 октября - `DeleteOrphanedItems` запустился 4. Увидел 1,003 папки без записей в БД 5. Решил: "это мусор" → удалил в корзину --- ### 3. 📦 **ExpireVersions** - Удаление старых версий ``` Job ID: 25 Class: OCA\Files_Versions\BackgroundJob\ExpireVersions Last Run: 2025-11-02T15:48:50+00:00 ``` **ЧТО ДЕЛАЕТ:** - Удаляет старые версии файлов **ОПАСНОСТЬ:** - ⚠️ Может удалить все версии файла - ⚠️ Без возможности восстановления **ТЕКУЩИЙ СТАТУС:** - ✅ Включено - ⏰ Запускается регулярно **РИСК:** ``` 🟡 СРЕДНИЙ Влияет только на версии, не на основные файлы ``` --- ### 4. 🔄 **ExpireShares** - Удаление истёкших расшариваний ``` Job ID: 3 Class: OCA\Files_Sharing\ExpireSharesJob Last Run: 2025-10-31T16:47:07+00:00 ``` **ЧТО ДЕЛАЕТ:** - Удаляет истёкшие публичные ссылки **ОПАСНОСТЬ:** - ⚠️ Низкая (удаляет только ссылки, не файлы) **РИСК:** ``` 🟢 НИЗКИЙ ``` --- ## 🔧 НАСТРОЙКИ EXTERNAL STORAGE: ```json { "mount_point": "/crm", "storage": "Amazon S3", "configuration": { "bucket": "f9825c87-4e3558f6-f9b6-405c-ad3d-d1535c49b61c", "hostname": "s3.twcstorage.ru", "filesystem_check_changes": "1" ← ОПАСНО! }, "options": { "readonly": false, ← Nextcloud может удалять файлы! "filesystem_check_changes": 0 } } ``` **ОПАСНОСТЬ:** - ⚠️ `filesystem_check_changes: 1` - Nextcloud **сверяет** файлы на S3 - ⚠️ `readonly: false` - Nextcloud может **удалять** файлы на S3 - ⚠️ Если файлы не проиндексированы → Nextcloud думает их нет → удаляет --- ## 🎯 ЧТО ВЫЗВАЛО ФАКАП (ВЕРОЯТНОСТЬ): ### 🔴 99% - DeleteOrphanedItems **Сценарий:** 1. 22 октября - загрузили файлы на S3 2. НЕ проиндексировали в Nextcloud (`occ files:scan`) 3. 30 октября - `DeleteOrphanedItems` запустился 4. Не нашёл записи в БД Nextcloud для файлов 5. Решил: "orphaned items" → удалил в корзину ### 🟡 10% - Ручное удаление через Web UI - Маловероятно (1,003 папки одновременно) ### 🟢 1% - Другая причина - Баг Nextcloud - Проблема с External Storage --- ## 🛡️ РЕКОМЕНДАЦИИ ПО ЗАЩИТЕ: ### 🔴 КРИТИЧНО - СДЕЛАТЬ СЕЙЧАС: #### 1. Отключить DeleteOrphanedItems (самое опасное!) ```bash # НЕ ЗАПУСКАЙ! Только для информации: docker exec -u www-data nextcloud-fresh php occ background-job:delete 31 ``` **ЗАЧЕМ:** Это job удаляет "сиротские" файлы. При проблемах с индексацией может удалить ВСЁ! --- #### 2. Настроить retention для корзины ```bash # Увеличить период хранения корзины с 30 до 365 дней docker exec -u www-data nextcloud-fresh php occ config:app:set files trashbin_retention_obligation --value="auto, 365" ``` **ЗАЧЕМ:** Даёт больше времени на восстановление при проблемах --- #### 3. Включить readonly для External Storage ```bash # Запретить Nextcloud удалять файлы на S3 docker exec -u www-data nextcloud-fresh php occ files_external:option 1 readonly true ``` **ЗАЧЕМ:** Nextcloud сможет только ЧИТАТЬ с S3, не удалять --- ### 🟡 ВАЖНО - СДЕЛАТЬ В БЛИЖАЙШЕЕ ВРЕМЯ: #### 4. Настроить регулярный бэкап ```bash # Добавить в crontab 0 2 * * * tar -czf /backup/nextcloud_$(date +\%Y\%m\%d).tar.gz /var/lib/docker/volumes/*nextcloud* ``` #### 5. Мониторинг корзины ```bash # Проверять размер корзины раз в день 0 9 * * * du -sh /var/lib/docker/volumes/*/files_trashbin/ | mail -s "Nextcloud Trash" admin@domain.com ``` --- ## 📊 ИТОГОВАЯ ТАБЛИЦА РИСКОВ: | Job | Опасность | Действие | Рекомендация | |-----|-----------|----------|--------------| | **DeleteOrphanedItems** | 🔴 КРИТИЧЕСКАЯ | Удаляет неиндексированные файлы | **ОТКЛЮЧИТЬ** | | **ExpireTrash** | 🔴 ВЫСОКАЯ | Очищает корзину через 30 дней | Увеличить до 365 дней | | **ExpireVersions** | 🟡 СРЕДНЯЯ | Удаляет старые версии | Настроить retention | | **External Storage RW** | 🟡 СРЕДНЯЯ | Может удалять на S3 | Включить readonly | --- ## 🔍 ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: ### Когда запускаются Jobs: - **Каждый час:** DeleteOrphanedItems, CleanupFileLocks - **Каждый день:** ExpireTrash, ExpireVersions - **Зависит от настроек:** ExpireShares ### Как работает DeleteOrphanedItems: 1. Сканирует файловую систему Nextcloud 2. Проверяет есть ли запись в `oc_filecache` 3. Если **НЕТ** → помечает как "orphaned" 4. Перемещает в корзину ### Почему не сработала защита: - External Storage не был проиндексирован - `filesystem_check_changes: 1` не помог (проверка была, но индекса нет) - Job решил что файлы = мусор --- ## ✅ ЧТО СЕЙЧАС ЗАЩИЩАЕТ: 1. **Redis индексатор** - каждую минуту обновляет индекс 2. **Файлы на S3** - восстановлены и проиндексированы 3. **Бэкап корзины** - на случай проблем --- ## ⚠️ ЧТО НУЖНО СДЕЛАТЬ (ТВОЙ ВЫБОР): ### Вариант 1: БЕЗОПАСНЫЙ (рекомендую) ```bash # 1. Отключить DeleteOrphanedItems docker exec -u www-data nextcloud-fresh php occ background-job:delete 31 # 2. Увеличить retention корзины до года docker exec -u www-data nextcloud-fresh php occ config:app:set files trashbin_retention_obligation --value="auto, 365" # 3. Включить readonly для S3 docker exec -u www-data nextcloud-fresh php occ files_external:option 1 readonly true ``` ### Вариант 2: ПАРАНОИДАЛЬНЫЙ ```bash # Отключить все cleanup jobs docker exec -u www-data nextcloud-fresh php occ background-job:delete 31 # DeleteOrphanedItems docker exec -u www-data nextcloud-fresh php occ background-job:delete 6 # ExpireTrash docker exec -u www-data nextcloud-fresh php occ background-job:delete 25 # ExpireVersions ``` ### Вариант 3: ОСТАВИТЬ КАК ЕСТЬ - Риск: может повториться при проблемах с индексацией - Защита: Redis индексатор работает автоматически --- **Какой вариант выбираешь?** Я рекомендую **Вариант 1** (безопасный).