Как использовать разные лицензии для разных баз 1С на одном сервере

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При развертывании инфраструктуры 1С часто возникает задача изолировать лицензии между разными информационными базами. Типичный пример: на одном сервере работают тяжелые учетные системы (например, Бухгалтерия предприятия или Зарплата и управление персоналом) и небольшая сервисная база (например, HelpDesk). Руководство компании хочет жестко выделить под HelpDesk ровно 10 конкретных лицензий, чтобы пользователи этой базы не занимали лицензии из основного пула компании, и наоборот.

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

Способ 1. Запуск второго независимого экземпляра (инстанса) службы сервера 1С

Это самый надежный и доступный способ разделения лицензий, если у вас нет лицензий уровня КОРП. Мы запустим на одном физическом сервере две независимые службы 1С:Предприятия. Основная служба будет обслуживать учетные базы на стандартных портах, а вторая служба — базу HelpDesk на альтернативных портах.

Выполним настройку по шагам:

  1. Создадим нового пользователя в операционной системе. Например, в Windows назовем его usr1cv8_helpdesk. Это необходимо для того, чтобы изолировать файлы программных лицензий. Платформа ищет файлы лицензий в профиле пользователя, от имени которого запущена служба.
  2. Зарегистрируем новую службу сервера 1С на альтернативных портах. Для этого используем командную строку (cmd) от имени администратора. Обратите внимание на параметры портов (зададим, например, порты 2540, 2541 и диапазон 2560–2591) и новый каталог данных srvinfo_helpdesk:

sc create "1C_Enterprise_8.3_Helpdesk" binPath= "\"C:\Program Files\1cv8\8.3.23.1865\bin\ragent.exe\" -srvc -agent -regport 2541 -port 2540 -range 2560:2591 -d \"C:\srvinfo_helpdesk\"" start= auto obj= ".\usr1cv8_helpdesk" password= "MyStrongPassword123"
  1. Активируем лицензии. Запустим конфигуратор базы HelpDesk, подключившись к серверу через новый порт 2541 (строка подключения будет выглядеть как localhost:2541). При запросе лицензии активируем наш 10-пользовательский программный ключ. Файлы лицензий с расширением .lic запишутся в профиль пользователя usr1cv8_helpdesk.
  2. Изолируем лицензии. Поскольку основная служба сервера работает под пользователем usr1cv8, она физически не увидит файлы лицензий из папки профиля usr1cv8_helpdesk. В результате база HelpDesk будет использовать строго свои 10 лицензий, а основные базы — свой собственный пул.

Способ 2. Выделение пула лицензий через веб-сервер и файлы nethasp.ini

Если база HelpDesk будет опубликована на веб-сервере (Apache или IIS) для работы через браузер или тонкий клиент по HTTP, мы можем переложить задачу раздачи лицензий с сервера 1С на веб-сервер.

Рассмотрим по шагам, как это реализовать:

  1. Откроем консоль администрирования кластера 1С, зайдем в свойства нашей информационной базы HelpDesk и установим параметр «Разрешить выдачу лицензий сервером 1С:Предприятия» в значение Нет. Теперь сервер приложений 1С принципиально не будет выдавать лицензии клиентам этой базы.
  2. Установим на сервере отдельный экземпляр Apache (или создадим изолированный пул приложений в IIS) специально для публикации базы HelpDesk.
  3. В каталог bin установленного веб-сервера (где лежит модуль расширения веб-сервера 1С) поместим индивидуальный файл настроек nethasp.ini.
  4. В этом файле жестко пропишем IP-адрес того менеджера лицензий HASP (HASP License Manager), на котором установлен нужный нам ключ на 10 пользователей:

[NH_COMMON]
NH_TCPIP = Enabled

[NH_TCPIP]
NH_SERVER_ADDR = 192.168.1.15 ; IP-адрес машины с 10-пользовательским ключом
NH_PORT_NUMBER = 475
NH_TCPIP_METHOD = UDP

Для публикации остальных баз (Бухгалтерия, ЗУП) будем использовать стандартный веб-сервер, в файле nethasp.ini которого пропишем IP-адрес основного менеджера лицензий. Таким образом, веб-клиенты будут брать лицензии из строго разделенных аппаратных ключей.

Способ 3. Требования назначения функциональности (ТНФ) в кластере (требуется лицензия КОРП)

Если у вас развернут кластер 1С с лицензиями уровня КОРП, мы можем управлять распределением лицензий штатными средствами платформы без создания дополнительных служб в операционной системе.

Выясним, как настроить маршрутизацию сеансов внутри кластера:

  1. Добавим в наш существующий кластер второй рабочий сервер (физически это может быть тот же сервер, но запущенный как дополнительный рабочий процесс под другим портом — например, 1640). Назовем его Сервер_HelpDesk.
  2. На этом рабочем сервере активируем нашу программную лицензию на 10 пользователей.
  3. В консоли администрирования кластера перейдем к настройке Требований назначения функциональности для Сервера_HelpDesk.
  4. Создадим новое правило со следующими параметрами:
    • Объект требования: Клиентское соединение с информационной базой.
    • Имя ИБ: HelpDesk.
    • Тип требования: Назначать.
  5. Для основного рабочего сервера кластера создадим аналогичное правило, но с типом требования Не назначать для базы HelpDesk.

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

Способ 4. Внешнее управление сеансами (требуется лицензия КОРП)

Для конфигураций КОРП доступен еще один современный и изящный метод контроля количества подключений — механизм Внешнего управления сеансами. Он позволяет ограничить количество пользователей на программном уровне, не привязываясь к физическим ключам.

Проанализируем схему работы этого механизма:

  1. Платформа 1С позволяет связать информационную базу с внешним веб-сервисом (написанным на любом языке программирования, например, Python, Go или на самой 1С).
  2. При каждой попытке входа нового пользователя в базу HelpDesk кластер 1С отправляет HTTP-запрос к этому веб-сервису.
  3. Веб-сервис анализирует текущее количество активных сеансов в базе. Если оно уже равно 10, веб-сервис возвращает веб-хук с отказом авторизации.

Пример структуры JSON-ответа от веб-сервиса, блокирующего 11-е подключение:


{
    "action": "Reject",
    "reason": "Превышено максимальное количество одновременно работающих пользователей для базы HelpDesk (лимит 10 сеансов)."
}

Этот способ позволяет гибко управлять доступом и гарантирует, что база HelpDesk физически не сможет занять более 10 лицензий из общего сетевого пула компании.

Важные ограничения при работе с аппаратными (HASP) ключами одной серии

Если вы планируете использовать для разделения пулов аппаратные USB-ключи (HASP), необходимо учитывать важнейшее ограничение драйверов SafeNet:

Нельзя вставлять два сетевых ключа одной серии (например, два ключа ORGL8 на 10 и на 50 пользователей) в один физический компьютер. Операционная система и менеджер лицензий увидят только один из этих ключей (выбранный случайным образом), а второй ключ будет полностью проигнорирован.

Чтобы обойти это ограничение, выполните следующие действия:

  1. Разнесите USB-ключи по разным физическим компьютерам или виртуальным машинам в вашей локальной сети. Например, 50-пользовательский ключ оставьте на основном сервере приложений, а 10-пользовательский ключ вставьте в любой другой свободный сервер или ПК.
  2. На каждой машине, где установлен ключ, запустите службу HASP License Manager.
  3. В конфигурационном файле менеджера лицензий nhsrv.ini на машине с 10-пользовательским ключом вы можете использовать параметр NHS_IP_LIMIT, чтобы разрешить забирать лицензии только веб-серверу базы HelpDesk, полностью закрыв доступ для остальных компьютеров сети.

Использование описанных методов позволит вам гибко настроить ИТ-инфраструктуру предприятия, оптимизировать затраты на лицензирование и гарантировать стабильную работу критически важных бизнес-приложений.

← На главную