Appearance
Лицензия (on-premise)
On-premise стенды лицензируются файлом .lic (криптографически подписан, Ed25519). SaaS-стендов лицензирование не касается. Управление — через UI приложения (страница /license, право admin.settings) или artisan-команды.
Состояния
| Статус | Что значит | Поведение стенда |
|---|---|---|
valid | Лицензия действует | Полная функциональность; заранее появляется expiring_soon |
grace | Срок истёк, идёт льготный период | Полная функциональность, баннер-предупреждение — время продлить |
readonly | Grace истёк / лицензия отозвана / обнаружен откат системных часов | Чтение работает, все изменения данных блокируются |
missing | Лицензии нет | Новый стенд работает полнофункционально 30 дней (runway) с первого запуска, затем readonly |
Дополнительно лицензия ограничивает число пользователей (max_users): при достижении лимита новые пользователи не создаются, существующие работают как раньше.
Команды
bash
# Статус: тип, владелец, срок, лимит пользователей, дни до истечения
docker exec orbita_onpremise_backend php artisan license:status
# Установка/замена файла (применяется сразу, рестарт не нужен)
docker cp customer.lic orbita_onpremise_backend:/tmp/customer.lic
docker exec orbita_onpremise_backend php artisan license:install /tmp/customer.licФайл также можно загрузить через UI (страница Лицензия) — результат тот же.
Ежедневно в 06:00 планировщик запускает license:check — пересчитывает статус и рассылает административные уведомления о приближении срока.
Типовые ситуации
Стенд ушёл в readonly
php artisan license:status— смотримreason:expired— грейс истёк: получить у поставщика новый.lic, установить, стенд оживает сразу;revoked— лицензия отозвана: связаться с поставщиком;clock_tamper— система заметила откат часов назад. Проверить NTP-синхронизацию хоста (timedatectl), вернуть корректное время, установить актуальный.lic.
- После установки валидного файла проверить:
license:status→valid, создание тестовой записи проходит.
Часы и NTP
Механизм защиты от подкрутки времени реагирует на откат системных часов назад. Держите NTP включённым на хосте — контейнеры наследуют его время. Разовые большие скачки времени (например, после восстановления VM из снапшота с старым временем) могут привести к ложному clock_tamper — лечится корректным временем + переустановкой .lic.
Перенос стенда на другой сервер
Лицензия хранится в БД, поэтому при восстановлении из бэкапа на новом железе приезжает вместе с данными. Если лицензия привязана к instance ID и после переноса статус изменился — запросить у поставщика перевыпуск.
Замечание о безопасности
Публичный ключ проверки подписи вшит в приложение; приватный ключ и генератор лицензий на стендах отсутствуют (отдельный закрытый репозиторий поставщика). Редактирование .lic или строк лицензии в БД приводит к невалидной подписи и readonly — «починить руками» лицензию нельзя, только валидным файлом.