Что внутри RackGrid, часть 7/7. Варианты поставки.
Финальная часть — про то, чего вообще не видно в интерфейсе, но что съедает изрядную долю работы. RackGrid ставится двумя способами. Docker — PostgreSQL, Redis, очереди, воркеры, миграции. Это для площадок, где есть сервер и человек, который знает, что такое compose-файл. Один .exe — SQLite рядом с исполняемым файлом, мониторинг в фоновом потоке вместо очередей, никакой инфраструктуры вообще. Скачал, запустил, открыл браузер. Один и тот же код. И из этого вырастает целый пласт неочевидных задач: Две схемы миграций. В серверной версии — обычные миграции по файлам ревизий. В standalone-версии их нет: там версия схемы вычисляется от версии сборки и хранится прямо в настройках приложения, а обновления применяются идемпотентно, только вперёд. Чистая установка помечается текущей версией без прогона истории. Цена решения — при изменении схемы нужно не забыть про обе ветки. Лицензирование на подписях Ed25519. Ключевой принцип: лимиты берутся из подписанных данных, а не из полей базы. Правка записи в БД не даёт ничего — подпись перестаёт сходиться. Проверка встроена в каждую фоновую задачу и в цикл мониторинга, а не только в экран «О программе». Права фильтруют данные, а не кнопки. Три роли: глобальный администратор, администратор площадки, владелец оборудования. Роль применяется на уровне выборки — владелец физически не получает в ответе чужие устройства. Спрятанная в интерфейсе кнопка защитой не является; защита — это данные, которые не покинули сервер. Что в итоге оказалось сложным. Не алгоритмы. Сложным оказалось другое: система должна оставаться быстрой и честной ровно в тот момент, когда с оборудованием плохо. Половина стойки выключена, коммутатор моргнул, площадка отвалилась, брокер перезагрузился — именно тогда мониторинг нужен больше всего, и именно тогда наивная реализация превращается в ту самую зависшую таблицу, с которой всё начиналось. Около 27 тысяч строк кода, четыре протокола, два режима работы, чуть больше сотни автотестов — ради одного ощущения: открыл дашборд и за секунду понял, дышит площадка или нет. 👉 Живое демо (настоящий интерфейс, симулированные данные): https://danildanil86660.github.io/RackGridLiveDemo Спасибо всем, кто читал серию. Если решали похожие задачи — опрос разнородного железа, таймауты, тайм-серии, распределённые агенты — очень интересно сравнить подходы.