Запускаем сервер 1С для хранения и выдачи лицензий

Что такое сервер лицензирования 1С и как запустить его в облаке

Владислав Ефименко
Владислав Ефименко Главный редактор
5 февраля 2024

Рассказываем, как централизовать хранение и выдачу лицензий, чтобы минимизировать риски, связанные с их нештатной работой.

Изображение записи

Что такое сервер лицензирования 1С

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

Чтобы минимизировать подобные риски, необходимо централизовать хранение и выдачу программных клиентских и серверных лицензий. Это можно сделать, разместив их на отдельной машине — сервере лицензирования.

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

Преимущества кластера с сервером лицензирования

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

Часто задаваемые вопросы

Нужны ли дополнительные лицензии для сервера лицензирования 1С?

Нет, сервер лицензирования не требует установки дополнительных лицензий. Если вы запускаете сервер 1С, у вас уже есть дистрибутив — доплачивать не нужно.

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

Помогают ли экономить серверы лицензирования? 

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

Какие конфигурации подходят для серверов лицензирования? 

Как ПО, сервер лицензирования 1С потребляет не много вычислительных ресурсов. Для небольшого кластера до пяти серверов будет достаточно двух ядер, 4 ГБ оперативной памяти и примерно 20 ГБ на диске для хранения лицензий.

Задача: собрать кластер 1С

Протестируем серверы лицензирования на примере облачной платформы Selectel. Соберем кластер из двух серверов и одной облачной базы данных, развернем необходимое ПО и настроим раздачу лицензий.

Подготовка кластера

1. Переходим в раздел Облачная платформа внутри панели управления.

2. Создаем два облачных сервера в рамках одного проекте. Один будет выполнять роль сервера лицензирования, а второй — обслуживать пользователей.

Пример создания двух облачных серверов.

3. В разделе Облачные базы данных создаем кластер PostgreSQL-14-1C, пользователя и базу данных. Подробнее о работе с услугой можно ознакомиться в документации.

Создание нового кластера базы данных.

Настройка сервера приложений

1. Подключаемся к серверу приложений (demo-server) по SSH и устанавливаем переменные окружения:


    export PLATFORM_VERSION='8.3.23.1912'
export PLATFORM_ARCH='x86_64'
export PKG_SERVER_NAME='server64_8_3_23_1912.tar.gz'

В переменные окружения записываем версию платформы, ее разрядность и название дистрибутива, который «превратит» нашу виртуальную машину в сервер приложений 1С.

Работа с переменными окружения.

2. Загружаем необходимые дистрибутивы для сервера приложений:


    wget https://52772e2d-80a1-4cab-a8a3-d66ac287e640.selstorage.ru/server64_8_3_23_1912.tar.gz
wget http://www.gilev.ru/1c/tpc/GILV_TPC_G1C_83.dt

Снапшоты дистрибутивов доступны в хранилище Selectel, но их также можно взять с официального сайта 1C.

3. Устанавливаем необходимые пакеты для работы 1С и Apache. Это можно сделать с помощью одной команды:


    echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections &&
    apt-get -qq update &&
    apt-get install -y \
        iproute2 \
        curl wget \
        ttf-mscorefonts-installer \
        imagemagick \
        unixodbc \
        fontconfig \
        libgtk-3-0 \
        libenchant1c2a \
        libharfbuzz-icu0 \
        libgstreamer1.0-0 \
        libgstreamer-plugins-base1.0-0 \
        gstreamer1.0-plugins-good \
        gstreamer1.0-plugins-bad \
        libsecret-1-0 \
        libsoup2.4-1 \
        libgl1 \
        libegl1 \
        libxfixes3 \
        libxslt1.1 \
        geoclue-2.0 \
        openjdk-8-jre \
        jq \
        netcat \
        apache2

4. Обновляем шрифты клиента на сервере:


    fc-cache -fv

5. Распаковываем и устанавливаем платформу:


    tar vxf "${PKG_SERVER_NAME}"
./setup-full-${PLATFORM_VERSION}-${PLATFORM_ARCH}.run --mode unattended \
    --enable-components liberica_jre,server,server_admin,ws

При возникновении ошибок проверьте, правильно ли записаны значения переменных окружения. 

6. Создаем линки для нужных исполняемых файлов, чтобы не писать каждый раз путь к платформе (она будет на машине одна):


    ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/webinst /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/ragent /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/ras /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/rac /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/ibcmd /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/ibsrv /usr/local/bin

7. Регистрируем необходимые сервисы, в частности — сервер приложений 1С:Предприятие:


    systemctl link \
    /opt/1cv8/$PLATFORM_ARCH/$PLATFORM_VERSION/srv1cv8-${PLATFORM_VERSION}@.service
systemctl enable srv1cv8-${PLATFORM_VERSION}@default
systemctl start srv1cv8-${PLATFORM_VERSION}@default
systemctl status srv1cv8-${PLATFORM_VERSION}@default

8. На этом этапе сервис уже работает. Запускаем сервер ras:


    systemctl link \
    /opt/1cv8/$PLATFORM_ARCH/$PLATFORM_VERSION/ras-${PLATFORM_VERSION}.service
systemctl enable ras-${PLATFORM_VERSION}
systemctl start ras-${PLATFORM_VERSION}
systemctl status ras-${PLATFORM_VERSION}
ras — сервер удаленного администрирования кластера 1С. Он позволяет прослушивать порт 1545/tcp и принимать команды на управление от утилиты rac.

Отлично — сервер приложений готов. Теперь нужно настроить сервер лицензирования.

Настройка сервера лицензирования

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

1. Подключаемся к серверу лицензирования (demo-licence) по SSH и устанавливаем следующие переменные окружения:


    export PLATFORM_VERSION='8.3.23.1912'
export PLATFORM_ARCH='x86_64'
export PKG_LIC_NAME='1c_enterprise_license_tools_0.15.0_2_linux_x86_64.tar.gz'
export PKG_SERVER_NAME='server64_8_3_23_1912.tar.gz'

В переменные окружения записываем версию платформы, ее разрядность и название дистрибутива, который «превратит» нашу виртуальную машину в сервер лицензирования 1С.

2. Загружаем необходимые дистрибутивы для сервера лицензирования:


    wget https://52772e2d-80a1-4cab-a8a3-d66ac287e640.selstorage.ru/server64_8_3_23_1912.tar.gz
wget https://52772e2d-80a1-4cab-a8a3-d66ac287e640.selstorage.ru/1c_enterprise_license_tools_0.15.0_2_linux_x86_64.tar.gz

Снапшоты дистрибутивов доступны в хранилище Selectel, но их также можно взять с официального сайта 1C.

3. Далее нужно установить необходимые пакеты для работы 1С и Apache. Это можно сделать с помощью одной команды:


    echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections &&
    apt-get -qq update &&
    apt-get install -y \
        iproute2 \
        curl wget \
        ttf-mscorefonts-installer \
        imagemagick \
        unixodbc \
        fontconfig \
        libgtk-3-0 \
        libenchant1c2a \
        libharfbuzz-icu0 \
        libgstreamer1.0-0 \
        libgstreamer-plugins-base1.0-0 \
        gstreamer1.0-plugins-good \
        gstreamer1.0-plugins-bad \
        libsecret-1-0 \
        libsoup2.4-1 \
        libgl1 \
        libegl1 \
        libxfixes3 \
        libxslt1.1 \
        geoclue-2.0 \
        openjdk-8-jre \
        jq \
        netcat

Процесс установки может занять до 10 минут.

4. Обновляем шрифты клиента на сервере:


    fc-cache -fv

5. Распаковываем и устанавливаем платформу:


    tar vxf "${PKG_SERVER_NAME}"
./setup-full-${PLATFORM_VERSION}-${PLATFORM_ARCH}.run --mode unattended \
    --enable-components liberica_jre,server,server_admin,ws

6. Создаем линки для нужных исполняемых файлов, чтобы не писать каждый раз путь к платформе (она будет на машине одна):


    ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/webinst /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/ragent /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/ras /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/rac /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/ibcmd /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/ibsrv /usr/local/bin

7. Регистрируем и запускаем сервис 1С:


    # license-tools (https://releases.1c.ru/project/EnterpriseLicenseTools)
tar vxf "$PKG_LIC_NAME"
./1ce-installer-cli install all --ignore-signature-warnings

systemctl link \
    /opt/1cv8/$PLATFORM_ARCH/$PLATFORM_VERSION/srv1cv8-${PLATFORM_VERSION}@.service
systemctl enable srv1cv8-${PLATFORM_VERSION}@default
systemctl start srv1cv8-${PLATFORM_VERSION}@default
systemctl status srv1cv8-${PLATFORM_VERSION}@default

8. На этом этапе сервис уже работает. Запускаем сервер ras:


    systemctl link \
  /opt/1cv8/$PLATFORM_ARCH/$PLATFORM_VERSION/ras-${PLATFORM_VERSION}.service
systemctl enable ras-${PLATFORM_VERSION}
systemctl start ras-${PLATFORM_VERSION}
systemctl status ras-${PLATFORM_VERSION}
Сервер ras запущен.

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


    /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring license activate ...

Вместо многоточия необходимо указать данные для активации: —company, —town, —country, —zip-code, —street, —house, —email, —serial, —pin, —previous-pin.

Пример активации 1C:Enterprise Server и записи параметров.
Пример активации 1C:Enterprise Server и записи параметров.

Вы можете вывести информацию о статусе сервера приложений 1С:


    systemctl status srv1cv8-8.23.1912@default.service
Статус сервера приложений 1С.

10. Выдадим права на запуск сервера приложений отдельному пользователю, созданному инсталлятором 1С (usr1cv8:grp1cv8):


    chown usr1cv8:grp1cv8 -R /var/1C/licenses

11. Последним этапом нужно проверить, прописан ли адрес сервера приложений в списке хостов:


    vi /etc/hosts

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

Так должен выглядеть список хостов.

Загрузка информационной базы

Если у вас есть собственная информационная база, вы можете ее загрузить на сервер приложений. 

1. Производим загрузку с помощью утилиты ibcmd из файла DT в облачную базу данных:


    NOW="$(date +%s)"
DT_FILE=~/GILV_TPC_G1C_83.dt
DATA_DIR="/home/usr1cv8/data/${NOW}"
DATABASE_HOST=master.f09aa6eb-2810-465b-90ff-df8d8a160859.pvc.c.dbaas.selcloud.ru
DATABASE_USER="test"
DATABASE_PASS="test"
DATABASE_NAME="test"

ibcmd infobase restore \
    --data="${DATA_DIR}" \
    --dbms=PostgreSQL \
    --db-server=${DATABASE_HOST} \
    --db-user=${DATABASE_USER} \
    --db-pwd=${DATABASE_PASS} \
    --db-name=${DATABASE_NAME} \
    ${DT_FILE} || err_code=$?

Обратите внимание на параметры: для подключения к информационной базе нужно указать адрес хоста, данные пользователя и название БД. 

2. Добавляем информационную базу в кластер 1С:


    PUB_NAME="test"
IB_NAME="test"
IB_DSCR="test"
CLUSTER_UID=$(rac cluster list | awk '$1 == "cluster" {sub(/[\r\n]/, x);print $3}')
rac infobase create \
        --cluster="${CLUSTER_UID}" \
        --name="${IB_NAME}" \
        --descr="${IB_DSCR}" \
        --dbms=PostgreSQL \
        --db-server="${DATABASE_HOST}" \
        --db-name="${DATABASE_NAME}" \
        --locale=ru \
        --db-user="${DATABASE_USER}" \
        --db-pwd="${DATABASE_PASS}" \
        --license-distribution=allow

3. Публикуем информационную базу для доступа через веб-клиент 1С:


    webinst -apache24 -wsdir "${PUB_NAME}" -dir "/var/www/data/${PUB_NAME}" -connstr "Srvr=\"localhost\";Ref=\"${PUB_NAME}\";"

4. Перезагрузим установленный Apache, чтобы применить все изменения:


    systemctl restart apache2

Сборка кластера

Последним этапом необходимо «объединить» сервер приложений и лицензирования воедино. 

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


    SRV_UID=$(rac server list --cluster="${CLUSTER_UID}" | awk -F'[:]' '$1 ~ "^server" {gsub(/^[ \t]+/,"",$2);gsub(/[ \t]+$/,"",$2);print $2}')
LIC_PORT="1540"
LIC_HOST="172.24.21.4"
LIC_PORT_RANGE="1560:1591"

rac rule insert \
    --cluster=${CLUSTER_UID} \
    --server=${SRV_UID} \
    --position=1 --object-type=LicenseService --rule-type=never

rac rule insert \
    --cluster=${CLUSTER_UID} \
    --server=${SRV_UID} \
    --position=2 --rule-type=always

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

2. Добавляем сервер лицензирования в кластер и назначаем запросы функциональности для сервера, который будет выступать в качестве сервера лицензирования:


    LIC_SRV_UID=$(rac server insert \
    --cluster=${CLUSTER_UID} \
    --agent-host=${LIC_HOST} \
    --name="license" \
    --agent-port=$LIC_PORT \
    --port-range=$LIC_PORT_RANGE | awk '$1 == "server" {sub(/[\r\n]/, x);print $3}')
rac rule insert \
    --cluster=${CLUSTER_UID} \
    --server=${LIC_SRV_UID} \
    --position=1 --object-type=LicenseService --rule-type=always

Назначаем id с помощью переменной LIC_SRV_UID для дальнейшего использования в скрипте.

3. Применяем правила и запросы функциональности:


    rac rule apply \
    --cluster=${CLUSTER_UID}

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

Результат: тестирование кластера

Мы можем подключиться к серверу приложений и проверить, работают ли лицензии. Для этого копируем адрес demo-server из панели управления и отправляем такой HTTP-запрос:


    http://172.24.21.3/test

Параметр test — это PUB_NAME, который мы указали в 11 пункте при добавлении информационной базы 1С.

Загрузка сервера.
Сервер 1С готов к работе.

Готово — 1C:Enterprise доступна через интернет, сервер лицензирования работает. Если вы получили код 500, подключитесь к серверу приложений и перезагрузите Apache.

Создание кластера с сервером лицензирования видоизменяться от задачи к задаче. Если хотите упростить процесс — арендуйте лицензии у нас, мы предоставим ИТС.