← Статьи

Лицензия библиотек в Docker и Kubernetes и на машинах без интернета

Библиотеки libscanner — чтение DataMatrix (dmr), универсальное чтение кодов (unir) и генерация DataMatrix (dmgen) — работают по лицензии. Обычная лицензия привязана к оборудованию машины. В контейнере такая привязка не работает: контейнер пересоздаётся, переезжает на другой хост, их запускают десятками. Для этого есть лицензия «на экземпляры». Ниже — как устроены оба вида и как работать без интернета.

Два вида лицензии

На машиныНа экземпляры
Что считаетсяМашины: лицензия привязана к оборудованию (материнская плата, процессор, системный диск)Сколько процессов с библиотекой работает одновременно — контейнеров, подов, виртуальных машин
Где работаетОбычный компьютер или серверГде угодно: Docker, Kubernetes, облачные группы машин, обычный сервер
АктивацияКлючом по сети или файлом без интернетаНе нужна: ключ передаётся контейнеру, остальное библиотека делает сама
Без связи с сервером лицензийДо 14 дней, а при активации файлом «на весь срок» — до конца оплаченного срока7 дней с последнего отчёта

Вид задаёт тариф, а не среда: ключ «на экземпляры» работает и на обычном сервере, а ключ «на машины» в контейнере не активируется — библиотека так и скажет: в контейнере нужна лицензия на экземпляры. Перевести купленную лицензию с машин на экземпляры можно через поддержку.

Лицензия на экземпляры: Docker и Kubernetes

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

БиблиотекаПеременная окруженияСекрет (файл)
unir 1.2UNIR_LICENSE_KEY/run/secrets/unir.key
dmr 1.1DMR_LICENSE_KEY/run/secrets/license.key
dmgen 1.1DMGEN_LICENSE_KEY/run/secrets/dmgen.key

Docker Compose:

services:
  reader:
    image: my-reader:latest
    environment:
      UNIR_LICENSE_KEY: ${UNIR_LICENSE_KEY}   # ключ из кабинета

Kubernetes — ключ в Secret, в контейнер — переменной:

kubectl create secret generic unir-license --from-literal=key=UNIR-XXXXX-XXXXX-XXXXX-XXXXX

# в описании пода
env:
  - name: UNIR_LICENSE_KEY
    valueFrom:
      secretKeyRef: { name: unir-license, key: key }

Переменная проверяется первой, затем файл в /run/secrets/, затем — как раньше — файл ключа рядом с библиотекой и программой.

Как считаются экземпляры

  • При старте процесс занимает место на сервере лицензий. Пока он работает, библиотека отмечает 5-минутные отрезки, в которые читала или создавала коды, и раз в 30 минут в фоне отправляет отметки пачкой. При старте сервер узнаёт имя хоста или пода, версию библиотеки и ОС — для списка в кабинете; кадры, коды и данные программы не отправляются никогда.
  • Считается, сколько экземпляров работает одновременно, а не сколько их было за месяц. Упавший без остановки экземпляр перестаёт занимать место через час.
  • Экземпляр — процесс. Рабочие процессы, запущенные через fork после загрузки библиотеки (gunicorn с --preload, multiprocessing), — каждый свой экземпляр: место занимается при первом чтении или создании кода в процессе. Главный процесс, который сам коды не читает и не создаёт, освобождает своё место в течение 30 минут.
  • В пике можно больше оплаченного: одновременно стартует до 2 × N экземпляров (N — сколько куплено), а время сверх N списывается из месячного запаса — 10 % купленной ёмкости. На 50, 80 и 100 % запаса на почту приходит письмо.
  • Запас кончился — до конца месяца новые экземпляры сверх N не стартуют («все места заняты»), уже работающие продолжают работу. 1-го числа запас обновляется.
  • Нет связи с сервером лицензий — каждый экземпляр работает ещё 7 дней с последнего отчёта, потом сообщение «нужна связь с сервером лицензий».

В личном кабинете у лицензии на экземпляры видно, сколько их работает сейчас из N, график за сутки, сколько израсходовано из месячного запаса и список работающих экземпляров с именем хоста или пода и версией библиотеки. В контейнере unir --license status показывает режим «экземпляры», число оплаченных мест и до какого времени экземпляр работает без связи.

Пробный ключ для контейнеров

Пробный период без ключа (30 дней) в контейнере не действует: его сбрасывало бы каждое пересоздание контейнера. Чтобы попробовать библиотеку в Docker или Kubernetes, получите в личном кабинете пробный ключ для контейнеров: 2 экземпляра на 30 дней, один на учётную запись для каждого продукта, нужна подтверждённая почта.

Обычная машина без интернета: на весь срок

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

  1. На машине: unir --license request запрос.json — файл запроса с отпечатком машины.
  2. На компьютере с интернетом: в личном кабинете откройте лицензию, раздел «Активация без интернета», загрузите запрос, отметьте «Машина без интернета — работать весь срок без связи» и скачайте license.lic.
  3. На машине: unir --license import license.lic.

Продление: оплатите продление в кабинете, сделайте на той же машине новый запрос и получите новый license.lic — место машины остаётся тем же. Перенос на другую машину: unir --license deactivate расписка.json на старой, расписку — в кабинет, затем запрос с новой машины. Если старая машина потеряна — перенос через поддержку.

Важно: после такой активации деньги за лицензию не возвращаются — сервер не может проверить, что машина перестала ей пользоваться. В кабинете это написано рядом с отметкой. Для dmr и dmgen команды те же: dmr --license …, dmgen --license ….

Попробовать

Библиотеки и документация — на странице документации. Пробный ключ для контейнеров и активация без интернета — в личном кабинете после регистрации.

«Честный знак» — товарный знак ООО «Оператор-ЦРПТ», «GS1» — GS1 AISBL; продукт не связан с их владельцами и ими не сертифицирован.