Как программно опубликовать HTTP-сервисы 1С на веб-сервере через командную строку

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

В процессе автоматизации развертывания информационных баз 1С часто возникает задача не просто опубликовать базу на веб-сервере, но и сразу активировать все необходимые HTTP-сервисы. Это критично при создании систем-менеджеров, которые управляют множеством дочерних баз, или в процессах CI/CD. В данной статье мы подробно разберем, как реализовать этот процесс программно, используя штатные средства платформы и файлы конфигурации.

Инструментарий: Утилита webinst

Основным инструментом для управления публикацией является утилита webinst, которая входит в состав платформы 1С:Предприятие. Она располагается в каталоге bin установленной версии платформы. При автоматизации крайне важно обращаться к конкретной версии платформы, так как параметры могут меняться от релиза к релизу.

Рассмотрим стандартный синтаксис команды для публикации на сервере Apache. Проанализируем основные параметры:

Использование файла-дескриптора (шаблона)

Самый эффективный способ публикации HTTP-сервисов — это использование заранее подготовленного XML-файла с расширением .vrd. Это позволяет избежать ручного перечисления каждого сервиса в командной строке и дает гибкость в настройке параметров сессий и пулов. Рассмотрим структуру такого файла.

Разберем пример секции httpServices, которую необходимо включить в default.vrd:


<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       base="/MyBaseName"
       ib="Srvr="MyServer";Ref="MyBase";">
    
    <httpServices publishExtensionsByDefault="true">
        <service name="НазваниеСервисаИзКонфигуратора"
                 rootUrl="api_v1"
                 enable="true"
                 reuseSessions="use"
                 sessionMaxAge="20"
                 poolSize="10"
                 poolTimeout="5"/>
    </httpServices>
</point>

Проанализируем важный атрибут: publishExtensionsByDefault="true". Если установить его в значение true, платформа автоматически опубликует все HTTP-сервисы, которые присутствуют в конфигурации, включая те, что будут добавлены в расширениях. Это избавляет от необходимости редактировать файл каждый раз при добавлении нового метода API.

Настройка производительности и пула соединений

При программной публикации важно правильно настроить параметры работы HTTP-сервисов, чтобы база выдерживала нагрузку. Рассмотрим параметры внутри тега service:

  1. reuseSessions — определяет логику работы с сеансами. Значение use позволяет повторно использовать существующие сеансы 1С, что значительно ускоряет обработку запросов, так как системе не нужно каждый раз выполнять авторизацию и инициализацию параметров сеанса.
  2. poolSize — определяет максимальное количество одновременных подключений к базе данных через данный сервис. Если ожидается большой поток запросов, этот параметр следует увеличить.
  3. poolTimeout — время ожидания в очереди на получение свободного соединения из пула.

Автоматизация через Wscript.Shell

Для запуска процесса из кода 1С (например, из базы-менеджера) удобно использовать объект Wscript.Shell. Выясним, как это выглядит на практике. Рассмотрим пример формирования команды:


ПутьКWebInst = "C:\Program Files\1cv8\8.3.22.1709\bin\webinst.exe";
Параметры = " -apache24 -wsdir BaseAlias -dir ""C:\Apache24\htdocs\BaseAlias"" -connstr ""Srvr=Server1C;Ref=BaseName;"" -descriptor ""C:\Templates\my_template.vrd""";

Команда = """" + ПутьКWebInst + """" + Параметры;

Shell = Новый COMОбъект("WScript.Shell");
КодВозврата = Shell.Run(Команда, 0, Истина);

Если КодВозврата <> 0 Тогда
    Сообщить("Ошибка при публикации базы!");
КонецЕсли;

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

Особенности для операционных систем Linux

Если ваша инфраструктура работает на Linux, алгоритм остается похожим, но меняются пути и способы взаимодействия с веб-сервером. Утилита webinst в Linux обычно находится по пути /opt/1cv8/x86_64/версия_платформы/webinst. После выполнения программной публикации крайне желательно перезапустить службу веб-сервера для применения изменений:

sudo systemctl reload apache2

Также важно убедиться, что у пользователя, под которым запущен веб-сервер (обычно www-data), есть права доступа к каталогу, указанному в параметре -dir, и к самим файлам платформы 1С.

Безопасность и автоматическая аутентификация

Часто HTTP-сервисы используются для интеграции с внешними системами, которые не умеют передавать логин и пароль 1С в стандартном окне авторизации. В таких случаях мы можем программно прописать пользователя в файле default.vrd. Для этого в секцию point добавим настройку standardAuthentication:


<standardAuthentication>
    <user>WebAPIUser</user>
    <password>SecretPassword123</password>
</standardAuthentication>

Важно: При использовании этого метода все запросы к HTTP-сервису будут выполняться от имени указанного пользователя. Убедитесь, что у этого пользователя в базе 1С назначена роль с правами на использование конкретного HTTP-сервиса и соответствующие права на чтение/запись данных.

Резюме

Программная публикация HTTP-сервисов — это мощный инструмент для автоматизации. Основной секрет успеха заключается в использовании параметра -descriptor и правильной настройке файла default.vrd. Установка флага publishExtensionsByDefault позволяет сделать систему максимально гибкой, а настройка пула соединений — производительной. Не забывайте проверять права доступа к файловой системе и корректность строки соединения с базой данных.

← На главную