Files
crm.clientright.ru/ОПАСНЫЕ_НАСТРОЙКИ_NEXTCLOUD.md
Fedor cd90b0d58a feat: Добавлен инструмент генерации документов для AI Ассистента
- Создан API create_document_with_text.php для создания DOCX/XLSX/PPTX с текстом от AI
- Поддержка Markdown форматирования (заголовки, жирный, курсив, списки, код)
- Установлен PHPWord для красивого форматирования документов
- Исправлены пути сохранения (crm2/CRM_Active_Files/... без /crm/ в начале)
- Замена пробелов на подчеркивания в именах папок
- Создана документация для AI и разработчиков
- Добавлены API для работы с шаблонами Nextcloud
2025-11-12 19:46:06 +03:00

9.8 KiB
Raw Blame History

⚠️ ОПАСНЫЕ НАСТРОЙКИ 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:

{
    "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 (самое опасное!)

# НЕ ЗАПУСКАЙ! Только для информации:
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:

  1. Сканирует файловую систему Nextcloud
  2. Проверяет есть ли запись в oc_filecache
  3. Если НЕТ → помечает как "orphaned"
  4. Перемещает в корзину

Почему не сработала защита:

  • External Storage не был проиндексирован
  • filesystem_check_changes: 1 не помог (проверка была, но индекса нет)
  • Job решил что файлы = мусор

ЧТО СЕЙЧАС ЗАЩИЩАЕТ:

  1. Redis индексатор - каждую минуту обновляет индекс
  2. Файлы на S3 - восстановлены и проиндексированы
  3. Бэкап корзины - на случай проблем

⚠️ ЧТО НУЖНО СДЕЛАТЬ (ТВОЙ ВЫБОР):

Вариант 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 (безопасный).