• Post category:Плагины
  • Запись изменена:18.12.2025

Содержание

Скачать плагин

Скачать плагин можно по ссылке

MD5: 75DCF2A0A5BE569CF91B762209D68D6C

1. Список необходимых пакетов (для ВМ без внешних репозиториев и без доступа в интернет)

1.1. Что должно быть установлено (пакеты/команды)

На сервере Корпоративный сервер 2024 (где админка + nginx)

Обязательно:

  • python3 + python3-venv + python3-pip (скрипт пытается ставить системные пакеты)
  • aiohttp: критично для backend (import aiohttp)

В офлайне самый простой вариант — именно системный пакет python3-aiohttp, чтобы не зависеть от pip-скачивания.

Дополнительно (обычно уже есть в системе, но важно):

  • ss (из iproute2) или lsof — скрипт проверяет занятость порта через них
  • стандартные утилиты: bash, grep, sed, perl, cp, mkdir и т.п. (скрипт активно патчит файлы).

Для RabbitMQ

Обязательно:

  • rabbitmq_management
  • rabbitmq_shovel
  • rabbitmq_shovel_management
    Скрипт пытается включить их локально через rabbitmq-plugins enable —offline …

2. Назначение скрипта

Скрипт r7-reindex-monitor-install.sh делает установку/обновление и (при необходимости) удаление:

  1. Разворачивает backend в /opt/r7-reindex-monitor и лог в /var/log/r7-reindex-monitor.log
  2. Создаёт systemd-сервис r7-reindex-monitor + logrotate
  3. Копирует JS в /var/www/r7-office/admin/assets/
  4. Патчит nginx-конфиг (добавляет location /reindex-monitor/ с проксированием и websocket-заголовками)
  5. Патчит index.html админки, чтобы подключить:
    • /assets/inject-manager.js
    • /assets/inject-reindex-tab.js
    • /assets/inject-reindex-card.js

Также есть режим деинсталляции (с опцией удалять/не удалять inject-manager.js)

3. Подготовка перед запуском

3.1. Подготовить файлы рядом со скриптом

В одной папке должны лежать:

  • app.py
  • inject-reindex-card.js
  • inject-reindex-tab.js
  • inject-manager.js ( лежит в архиве, нужен если его ещё нет в assets) — скрипт копирует его только если отсутствует

3.2. Для офлайн установки подготовка пакетов

1. На ВМ заранее скачайте .deb/.rpm пакеты:

  • python3, python3-venv, python3-pip, python3-aiohttp
  • iproute2 (для ss) и/или lsof

2. Установите:

  • Debian/Ubuntu:
    dpkg -i *.deb

    (важно скачать все зависимости)

  • RHEL-like:
    rpm -Uvh *.rpm

3.3. Проверить, что админка стоит в ожидаемых путях

Скрипт рассчитывает на:

  • assets: /var/www/r7-office/admin/assets
  • index: /var/www/r7-office/admin/index.html
  • nginx conf: /etc/nginx/sites-available/admin

3.4. Если RabbitMQ не на localhost — заранее отредактировать app.py

По умолчанию backend ходит в RabbitMQ management на localhost:15672 и guest/guest

если у вас иначе, правите RABBIT_HOST / RABBIT_USER / RABBIT_PASSWORD и потом перезапускаете сервис.

4. Запуск скрипта

4.1. Запуск установки

unzip plugin-reindex.zip -d plugin-reindex && cd plugin-reindex
chmod +x r7-reindex-monitor-install.sh
sudo ./r7-reindex-monitor-install.sh

Скрипт требует root

Для установки выбираем Y

Реиндекс Монитор: инструкция по установке и работе плагина на Корпоративный сервер 2024 (Linux)

Вводим свой порт или оставляем по умолчанию (скрипт проверит свободен ли порт и если он занят, то предложит выбрать другой)

Реиндекс Монитор: инструкция по установке и работе плагина на Корпоративный сервер 2024 (Linux)

Далее происходит установки и вывод конечного результата.

Реиндекс Монитор: инструкция по установке и работе плагина на Корпоративный сервер 2024 (Linux)

При повторном запуске скрипта он предложит:

  1. Переустановить / обновить (если вносились изменения после установки)
  2. Удалить (удаляет в обратном порядке, но предложит оставить inject-manager.js, на случай установки других плагинов)
  3. Выход (выйти из скрипта)

Реиндекс Монитор: инструкция по установке и работе плагина на Корпоративный сервер 2024 (Linux)

4.2. Проверка после установки

systemctl status r7-reindex-monitor --no-pager # для проверки статуса работы сервиса
journalctl -u r7-reindex-monitor -n 200 --no-pager # для проверки лога работы сервиса
nginx -t # для проверки конфигурации nginx
systemctl reload nginx # для мягкого рестарта сервиса nginx

4.3. Удаление

sudo ./r7-reindex-monitor-install.sh # для запуска переустановки/обновления/удаления
sudo ./r7-reindex-monitor-install.sh --uninstall # для запуска удаления без inject-manager
sudo ./r7-reindex-monitor-install.sh --uninstall --purge-manager # если хотите убрать и inject-manager

5. Порядок работы скрипта и последовательность шагов

Последовательность работы установки:

  1. Проверка порта (занят/свободен)
  2. Определение пакетного менеджера и установка пакетов
  3. Установка aiohttp
  4. Включение rabbit-плагинов (если команда доступна на этой машине)
  5. Проверка наличия файлов рядом со скриптом
  6. Копирование backend в /opt/r7-reindex-monitor
  7. Создание systemd-сервиса + logrotate
  8. Копирование JS в assets (inject-manager не перезаписывается, если уже есть)
  9. Патч nginx location /reindex-monitor/ (с websocket-заголовками)
  10. Патч index.html: добавление <script src="/assets/..."> и контроль порядка (manager должен идти до tab)
  11. systemctl daemon-reload, enable/restart сервиса

6. Как работает плагин (что с чем взаимодействует)

6.1. Общая архитектура

Компоненты:

1. Frontend-инъекции в админке R7:

  • inject-manager.js — «движок» вкладок/панелей (общий менеджер).
  • inject-reindex-tab.js — вкладка «Реиндекс» (основной UI).
  • inject-reindex-card.js — карточка «RabbitMQ» на странице «Обзор».

2. Backend-сервис (app.py, aiohttp) — отдаёт API и WS, ходит в RabbitMQ management API, частично проксирует reindex-команды в портал.

Снаружи пользователь всегда работает через админку, а админка ходит:

  • в /reindex-monitor/api/... (HTTP)
  • в /reindex-monitor/ws (WebSocket)
    Оба пути nginx проксирует на локальный backend

6.2. Backend (app.py) — что именно делает и как

6.2.1. Конфиг и очереди

  • Порт backend: аргумент командной строки, иначе 40820
  • RabbitMQ management API: http://:15672/api, креды guest/guest по умолчанию
  • Интервал опроса очередей: каждые 2 секунды
  • Список отслеживаемых очередей (в т.ч. error-очереди)
  • Режимы реиндекса: 1-документы / 2-контакты / 3-почта
  • Для прогресса режимов используются очереди (например документы = Reindex.Documents + Indexing.Document)

6.2.2. Опрос RabbitMQ и расчёт статистики

Backend читает статистику очередей через RabbitMQ Management HTTP API:

  • URL шаблон: /api/queues/%2F/
  • Из ответа берёт:
    • messages_ready (ready)
    • messages_unacknowledged (unacked)
    • messages (total)

Если ответ не 200 — кладёт error: «HTTP <код>»

Если исключение — error: «connection error»

6.2.3. Push-обновления в браузер (WebSocket)

Backend держит список websocket-клиентов и рассылает им JSON через broadcast()

Фоновая задача stats_poller:

  • раз в UPDATE_INTERVAL обновляет state.stats = await get_queue_stats()
  • рассылает сообщение {type:"stats", queues:..., timestamp:...}

6.2.4. HTTP API backend (ключевые)

  • GET /api/stats — вернуть текущие stats по очередям
  • GET /api/reindex/progress?mode=N — прогресс по режиму на основе текущих state.stats
  • POST /api/errors/retry — «вернуть из ошибок»: создаёт shovel
  • POST /api/errors/clear — очистить error-очередь через purge
  • POST /api/rabbitmq/restartsystemctl restart rabbitmq-server

6.2.5. Очистка очереди (stop) и «возврат из ошибок»

Очистка очереди делается DELETE-запросом:

DELETE /api/queues/%2F//contents

«Возврат из ошибок» делается созданием shovel через:

PUT /api/parameters/shovel/%2F/

с параметрами:

  • src-queue = error очередь
  • dest-queue = целевая
  • delete-after: «queue-length»

и src/dest-uri указывают localhost (shovel исполняется на стороне RabbitMQ)

6.3. Frontend: вкладка «Реиндекс» (inject-reindex-tab.js)

6.3.1. Куда ходит

Все запросы идут через nginx-прокси по префиксу:

  • API_PREFIX = ‘/reindex-monitor/api’

Плюс websocket:

  • WS_PATH = ‘/reindex-monitor/ws’

UI делает:

  • регулярный polling раз в 3000мс
  • параллельно пытается держать WS для быстрых обновлений (там же ws, wsActive, reconnect)

6.3.2. Что отображает

  • Очереди в фиксированном порядке QUEUE_ORDER
  • Названия очередей на русском языке QUEUE_TITLES
  • Три режима реиндекса с описаниями
  • Для расчёта прогресса режимов используется соответствие очередей и внутренний PROGRESS_STATE для скорости/дельт

6.3.3. Какие действия делает (кнопки)

По URL видно, что вкладка умеет:

  • старт/стоп реиндекса:
    • ${API_PREFIX}/reindex/start
    • ${API_PREFIX}/reindex/stop
  • прогресс:
    • ${API_PREFIX}/reindex/progress
  • работа с ошибками:
    • ${API_PREFIX}/errors/retry
    • ${API_PREFIX}/errors/clear
  • restart RabbitMQ:
    • ${API_PREFIX}/rabbitmq/restart

6.4. Frontend: карточка на «Обзоре» (inject-reindex-card.js)

  • Вставляется только на странице “Обзор” (проверка pathname)
  • Рендерит карточку “RabbitMQ” и показывает статусы/очереди из набора QUEUES
  • Выделяет error-очереди (для подсветки)
  • Дальше карточка обновляется из backend stats (и/или WS — см. остальную часть файла, логика там построена вокруг актуальных queues).

6.5. Что именно меняется в системе (для эксплуатации/аудита)

Установка затрагивает:

  • /opt/r7-reindex-monitor/app.py
  • /etc/systemd/system/r7-reindex-monitor.service
  • /etc/logrotate.d/r7-reindex-monitor
  • /etc/nginx/sites-available/admin (+ блок location /reindex-monitor/)
  • /var/www/r7-office/admin/assets/* (JS-файлы)
  • /var/www/r7-office/admin/index.html (подключение <script>)

Скрипт делает резервные копии .bak.* для критичных файлов

Была ли полезна статья?
Позвольте нам стать лучше
Дополнительные материалы