Межрелизные патчи и обращение в поддержку
Это руководство описывает полный цикл работы с исправлениями сервера LSUS между релизами: как собрать диагностические логи при возникновении проблемы, куда направить обращение, как получить и применить патч через веб-админку, и что делать, если веб-админка недоступна — применение через терминал.
Редакции и межрелизные патчи
Межрелизные патчи (hotfix .lsuspatch) входят в сопровождение Enterprise. Для Professional исправления приходят со следующим релизом продукта, если иное не согласовано отдельно. Уровни, время реакции и юридические условия — в Положении о технической поддержке.
О чём эта страница
Межрелизные патчи (hotfix) — это механизм оперативной доставки исправлений сервера LSUS между основными релизами. Патч предназначен в первую очередь для решения проблем функционала сервера, обнаруженных в эксплуатации: ошибок, регрессий производительности, некорректного поведения. Патч представляет собой подписанный архив .lsuspatch, который загружается и применяется администратором.
Когда нужен патч#
Типовые ситуации, когда вендор выпускает межрелизный патч:
- После обновления сервера до нового релиза проявилась регрессия (медленнее работает вкладка, ошибки, зависания).
- Обнаружена ошибка в текущей версии, исправление которой не дождётся следующего релиза.
- Требуется оперативное устранение проблемы производительности или доступности сервера.
В таких случаях вендор готовит патч .lsuspatch под конкретную версию сервера и передаёт его Пользователю (почта или заявка на портале).
Шаг 1. Собрать диагностические логи#
При обращении в поддержку обычно требуются логи сервера. LSUS умеет собирать их в один архив.
Через веб-админку#
- Откройте Администрирование → Поддержка.
- Найдите блок «Диагностика и логи».
- Нажмите кнопку «Скачать отчёт за сутки».

Сервер соберёт ZIP-архив с логами за последние 24 часа, и скачивание начнётся автоматически. Имя файла — вида lsus-master-diagnostics-<дата>-<время>.zip.
Что входит в архив:
- логи приложения (
lsus-server.log,lsus-server-errors.log); - access-логи админки и клиентских запросов;
- логи фонового worker-процесса и репликации;
- логи nginx (access и error);
- сводка переменных окружения
LSUS_*(значения ключей, содержащихPASSWORD/SECRET/TOKEN, замаскированы — конфиденциальные данные не попадают в архив); - метаданные: роль сервера, время сбора, настройки логирования;
- настройки (папка
config/): репозитории, реплики (источник, расписание, скорость, статус), подсети, серверы сайтов и Пограничные серверы (слоты раздачи и приёма, потоки, канал, ёмкость), все параметры мастера со значением и источником значения (умолчание, установка или переопределение) и размеры пуловGUNICORN_*. Пароли, API-ключи, токены и значения секретных параметров в архив не попадают; - состояние очереди копий: по каждому источнику и сайту — слот, сколько копий идёт и сколько ждёт. По нему видно, какой лимит держит репликации.
Если журналы вместе с настройками не помещаются в лимит архива (по умолчанию 200 МБ), настройки кладутся первыми, а журналы урезаются.
Рядом есть кнопка «Скачать обезличенный отчёт за сутки». Состав архива тот же, но имена хостов и серверов, адреса и учётные записи заменены одинаковыми метками, а секретные значения из окружения вычищены и из текста журналов. В имени такого файла есть -anon-. Сводка окружения в нём — только роль, число воркеров и режим защиты, без адресов и путей. Архив можно передать за контур. В настройках заменяются также названия сайтов (площадок), расположений и описания подсетей; названия репозиториев остаются — по ним разбирают проблемы. Имя, которого нет в базе и которое не похоже на адрес, в свободном тексте может остаться. Обычная кнопка по-прежнему собирает полный отчёт.
Достаточно ли суток
По умолчанию собираются логи за 24 часа. Если проблема проявилась раньше — соберите архив позже, когда инцидент ещё «свежий» в логах. Для более глубокой диагностики поддержка может запросить конкретные файлы логов — их можно скачать отдельно в разделе Администрирование → Логи системы.
Отдельный модуль диагностики
Для разбора сложных случаев по запросу поддержки на сервере можно временно поднять модуль диагностики — отдельный контейнер с собственным веб-интерфейсом (порт и пароль задаются в настройках установки; в состав ролей Master/Site/Edge модуль не входит). Поднимается и останавливается вручную.
Через терминал (если веб-админка недоступна)#
Если веб-админка не отвечает, соберите логи вручную. Логи сервера хранятся в /var/log/lsus-server/ внутри контейнера, что на хосте Docker соответствует /opt/lsus-docker/data/master/log/.
# Архив логов сервера (на хосте Docker)
sudo tar -czf /tmp/lsus-logs-$(date +%Y%m%d).tar.gz \
-C /opt/lsus-docker/data/master/log .
# Логи контейнеров (stdout/stderr) за последние сутки
sudo docker logs --since 24h lsus-master > /tmp/lsus-master-stdout.log 2>&1
sudo docker logs --since 24h lsus-master-worker > /tmp/lsus-worker-stdout.log 2>&1
# Дополнительно: версия сервера и состояние контейнеров
sudo docker ps --format '{{.Names}}\t{{.Status}}' > /tmp/lsus-containers.txt
curl -sk https://localhost/api/v1/health >> /tmp/lsus-containers.txt
Затем упакуйте всё вместе и передайте в поддержку.
Шаг 2. Обратиться в поддержку#
Обращения принимаются по Положению о технической поддержке: публичный канал — почта, заявки на портале — когда доступен личный кабинет.
- Напишите на info@lsus.ru. Если доступен личный кабинет на portal.lsus.ru — создайте заявку типа «Поддержка».
- Опишите проблему: что произошло, при каких действиях, версия сервера (видна в шапке админки LSUS или по запросу
/api/v1/health). - Прикрепите диагностический архив, собранный на шаге 1.
Версия сервера
Версия сервера LSUS отображается в правой части верхней панели дашборда (например, v1.0.77). Её же возвращает health-эндпоинт: curl -k https://<сервер>/api/v1/health. Указывайте точную версию в обращении — патч привязан к диапазону версий сервера.
Сроки первого ответа — в положении: для Enterprise не позднее следующего рабочего дня (в тот же день, если заявка зарегистрирована до 12:00 по Екатеринбургу); для Professional — без обещанного срока. Поддержка проанализирует логи, воспроизведёт проблему и подготовит патч .lsuspatch под вашу версию сервера. Файл патча вернётся тем же каналом (почта или карточка заявки).
Активация поддержки
Для полноценного взаимодействия с поддержкой на сервере должен быть активирован ключ поддержки (раздел Администрирование → Поддержка → Ключи активации). Ключ выдаётся на портале. Если срок поддержки истёк, в шапке админки появится предупреждающий баннер.
Шаг 3. Применить патч через веб-админку#
Получив файл .lsuspatch от поддержки, примените его. Основной способ — через веб-админку.
Загрузка патча#
- Откройте Администрирование → Поддержка → Патчи сервера.
- В левой колонке нажмите «Обзор» и выберите файл
.lsuspatch. - Нажмите «Загрузить».

Сервер проверит подпись патча, манифест и соответствие версии. Если патч подходит — он появится в таблице ниже со статусом «загружен». Если патч не подходит для текущей версии сервера — загрузка будет отклонена с понятным сообщением об ошибке.
Применение патча#
- В таблице патчей найдите загруженный патч.
- Нажмите кнопку «Применить».
- Подтвердите применение и перезапуск сервера.
Сервер применит патч (заменит файлы приложения, при необходимости выполнит SQL-миграции) и перезапустит стек. После перезапуска исправление вступит в силу.
Перезапуск сервера
Применение патча вызывает перезапуск сервера LSUS. На время перезапуска (обычно 1–3 минуты) веб-админка и API будут недоступны, а клиенты не смогут отправить heartbeat. Планируйте применение в окно обслуживания.
Проверка#
После перезапуска откройте Администрирование → Поддержка → Патчи сервера. Слева — описание действий и загрузка, справа — список. Применённый патч этой версии имеет статус «включён». Проверьте, что проблема устранена.
В левой колонке коротко описаны действия: загрузка код не меняет; «Применить» включает патч этой версии и перезапускает сервер; «Отключить» доступно только у включённого патча этой версии без правок базы; «Удалить» убирает архив.
Откат патча (если исправление не помогло)#
Если патч этой версии не решил проблему или вызвал новые неполадки, его можно отключить:
- В таблице патчей найдите патч со статусом «включён» и диапазоном версий, в который входит текущий сервер.
- Нажмите кнопку «Отключить».
- Подтвердите отключение и перезапуск.
Сервер восстановит оригинальные файлы из резервной копии (созданной при применении) и перезапустит стек. Статус станет «отключён».
Патч другой версии отключить нельзя: откат записал бы файлы той версии поверх текущего кода. У такой строки нет кнопки «Отключить», в статусе есть пометка «не для этой версии».
Патч с правками базы (в архиве есть SQL) тоже нельзя отключить: откат файлов не вернёт схему. В статусе будет пометка «откат невозможен», кнопки «Отключить» нет. Пока сервер той же версии, удалить такой включённый архив нельзя. После обновления сервера его удаляют: схема уже в новом релизе, файлы старого патча при удалении не возвращаются.
Удаление патча#
- Включённый патч этой версии без правок базы сначала отключают, затем в статусе «отключён» нажимают «Удалить».
- Загруженный и ещё не включённый патч удаляется сразу, в том числе если в нём есть правки базы.
- Включённый патч с правками базы удаляют после обновления сервера.
- Патч другой версии удаляется сразу, даже если в списке он ещё числится включённым. Файлы сервера при этом не откатываются.
Шаг 4. Применить патч через терминал#
Если веб-админка недоступна (сервер не отвечает, ошибка 500, контейнер не поднимается), патч можно применить из терминала на хосте сервера LSUS.
Основной способ — скрипт patch-offline-apply.sh#
LSUS поставляется со скриптом офлайн-применения. Скачайте файл .lsuspatch от поддержки на хост сервера и выполните:
sudo bash /opt/lsus/scripts/patches/patch-offline-apply.sh /path/to/патч.lsuspatch
Что скрипт делает автоматически:
- Кладёт архив в общий каталог данных (
staged/, виден из всех контейнеров мастера). - В каждом контейнере стека (
lsus-master,lsus-master-worker,lsus-master-replication) проверяет подпись, версию и накладывает файлы патча. - Перезапускает контейнеры — при старте применится SQL-часть патча и загрузится новый код.
- Выводит состояние всех патчей.
Если нужно применить патч без перезапуска (например, чтобы перезапустить позже вручную):
sudo bash /opt/lsus/scripts/patches/patch-offline-apply.sh /path/to/патч.lsuspatch --no-restart
Что в выводе
Скрипт показывает ход выполнения по каждому контейнеру. В конце — список применённых патчей. Если всё прошло успешно, вы увидите статус enabled для вашего патча в каждом контейнере.
Если контейнеры остановлены#
Если стек вообще не поднимается, скрипт запустит остановленные контейнеры, дождётся их инициализации и затем применит патч.
Если стек не поднимается даже после этого — положите архив .lsuspatch вручную в каталог staged/ на хосте (/opt/lsus-docker/data/master/patches/staged/) и поднимите стек с переменной LSUS_PATCH_OFFLINE_ENABLE=1 в файле .env. Активация патча произойдёт автоматически при старте контейнеров.
# 1. Положить архив в staged
sudo cp патч.lsuspatch /opt/lsus-docker/data/master/patches/staged/
# 2. Включить офлайн-активацию в .env
# (добавьте или раскомментируйте строку)
# LSUS_PATCH_OFFLINE_ENABLE=1
# 3. Поднять стек
cd /opt/lsus-docker
sudo docker compose -f docker-compose.yml --env-file .env --profile master up -d
Прямые команды в контейнере (для диагностики)#
Для проверки содержимого патча без применения или ручного управления:
# Проверить патч (подпись, версию, состав) без изменений
sudo docker exec lsus-master python3 /app/patch_apply.py inspect /path/to/патч.lsuspatch
# Список всех патчей на сервере
sudo docker exec lsus-master python3 /app/patch_apply.py list
| Команда | Действие |
|---|---|
inspect <файл> |
Проверить патч без применения: подпись, версию, состав |
list |
Показать загруженные, применённые и резервные патчи |
enable <файл> |
Активировать и наложить патч |
disable <patch_id> |
Отключить патч этой версии без правок базы (откат файлов из резерва). Патч другой версии и патч с правками базы команда не отключает |
Откат через терминал
Отключение патча через терминал выполняется отдельно в каждом контейнере стека:
sudo docker exec lsus-master python3 /app/patch_apply.py disable <patch_id>
sudo docker exec lsus-master-worker python3 /app/patch_apply.py disable <patch_id>
sudo docker exec lsus-master-replication python3 /app/patch_apply.py disable <patch_id>
Затем перезапустите стек. Хост-скрипт patch-offline-apply.sh автоматизирует только применение; для отката используйте прямые команды выше.
Как работает патч при применении#
Чтобы понимать, что произойдёт с сервером, полезно знать механику:
- Проверка безопасности. Перед применением проверяется цифровая подпись патча (Ed25519), корректность манифеста и соответствие версии сервера. Патч от стороннего источника или для другой версии применён не будет.
- Замена файлов. Файлы из патча копируются поверх файлов приложения (например, модули Python, шаблоны, статика). Оригиналы сохраняются в резервную копию — для возможности отката.
- SQL-миграции (если есть в патче) — выполняются однократно, под блокировкой, с защитой от повторного наката.
- Перезапуск. Контейнеры/сервис перезапускаются, подхватывая новый код и миграции.
Применение идемпотентно: повторное применение уже активного патча ничего не ломает.
Где хранятся патчи#
На хосте Docker-развёртывания патчи находятся в каталоге данных мастера:
/opt/lsus-docker/data/master/patches/
├── staged/ # загруженные, но ещё не применённые (.lsuspatch)
├── enabled/ # активированные патчи (накатываются при старте)
├── backup/ # резервные копии оригинальных файлов (для отката)
└── disabled/ # архивы отключённых патчей
Этот каталог примонтирован во все контейнеры мастера, поэтому патч, загруженный через веб-админку или скрипт, виден из каждого контейнера.
Патч роли Сайт мастер рассылает на все активные сайты, кроме записи «этот же сервер». На сайте он накладывается на сервер сайта и его репликацию. Патч роли Edge уходит на все пограничные серверы с обычным HTTP-каналом. Пограничный сервер, который ходит только шаттлом, архив по сети не получает. Раздатчик репозиториев и nginx этими архивами не обновляются.
В таблице патчей колонка «Роль» показывает, куда уйдёт архив, колонка «Доставка» — сколько узлов его приняли.
Журнал действий#
Все операции с патчами фиксируются в журнале аудита сервера: загрузка, применение, отключение, удаление. Журнал доступен в разделе Администрирование → Журнал. Это позволяет отследить, кто и когда применил или откатил патч.
Частые вопросы#
Можно ли применять несколько патчей?
Да. Патчи можно применять последовательно. Каждый патч имеет свой идентификатор и порядок применения. При наложении нескольких патчей они применяются независимо, каждый со своим резервом для отката.
Что будет с патчами при обновлении до нового релиза?
При обновлении сервера до нового релиза (через пакеты ОС) межрелизные патчи, чьи исправления вошли в релиз, становятся неактуальными. Их нельзя отключать: откат подставил бы файлы старой версии. В разделе «Патчи сервера» у такой строки только «Удалить». Если исправление ещё не вошло в релиз — патч нужно применить заново после обновления.
Патч не загружается — ошибка версии
Это означает, что патч предназначен для другой версии сервера. Проверьте версию сервера (в шапке админки или /api/v1/health) и свяжитесь с поддержкой — будет выдан патч под вашу версию.
Веб-админка не отвечает после применения патча
Если после применения патча сервер не поднялся, примените откат через терминал:
sudo docker exec lsus-master python3 /app/patch_apply.py disable <patch_id>
sudo docker exec lsus-master-worker python3 /app/patch_apply.py disable <patch_id>
sudo docker exec lsus-master-replication python3 /app/patch_apply.py disable <patch_id>
cd /opt/lsus-docker && sudo docker compose -f docker-compose.yml --env-file .env --profile master restart
После отката соберите логи (см. Шаг 1) и передайте в поддержку.
Связанные страницы#
- Обновление системы LSUS — обновление сервера до нового релиза.
- Docker и образы — состав контейнеров сервера.
- Справочник портов и переменных — переменные окружения, включая
LSUS_PATCH_OFFLINE_ENABLE.