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

16.03.21

Администрирование - Администрирование веб-серверов

В этой публикации описывается опыт доступа к служебным 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>

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

 

 

5. Создаем dockerfile - файл описания сборки образа.

FROM httpd:2.4
COPY /distr/Platform83/8.3.18.1208/*.deb /dist/
RUN set -ex; \
   apt update; apt install -y --no-install-recommends \
     inetutils-ping \
     wget \
     curl; \
  rm -rf /var/lib/apt/lists/*
RUN dpkg -i /dist/*.deb \
  && rm /dist/*.deb
COPY httpd.conf /usr/local/apache2/conf/httpd.conf
COPY default.vrd /usr/local/apache2/htdocs/new/default.vrd

Здесь мы указываем, что за основу берется Apache версии 2.4, копируем установочные файлы 1С внутрь образа, устанавливаем их, дополнительно устанавливаем утилиты ping, wget, curl (удобно разбираться из консоли сервера с сетевыми проблемами, если они возникают), копируем ранее созданные конфигурационные файлы httpd.conf и default.vrd также внутрь образа.

6. Создадим docker-compose.yml - файл для описания запуска контейнера.

version: '3.4'
services:
  apache-1c:
    build: .
    restart: always
    ports:
      - 8080:80
    extra_hosts:
      - "N26701V:192.168.88.254"

Здесь я указал, что веб-сервер будет на порту 8080 (внутри контейнера по прежнему порт 80). Также в параметре extra_hosts указал имя и IP адрес моего сервера, на котором развернут тестовый стенд.

7. Запустим контейнер!

docker-compose up -d

Контейнер запустился, отобразился в docker 

 

 

Http-сервис работает на 8080 порту:

 

 

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

 

Для публикации был подготовлен тестовый стенд localhost/N26701V, база 1с new, версия платформы 8.3.18.1208. Ни один рабочий сервер почти не пострадал.

В заключении прошу обратить внимание на то, что в данный момент проводится голосование за доклады, которые войдут в итоговую программу INFOSTART EVENT 2021. Я хотел бы выступить с докладом "Первый день архитектора 1С на новой работе", поэтому мне нужна ваша поддержка в голосовании. Вот ссылка на голосовалку: https://event.infostart.ru/2021/agenda/#item1392878

docker apache http vrd oscript

См. также

Путь самурая. Ставим локальный Сервер взаимодействия

Сервера Администрирование веб-серверов Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подробная пошаговая инструкция (как делал я) установки Сервера взаимодействия версия 22.0.26 на Windows Server 2022. Установка собственного объектного хранилище с помощью системы MinIO (https://min.io/). Настройка Сервера взаимодействия для обмена файлами в сообщениях.

1 стартмани

07.04.2023    13080    VPanin56    40    

74

Публикатор 1С. Как публиковать базы с комфортом

Администрирование веб-серверов Платформа 1С v8.3 Бесплатно (free)

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

20.03.2023    6851    76    Segate    4    

27

Midnight Commander, установленный с Entware, не выполняет команды и не запускает файлы

Администрирование веб-серверов Linux Бесплатно (free)

Столкнулся с проблемой, установил на роутер Midnigt Commander с репозитория Entware, при попытке выполнения команды программа пишет ошибку "The shell is already running a command". Данная публикация описывает способ решения этой проблемы.

20.03.2023    3464    Eugen-S    2    

3

Публикация 1С на Apache SSL в локальной среде разработки

Администрирование веб-серверов Платформа 1С v8.3 Бесплатно (free)

В статье описывается установка и настройка веб-сервера Apache для работы с 1С через https.

09.02.2023    5514    lone_mayson    4    

42

Контейнер Docker для размещения публикации базы 1С на разных платформах

Администрирование веб-серверов Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Бесплатно (free)

Появилась необходимость развернуть на одном хосте две публикации базы, но не на одной платформе, а на разных. Тут я расскажу, как это сделать для версии 8.3.22.1704.

02.02.2023    3496    Sney_Kice    1    

22

Быстрое конфигурирование серверов с Ansible

Администрирование веб-серверов Сервера Бесплатно (free)

Всю рутину по обновлению платформы, настройке веб-серверов и серверов хранилищ на всем парке серверов компании можно автоматизировать с помощью удобочитаемых YAML-скриптов Ansible. О том, как написать сценарии такой автоматизации, чтобы запускать их параллельно для группы серверов, на митапе «Инструменты автоматизации рутины в 1С-разработке» рассказал ведущий разработчик компании ПИК Digital Павел Комаров.

26.01.2023    5114    lopatrik    4    

22
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. w.r. 644 17.03.21 12:25 Сейчас в теме
Docker и Windows - это вообще адская смесь
2. ardn 627 18.03.21 08:23 Сейчас в теме
(1)
адская смесь

Не соглашусь. Нормально он работает, особенно, когда wsl2 включишь.
5. w.r. 644 18.03.21 13:54 Сейчас в теме
(2)

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

Docker нормально работает только в Linux, так как создан именно для этой среды
3. asved.ru 36 18.03.21 09:02 Сейчас в теме
Зачем все это, не понятно. Складывается ощущение, что автору очень сильно нечего делать.
GreenEye; agent00mouse; w.r.; +3 Ответить
4. ardn 627 18.03.21 11:44 Сейчас в теме
(3)
Складывается ощущение, что автору очень сильно нечего делать

хм, спасибо за комментарий
7. agent00mouse 253 13.05.21 10:06 Сейчас в теме
(3) Делаю две публикации. prod и dev. можно хоть на одном апаче и одной машине. можно разнести на разные машины. У себя пользую два апача с отдельной публикацией prod / dev. когда надо prod отключаю.
8. ardn 627 13.05.21 10:15 Сейчас в теме
6. kolhoznik 05.05.21 16:24 Сейчас в теме
Кажется, что ставить в докер всю технологическую платформу ради одного веб-сервера немножко оверхед.
Не пробовали из дистрибутивов достать только необходимые для работы веб-сервера библиотеки? Тогда бы образ получился намного компактнее
9. ardn 627 13.05.21 10:16 Сейчас в теме
(6) да, конечно, надо бы научиться доставать из дистрибов только нужное
10. malikov_pro 1293 04.11.21 22:19 Сейчас в теме
Вынести публикацию в отдельный контейнер хорошо.
Буду благодарен если подскажете как собрать вместе с gatekeeper, описал в статье https://infostart.ru/1c/articles/1538558/.
Для большего удобства не хватает ссылки на организацию registry и выноса конфига 1c из докер контейнера, чтобы можно было переконфигурировать без пересборки.
Сам запускаю docker через vagrant + vmbox.
11. sandman.NN 18.02.22 02:59 Сейчас в теме
для апача необходим только модуль wsap22.so из пакета 1c-enterprise83-ws. Если не планируется использовать webinst (конфиги ручками/скриптом рисуем) то остальное не устанавливать. Да и сам модуль наверное можно пихнуть уже вне deb пакета.

rm /dist/*.deb - вот это лишнее. образ меньше не станет. если всё таки хочется обрезать и образ то следует его перелить в новый по принципу:


FROM чётатам as install
...
...
rm всёлишнее

FROM scratch
COPY --from=install / /
CMD["...."]
12. trim74 08.08.23 14:53 Сейчас в теме
Подскажите, а какой атрибут в vrd файле разрешает запустить http сеанс даже если в базе установлена блокировка?
13. ardn 627 08.08.23 15:20 Сейчас в теме
(12) строка соединения, узел Point, там код блокировки указываем в UC
14. trim74 09.08.23 13:59 Сейчас в теме
(13)

Спасибо, оказывается у вас прям в статье есть пример.
15. ardn 627 09.08.23 14:16 Сейчас в теме
(14)
Выглядит верно, ib="Srvr="N26701V";Ref="new";UC="kod_razresheniya""
Возможно UC - заглавными стоит писать?
Оставьте свое сообщение