Очистка плагинов

:information_source: Краткое описание Безопасно сканирует, проверяет и очищает остатки базы данных, оставшиеся после удаления плагинов.
:hammer_and_wrench: Ссылка на репозиторий GitHub - canbekcan/discourse-plugin-cleaner · GitHub
:open_book: Руководство по установке Как установить плагины в Discourse
:computer: Разработка Vibe Coding - Gemini

Возможности

При удалении плагина Discourse в базе данных часто остаются скрытые данные. Со временем эти «остатки» могут загромождать базу данных и усложнять поддержку сайта. Discourse Plugin Cleaner — это комплексный административный инструмент, предназначенный для безопасного выявления и удаления таких остаточных данных.

Основные возможности включают:

  • Глубокое сканирование: Сканирует несколько таблиц базы данных, включая пользовательские поля (Пользователь, Тема, Сообщение, Категория, Группа), настройки плагинов, темы, значки, API-ключи, веб-хуки, группы тегов и загрузки.
  • Безопасный режим аудита (без автоматического удаления): Плагин работает строго как инструмент аудита до тех пор, пока вы не примете решение. Он никогда не будет автоматически удалять данные. Вы должны вручную выбрать и подтвердить элементы, которые хотите удалить.
  • Оценка рисков: Автоматически присваивает «Уровень риска» (Критический, Высокий, Средний, Низкий, OK) обнаруженным элементам, помогая администраторам принимать обоснованные решения о том, что безопасно удалять.
  • Отслеживание истории версий: Делает снимки установленных плагинов при запуске. Если плагин удален, фиксируется изменение состояния, создавая историческую запись о том, какой плагин и когда был удален.
  • Современный административный интерфейс: Предоставляет стильную и интуитивно понятную панель управления, созданную с использованием компонентов Ember strict-mode для бесшовной интеграции в интерфейс администратора Discourse.

Конфигурация

Плагин работает из коробки с разумными настройками по умолчанию. Чтобы использовать плагин:

  1. Доступ к панели управления: Перейдите в панель администратора Discourse. В боковой панели в разделе Плагины нажмите Plugin Cleaner.
  2. Запуск сканирования: Нажмите кнопку «Выполнить глубокое сканирование». Система запросит данные из вашей базы данных и сформирует отчет в реальном времени обо всех обнаруженных остаточных данных.
  3. Проверка проблем: Просмотрите вкладки по категориям (Пользовательские поля, Настройки плагинов и т. д.). Обращайте особое внимание на столбцы Risk (Риск) и Status (Статус).
  4. Выбор и очистка: Установите флажки рядом с остаточными элементами, которые хотите удалить.
  5. Подтверждение удаления: Нажмите «Удалить выбранные». Перед окончательным удалением данных вам будет предложено финальное подтверждение с предупреждением. Все удаления автоматически записываются в журналы действий персонала Discourse для аудита безопасности.

(Примечание для загрузок: Если обнаружены остаточные загрузки, плагин предложит вам выполнить команду rake uploads:clean из консоли сервера для физического освобождения места на диске).

Настройки

Вы можете настроить строгость сканера через настройки вашего сайта.

Имя Описание
plugin_cleaner_orphan_threshold Максимальное количество записей, которое может иметь пользовательское поле, чтобы считаться «осиротевшим». Если пользовательское поле содержит меньше записей, чем этот порог, оно будет помечено для проверки. (По умолчанию: 5, Мин: 1, Макс: 100)
plugin_cleaner_stale_api_key_days Количество дней бездействия API-ключа, после которого сканер пометит его как устаревший/осиротевший. (По умолчанию: 90 дней, Мин: 7, Макс: 365)
plugin_cleaner_stale_upload_days Количество дней, в течение которых несвязанная загрузка может существовать, прежде чем она будет помечена как осиротевшая. (По умолчанию: 30 дней, Мин: 1, Макс: 365)

(Примечание: Этот проект поможет вам понять, как работают плагины Discourse)

2 лайка

Хорошая идея.

Однако есть несколько сложностей:

  • Многие качественные плагины создают и управляют собственными таблицами. Судя по вашему коду, вы ещё не учли этот аспект?

    • Проблема в том, что после удаления плагина миграция исчезает.
    • Что, если плагин каким-то образом изменяет данные в основной таблице (например, добавляет запись)? Например, через запрос в Data Explorer или что-то менее очевидное.
  • Я не вижу способа, которым ваш плагин защищает пользователя от удаления пользовательских полей, кроме как через конкретный плагин, который он хочет «очистить». Вы полагаетесь на то, что пользователь сам их идентифицирует? Вы просто блокируете удаление пользовательских полей, которые находятся в ядре?

Кстати, обратите внимание на это:

Это выглядит немного рискованно. Что, если обновление ядра добавит новые поля, которых нет в вашем каталоге? Вы готовы рискнуть удалить новые поля ядра, которые вы явно не перечислили?

В любом случае желаю вам удачи в разработке, это определённо интересное дополнение.

8 лайков

Вероятность того, что такой плагин удалит что-то необходимое и оставит базу данных в нерабочем состоянии, больше нуля. Я не припоминаю случаев, когда оставленные таблицами после удаления плагина вызывали проблемы.

7 лайков

Если эти таблицы не имеют внешних ключей, ссылающихся на основные таблицы Discourse, это может препятствовать удалению данных из этих таблиц.

Однако эту проблему нельзя надежно обнаружить с помощью другого инструмента. Плагин, создающий такие связи, либо не должен создавать внешние ключи, либо в Discourse должен быть предусмотрен механизм, позволяющий плагинам регистрировать способ «отключения» этих ключей при их исчезновении из установки.

3 лайка