Каталог решений - Служебные http-сервисы, которые работают даже в заблокированной базе

Служебные http-сервисы, которые работают даже в заблокированной базе

Служебные http-сервисы, которые работают даже в заблокированной базе

В наличии

В этой публикации описывается опыт доступа к служебным http-сервисам в обход установленной блокировки информационной базы.

Категория:

Описание

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

 

 

На скрине ниже показан одна из команд этого сервиса, Help, выводящая список доступных команд (попытка самодокументирования).

 

 

Уточню, на скрине выше и далее, если скрин касается выполнения запроса к http-сервису, изображена программа Insomnia (insomnia.rest).

Если в данный момент база заблокирована (установлена блокировка сеансов с кодом разрешения), http-сервис ожидаемо не работает:

 

 

Как быть в такой ситуации? Я — администратор системы и я точно знаю, что мне можно в данный момент пользоваться http-сервисом. Я сам включил блокировку сеансов, собираюсь устанавливать релиз или осуществлять прочие административные действия, но неплохо было бы, если бы мой служебный сервис не прекращал в это время работу.

Обычно это решается тонкой настройкой публикации на веб-сервере, где в vrd файле описывается авторизация и/или код разрешения для входа в обход установленной блокировки. Однако рабочие базы уже опубликованы, причем все сервисы в одной публикации. Администрированием веб-сервера я не занимаюсь, а объяснить, что нужно сделать админам, чтобы опубликовать нужный сервис отдельно — целый квест.

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

Для организации своей отдельной публикации воспользуемся докером и замечательной статьей Запуск Apache 2.4 с модулем 1С внутри Docker контейнера. 

Далее я тезисно опишу, что нужно сделать, подробности ищите в вышеупомянутой статье.

1. Создадим каталог, в котором будут все нужные конфигурационные файлы. Я назвал ее NEW_PUBLICATOR.

 

 

2. Скачаем файлы платформы для установки 1С. Для это воспользуемся замечательным библиотекой Yet another release downloader (YARD) на oscript. (У всех же установлен oscript, да?)

Установим последнюю версию библиотеки:

  opm install yard

И в созданном ранее каталоге вызовем команду:

 

  yard releases --user "userITS" --pwd "passITS" get --app-filter "Технологическая платформа 8.3" --version-filter 8.3.18.1208 --path ".\distr\" --distr-filter "Cервер 1С:предприятия \(64-bit\) для DEB-based"

Здесь userITS и passITS нужно заменить на свои, ну и конечно указать нужную вам версию платформы.

В результате в каталоге появится папка distr, содержащая установочные файлы 1С.

 

 

3. Опишем в vrd файле подключение к нашей базе, код блокировки указываем примерно так же, как мы указываем в ключах командной строки при запуске заблокированной базы, параметром UC, но с учетом синтаксиса файла:

  <?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="/new"
  		ib="Srvr=&quot;N26701V&quot;;Ref=&quot;new&quot;;UC=&quot;kod_razresheniya&quot;">
  	<debug enable="true"
  			protocol="tcp"
  			url=""/>
  	<httpServices publishByDefault="false">
  		<service name="ПомощникАдминистрирования"
  				rootUrl="AdminHelper"
  				enable="true"
  				reuseSessions="autouse"
  				sessionMaxAge="20"
  				poolSize="10"
  				poolTimeout="5"/>
  	</httpServices>
  </point>

4. Создадим файл для настройки веб-сервера Apache httpd.conf, полный листинг файла прячу за спойлером. Файл стандартный, в конец добавляем вызов модуля 1С и описание публикации:

  LoadModule _1cws_module /opt/1cv8/x86_64/8.3.18.1208/wsap24.so
  
  # 1c new
  Alias "/new" "/usr/local/apache2/htdocs/new/"
  <Directory "/usr/local/apache2/htdocs/new/">
      AllowOverride All
      Options None
      Require all granted
      SetHandler 1c-application
      ManagedApplicationDescriptor "/usr/local/apache2/htdocs/new/default.vrd"
  </Directory>

Полное содержимое файла:

 

has been added to your cart:
Оформление заказа