WMRглава 7 из 7

Ваш сервер и надёжность

Прокат работает ночами и в выходные, поэтому системе нужен свой сервер, обновления без инженера на связи и копии, которые переживут сгоревший диск. WMR ставится на сервер компании, сам снимает бэкапы и отправляет зашифрованные копии в ваше хранилище. Содержимое базы разработчику не передаётся, кроме того, что сотрудник сам приложит к отчёту об ошибке.

Ваш сервер и надёжность
Вкладка «Система» в настройках WMR: блок «Мониторинг сервера» с полосами занятой памяти и диска, размером базы и временем работы; ниже блок «Лицензия» со статусом «Активна», сроком действия, остатком дней и кнопкой «Проверить».
Вкладка «Система»: загрузка сервера, размер базы и статус лицензии со сроком действия.

Данные на вашем сервере

WMR ставится на сервер или VPS вашей компании: клиенты, сметы, цены, склад, сотрудники, платежи и Казна живут там. Сведения о сотрудниках, клиентах, договорах, сметах и расчётах разработчику не передаются, кроме отчёта об ошибке: так записано в § 7 Политики конфиденциальности. Увидеть ваши данные он может, только если вы сами позовёте его на разовую техподдержку или сотрудник сам приложит скриншот к отчёту об ошибке: снимок уходит целиком, и форма об этом предупреждает (п. 7.6).

Наружу уходит служебный обмен, внутрь — обновления. Раз в сутки — проверка лицензии: ключ, версия, число учётных записей, обезличенный отпечаток и загрузка сервера; сервер лицензий видит и её сетевой адрес. По событию — имя сервера и команды запущенного администратором бэкапа или восстановления, описание ошибки сорванного обновления. Контроль целостности — имя сервера, версия, номера затронутых записей и количества, без названий оборудования, проектов и клиентов. Для техподдержки агент обновлений сообщает версию, прошла ли последняя копия и сколько было ошибок по типам, без текста ошибок и содержимого базы.

Зачем этоКлиенты, цены и сметы не лежат в чужом облаке, где их читает сервис.

Ваш сервер и надёжность
Текст пункта 7.5 Политики конфиденциальности WMR: перечень технической информации, которую экземпляр программы передаёт серверу лицензий, и выделенный итоговый абзац о том, что сведения о сотрудниках, клиентах, договорах, сметах и расчётах не передаются.
Пункт 7.5 Политики конфиденциальности: полный перечень того, что система передаёт серверу лицензий.

Лицензия без оплаты за пользователей

WMR ставят на собственный сервер компании или арендованный VPS, на Linux или macOS. Число пользователей не ограничено: серверу лицензий сообщается, сколько учётных записей активно, но только как сведение, доступ от этого не зависит. Ролей — сколько нужно: роль — это набор галок прав, новая заводится кнопкой «Создать роль».

Ключ сверяется раз в сутки, без связи система работает ещё 7 дней.

Зачем этоЦена не растёт вместе со штатом, а работа не зависит от чужого облака.

Ваш сервер и надёжность
Страница «Роли» с кнопкой «Создать роль» и матрицей прав, отфильтрованной по группе «Финансы»: роли Админ, Бригадир, Кладовщик, Техник, Мл. менеджер, Ст. менеджер и своя роль «Ст.техник» с меткой «польз.»; у каждой счётчик прав из 64, галки бухгалтерии, Казны, финкокпита, удаления выплат и аналитики и столбец «Польз.» с числом людей в роли.
Роли: готовые и свои, у каждой набор галок прав и число людей в роли.

Зашифрованные копии в облаке и на NAS

Ночная копия уезжает в облако по WebDAV или на ваш сервер и NAS по SFTP. Архив шифруется AES-256-GCM парольной фразой компании, которой нет даже у разработчика. Отправка не включится, пока не скачан файл ключа восстановления, а рядом с копией кладётся расшифровщик на Python: данные можно достать и без WMR.

Для медленного канала есть режим «только база», неотправленные копии досылаются в следующие ночи.

Зачем этоСгоревший диск, украденный сервер или отказ хостинга не уносят все резервные копии.

Ваш сервер и надёжность
Окно «Новое назначение» для внешних копий: название «NAS в офисе», тип SFTP/SCP, хост и порт 22, папка «Бэкапы», хранить 14 копий, пользователь и пароль, поле для приватного SSH-ключа; галка «Отправлять медиафайлы» снята, наружу уйдёт только база.
Новое назначение для внешних копий: SFTP-сервер в офисе, вход по паролю или SSH-ключу и режим «только база» для медленного канала.

Еженедельная проверка копии

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

В карточке назначения отдельными строками видны оба ответа: уехала ли копия и годна ли она.

Зачем этоО битой копии компания узнаёт в спокойный день, а не в день аварии.

Ночной бэкап и восстановление

Каждую ночь система складывает в один архив основную базу, базы удалённых складов и файлы. В папку бэкапов архив попадает только целым и проверенным. Архивы старше 30 дней удаляются, но три последних проверенных остаются всегда. Копию можно снять и скачать вручную.

При восстановлении с очисткой копия сначала читается целиком: если в ней есть повреждение, процесс не начинается, и данные не тронуты.

Зачем этоМесяц незамеченных сбоев не уничтожит последнюю рабочую копию.

Ваш сервер и надёжность
Две карточки на вкладке «Система»: синяя «Создать бэкап» — полная копия проектов, смет, оборудования, персонала, каталога субаренды, настроек и файлов, кнопка «Скачать бэкап»; жёлтая «Восстановить из бэкапа» — выбор файла, галка «Очистить существующие данные перед импортом» и кнопка «Восстановить».
Полную копию можно скачать вручную, восстановление — из тех же настроек.

Обновление одной кнопкой

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

Журнал всех шагов идёт на экран, а после перезапуска страница сама показывает итог.

Зачем этоНовые версии доезжают без выезда программиста, и у каждого обновления есть точка возврата.

Ваш сервер и надёжность
Карточка «Обновление системы» с текущей версией и кнопками «Проверить сейчас» и «Обновить сейчас»; под кнопкой окно «Обновить систему?»: сначала снимется бэкап базы, и если он не снимется, обновление не начнётся; затем миграции и перезапуск сервера; кнопки «Отмена» и «Обновить».
Перед запуском система называет порядок: сначала бэкап базы, без него обновление не начнётся.

Данные не держат в заложниках

Когда подписка истекает, система переходит в режим «только чтение»: данные видно и можно выгрузить, но изменения не сохраняются. Если связи с сервером лицензий нет больше 7 дней или лицензия заблокирована, открывается экран блокировки. Но и на нём администратор может снять и скачать бэкап.

Сканирование QR на складе от проверки лицензии освобождено.

Зачем этоДоступ к собственной базе у прокатчика не отнимут ни при каком споре о лицензии.

Роли и права как данные

Роль в WMR — набор прав, который хранится в базе: 64 права в 7 разделах, 6 готовых ролей и сколько угодно своих. Галочки ставятся в редакторе роли или сразу в сводной матрице, зависимые права подтягиваются сами.

Сервер не даст отрезать себе доступ: нельзя снять у своей роли управление пользователями и остаться без единой роли, которая им управляет.

Зачем этоКладовщик не видит денег, техник видит только своё, и это меняется за минуту.

Ваш сервер и надёжность
Сводная матрица прав: складские права всех ролей на одном экране, галка ставится прямо в таблице.

Доступ к одному проекту

Коллегу или подрядчика можно пустить в конкретный проект, а не во всю систему. «Доп. доступ» на проекте даёт минимум — видеть смету, а дальше отдельными флагами включаются правка сметы, просмотр цен, выгрузка сметы, умная погрузочная и её выгрузка, управление персоналом, другие вкладки и документы.

Зачем этоФрилансеру или партнёру открывают один проект, не показывая ему всю базу.

Ваш сервер и надёжность
Поле «Доп. доступ» в карточке проекта с сотрудником «Фрайс И.О. · Ст. менеджер» и шестерёнкой; под ним окно «Права: Фрайс И.О.» с флагами по группам: смета, цены и финансы, погрузочные, персонал, прочие вкладки, документы, экспорт сметы; отмечены умная погрузочная, вкладки «Инфо / Расписание / Журнал» и экспорт сметы.
«Доп. доступ»: человек пущен в один проект, а что ему там можно, решают галки.

Отчёт об ошибке со страницы

«Сообщить об ошибке» есть на каждой странице. В отчёт идут описание, до 10 скриншотов и технический журнал последних 5 минут: шаблоны адресов, коды ответов, время и классы ошибок, без их текста и без данных. Перед отправкой видно, что именно уйдёт, а форма предупреждает: скриншоты уходят целиком.

Пока компания не включит эту функцию, она выключена, а отправить отчёт может только сам сотрудник.

Зачем этоОшибку чинят по фактам, а не по пересказу «оно как-то не сохранилось».

Ваш сервер и надёжность
Форма «Сообщить об ошибке»: заполнены поля «Что делали», «Что ожидали» и «Что получилось», приложен снимок экрана, над ним жёлтое предупреждение, что снимки уходят целиком. Справа раскрыт блок «Что уйдёт вместе с текстом»: версия WMR, шаблон адреса страницы без номеров записей, браузер, служебные названия включённых модулей, число запросов в журнале сервера без содержимого страниц.
Перед отправкой видно всё, что уйдёт разработчику: адрес — шаблоном, журнал — без содержимого страниц.

Модули, которые можно выключить

Субаренду, Казну, логистику, пропуска и ещё два десятка разделов компания отключает у себя одной галкой; сметы, календарь и каталог — ядро. Выключенный модуль пропадает из меню, а его страницы закрываются и на сервере, а не только в интерфейсе.

Сейчас в WMR доступны все модули. В будущем появится оплата по модулям отдельно — каждый будет платить ровно за то, что ему нужно.

Зачем этоНебольшой прокат не тонет в функциях крупного, а крупный включает всё нужное.

Ваш сервер и надёжность
Вкладка «Модули» в настройках: группы «Проекты и финансы» и «Склад»; у календаря, смет и каталога метка «Ядро», у субаренды, бухгалтерии, Казны, приёмки возвратов, погрузочных, ремонтов и инвентаризации переключатели включены, «Места хранения» выключены.
Вкладка «Модули»: у календаря, смет и каталога метка «Ядро», остальные разделы включаются и выключаются переключателем.

Ещё в главе

Примерка роли

Администратор выбирает роль и видит систему так, как её увидит, например, кладовщик: скрытые разделы, закрытые страницы, спрятанные цены. Прямо там можно включать и выключать отдельные права. Это песочница: изменения живут только в текущем сеансе и базу не трогают.

Когда картина устраивает, одна кнопка записывает набор в настоящую роль с теми же защитами, что и в редакторе ролей, а «Сбросить» возвращает всё как было.

Сбой обновления и откат

До раскладки файлов агент проверяет архив и делает пробный прогон изменений базы. При ошибке он останавливается, ничего не тронув. Если сорвался перенос данных уже после раскладки, перезапуска нет: работающие процессы продолжают обслуживать сотрудников, и новая версия не стартует на недоперенесённых данных.

Три последних выпуска, установленных из архива, хранятся на сервере, и откатиться на них можно без интернета. Откат тоже начинается только после бэкапа и отказывает, если снимаемая версия меняла структуру базы. Откат запускает служба поддержки, отдельной кнопки у клиента нет.

Журнал безопасности

Система записывает успешные и неудачные входы с IP и браузером, отказы в доступе, выгрузки смет и проектов, изменения ролей и модулей, обращения по API-токенам с указанием раздела. Тысяча попыток подобрать пароль складывается в одну строку со счётчиком.

Удаления записываются, каким бы путём они ни случились, а каскад ложится одной сводкой. Пароли и токены в журнал не попадают. Журнал хранится 180 дней. Администратор сервера читает журнал отдельной командой с фильтрами и выгрузкой в CSV.

Мониторинг сервера

Процессор, память, диск, размер базы и время работы сервера видны на вкладке «Система» и обновляются каждые 15 секунд; полоса желтеет от 60% и краснеет от 85%. Раз в час снимается снимок метрик, история хранится 30 дней. Для администратора сервера есть самопроверка баз, места на диске и Redis, а логи сервера читаются, фильтруются и скачиваются прямо в интерфейсе. Разработчику агент сообщает дату и размер последнего бэкапа, итог последнего обновления и сводку ошибок за сутки: только типы ошибок и места в коде, без названий проектов, имён и сумм.

Подписанные выпуски

При обновлении из выпускного архива скачанный файл проходит три проверки: контрольную сумму SHA-256, подпись RSA-PSS встроенным открытым ключом и отсутствие опасных путей внутри архива. Без подписи такой выпуск не ставится. Сервер лицензий управляет агентом подписанными запросами: ключ лицензии в них не передаётся, а ответ агента подписан под конкретный запрос, поэтому подменить или повторить его по дороге нельзя. На переходный период агент ещё принимает и прежний способ входа. Ключ лицензии не виден и в списке процессов сервера.

Паспорта и ведомости закрыты от прямых ссылок

Сканы документов сотрудников, вложения к остановкам рейсов, бухгалтерские ведомости, документы компании и проектов и скриншоты отчётов об ошибках лежат в отдельном закрытом каталоге, куда веб-сервер не смотрит, и скачиваются только через страницы с проверкой прав. Обновление этот каталог не трогает, а восстановление из старой копии само переносит такие файлы из открытого каталога. Документы сотрудников и оборудования проверяются по содержимому, а не только по расширению, а из фото склада удаляются координаты и данные устройства.

Двойной щелчок не создаёт второй платёж

Каждое открытие формы оплаты или выплаты получает свой ключ. Двойной щелчок, повтор после оборванной связи, вторая вкладка или «Назад» с повторной отправкой возвращают уже проведённую операцию, а не заводят новую. Так защищены платежи клиентов, оплаты субаренды и поставщикам, выплаты персоналу, менеджерам и перевозчикам, расходы и премии, в том числе из мобильного кабинета.

Переезд из Excel

Шесть мастеров импорта — каталог, смета, клиенты, сотрудники с транспортом, доверенный поставщик и каталог субаренды — работают в три шага: загрузить файл, сопоставить колонки (система угадывает их по заголовкам) и импортировать. Каталог понимает типовой прокатный прайс, где разделы и бренды определяются по жирности и заливке ячеек. Колонка «Внешний ID» позволяет залить поправленный файл повторно и обновить позиции вместо дублей, а два нажатия «Импортировать» на один файл не зальют строки дважды.

Скорость на больших данных

Проставление позиций по дням на проекте из 23 человек и 5 дней раньше занимало почти 5 секунд, теперь меньше секунды: деньги пересчитываются один раз на операцию, а не на каждый день. Страница сметы в своё время стала читать базу вдвое реже, обновление строки — вчетверо реже, дерево каталога кешируется, а для поиска по каталогу, сотрудникам и клиентам стоят триграммные индексы PostgreSQL. Бэкап и шифрование копий идут потоком и не раздувают память.

На чём построен WMR

Django 6 и Python 3.13, PostgreSQL 17, gunicorn за nginx; если Redis упал, система продолжает работать без него. Документы собираются через ReportLab, openpyxl и python-docx, световые планы распознаются связкой pdfplumber и Tesseract. Под этим около 305 тысяч строк кода на Python, около 190 моделей данных и около 29 тысяч тестовых функций, которые гоняются в трёх часовых поясах, а сотни проверок числа запросов к базе не дают страницам медленно разрастаться. На странице «Что нового» видна скорость выпусков: в сентябре 2026 года вышло почти 200 версий вместе с исправлениями.