- Создан API create_document_with_text.php для создания DOCX/XLSX/PPTX с текстом от AI - Поддержка Markdown форматирования (заголовки, жирный, курсив, списки, код) - Установлен PHPWord для красивого форматирования документов - Исправлены пути сохранения (crm2/CRM_Active_Files/... без /crm/ в начале) - Замена пробелов на подчеркивания в именах папок - Создана документация для AI и разработчиков - Добавлены API для работы с шаблонами Nextcloud
9.8 KiB
9.8 KiB
⚠️ ОПАСНЫЕ НАСТРОЙКИ 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 проекта!
ЛОГИКА:
- 22 октября - миграция на S3
- Файлы на S3, но не проиндексированы в Nextcloud
- 30 октября -
DeleteOrphanedItemsзапустился - Увидел 1,003 папки без записей в БД
- Решил: "это мусор" → удалил в корзину
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:
{
"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
Сценарий:
- 22 октября - загрузили файлы на S3
- НЕ проиндексировали в Nextcloud (
occ files:scan) - 30 октября -
DeleteOrphanedItemsзапустился - Не нашёл записи в БД Nextcloud для файлов
- Решил: "orphaned items" → удалил в корзину
🟡 10% - Ручное удаление через Web UI
- Маловероятно (1,003 папки одновременно)
🟢 1% - Другая причина
- Баг Nextcloud
- Проблема с External Storage
🛡️ РЕКОМЕНДАЦИИ ПО ЗАЩИТЕ:
🔴 КРИТИЧНО - СДЕЛАТЬ СЕЙЧАС:
1. Отключить DeleteOrphanedItems (самое опасное!)
# НЕ ЗАПУСКАЙ! Только для информации:
docker exec -u www-data nextcloud-fresh php occ background-job:delete 31
ЗАЧЕМ: Это job удаляет "сиротские" файлы. При проблемах с индексацией может удалить ВСЁ!
2. Настроить retention для корзины
# Увеличить период хранения корзины с 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
# Запретить Nextcloud удалять файлы на S3
docker exec -u www-data nextcloud-fresh php occ files_external:option 1 readonly true
ЗАЧЕМ: Nextcloud сможет только ЧИТАТЬ с S3, не удалять
🟡 ВАЖНО - СДЕЛАТЬ В БЛИЖАЙШЕЕ ВРЕМЯ:
4. Настроить регулярный бэкап
# Добавить в crontab
0 2 * * * tar -czf /backup/nextcloud_$(date +\%Y\%m\%d).tar.gz /var/lib/docker/volumes/*nextcloud*
5. Мониторинг корзины
# Проверять размер корзины раз в день
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:
- Сканирует файловую систему Nextcloud
- Проверяет есть ли запись в
oc_filecache - Если НЕТ → помечает как "orphaned"
- Перемещает в корзину
Почему не сработала защита:
- External Storage не был проиндексирован
filesystem_check_changes: 1не помог (проверка была, но индекса нет)- Job решил что файлы = мусор
✅ ЧТО СЕЙЧАС ЗАЩИЩАЕТ:
- Redis индексатор - каждую минуту обновляет индекс
- Файлы на S3 - восстановлены и проиндексированы
- Бэкап корзины - на случай проблем
⚠️ ЧТО НУЖНО СДЕЛАТЬ (ТВОЙ ВЫБОР):
Вариант 1: БЕЗОПАСНЫЙ (рекомендую)
# 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: ПАРАНОИДАЛЬНЫЙ
# Отключить все 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 (безопасный).