Содержание
- Скачать плагин
- 1. Список необходимых пакетов (для ВМ без внешних репозиториев и без доступа в интернет)
- 2. Назначение скрипта
- 3. Подготовка перед запуском
- 4. Запуск скрипта
- 5. Порядок работы скрипта и последовательность шагов
- 6. Как работает плагин (что с чем взаимодействует)
Скачать плагин
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 делает установку/обновление и (при необходимости) удаление:
- Разворачивает backend в
/opt/r7-reindex-monitorи лог в/var/log/r7-reindex-monitor.log - Создаёт systemd-сервис r7-reindex-monitor + logrotate
- Копирует JS в
/var/www/r7-office/admin/assets/ - Патчит nginx-конфиг (добавляет
location /reindex-monitor/с проксированием и websocket-заголовками) - Патчит 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

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

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

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

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. Порядок работы скрипта и последовательность шагов
Последовательность работы установки:
- Проверка порта (занят/свободен)
- Определение пакетного менеджера и установка пакетов
- Установка aiohttp
- Включение rabbit-плагинов (если команда доступна на этой машине)
- Проверка наличия файлов рядом со скриптом
- Копирование backend в
/opt/r7-reindex-monitor - Создание systemd-сервиса + logrotate
- Копирование JS в assets (inject-manager не перезаписывается, если уже есть)
- Патч nginx location
/reindex-monitor/(с websocket-заголовками) - Патч index.html: добавление
<script src="/assets/...">и контроль порядка (manager должен идти до tab) 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.statsPOST /api/errors/retry— «вернуть из ошибок»: создаёт shovelPOST /api/errors/clear— очистить error-очередь через purgePOST /api/rabbitmq/restart—systemctl 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.* для критичных файлов








