Как опубликовать базу 1С в Docker на Astra Linux с помощью утилиты webinst и решить проблемы с DNS

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

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

Подготовка инфраструктуры и выбор базового образа

Разберем ситуацию с выбором операционной системы для контейнера. При работе в среде Astra Linux наиболее логичным и стабильным решением является использование репозиториев Debian, так как Astra Linux Special Edition (особенно версии 1.7 и 1.8) базируется на пакетной базе этого дистрибутива. Рассмотрим важный аспект: версии ядра ОС существенно влияют на состав необходимых библиотек. Например, на Astra Linux 1.8.2.7 с ядром 6.6 и обновлении 1.8.2.8 с ядром 6.12 состав пакетов может варьироваться.

Для корректной работы веб-расширения 1С нам потребуются следующие системные компоненты:

Автоматизация публикации с помощью утилиты webinst

Проанализируем работу утилиты webinst. Это стандартный инструмент от компании 1С, предназначенный для модификации конфигурационных файлов веб-сервера и создания файлов описания публикации .vrd. В контексте Docker использование этой утилиты целесообразно на этапе сборки образа (в Dockerfile) или при старте контейнера (в скрипте entrypoint.sh).

Типовая команда публикации через webinst выглядит следующим образом:


/opt/1cv8/x86_64/8.3.XX.XXXX/webinst -apache24 \
  -wsdir BaseName \
  -dir /var/www/html/BaseName \
  -connstr "Srvr=192.168.1.10;Ref=BaseName;" \
  -confPath /etc/apache2/apache2.conf

Рассмотрим подробнее параметры этой команды. Флаг -wsdir определяет виртуальный каталог, по которому база будет доступна в браузере. Параметр -dir указывает физический путь в контейнере, где будет лежать файл default.vrd. Крайне важно проследить, чтобы после выполнения этой команды права на каталог были переданы пользователю, от имени которого работает Apache (обычно это www-data).

Решение проблемы с разрешением имен (DNS)

Часто при запуске контейнера возникает ошибка: Temporary failure in name resolution. Проанализируем ситуацию: даже если в строке соединения -connstr вы указали IP-адрес сервера 1С, платформа в процессе работы может пытаться обратиться к конкретному рабочему процессу по его сетевому имени (hostname). Если контейнер не знает, какому IP соответствует это имя, соединение разорвется.

Для решения этой проблемы в Docker предусмотрен механизм extra_hosts. Выясним, как правильно прописать соответствие имен в файле docker-compose.yml:


services:
  1c-web:
    image: my-1c-web-server:latest
    extra_hosts:
      - "server1c.local:192.168.1.10"
      - "workstation-01:192.168.1.11"
    ports:
      - "80:80"
    environment:
      - DB_NAME=MyBase

Добавление записей в extra_hosts аналогично правке файла /etc/hosts внутри контейнера. Это гарантирует, что при получении от кластера 1С списка рабочих процессов, веб-компонент сможет успешно разрешить их имена в IP-адреса.

Тонкая настройка файла публикации .vrd

Иногда автоматической работы webinst недостаточно, и нам требуется скорректировать файл default.vrd вручную или через шаблоны. Разберем структуру этого файла для работы через веб-клиент. Важно убедиться, что параметры подключения соответствуют тем, что используются в кластере.


<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="/BaseName"
       ib="Srvr=&quot;192.168.1.10&quot;;Ref=&quot;BaseName&quot;;">
    <standardOdata enable="true" reuseSessions="autouse" />
</point>

Обратим внимание на использование специальных символов &quot; для кавычек внутри строки подключения. Если вы используете Docker для публикации нескольких баз, целесообразно подкладывать готовый файл .vrd с помощью переменных окружения и утилиты envsubst, чтобы не запускать webinst каждый раз.

Особенности работы на Astra Linux 1.8.x и лимиты памяти

Выясним причину возможных сбоев при интенсивной работе пользователей. По умолчанию Docker ограничивает объем разделяемой памяти (Shared Memory) значением 64 МБ. Для веб-сервера 1С, особенно при использовании тяжелых отчетов или активной работе с веб-сервисами, этого может быть мало. Рекомендуется увеличить этот лимит. В docker-compose это делается параметром shm_size: '256m'.

Посмотрим на специфику последних обновлений Astra Linux. В версии 1.8.2.8 с ядром 6.12 изменились механизмы работы с некоторыми системными вызовами. Если контейнер запускается на хосте с новой версией ядра, убедитесь, что версия docker-ce и компоненты containerd обновлены до актуальных версий из репозитория Astra, иначе возможны проблемы с изоляцией ресурсов и сетевым стеком.

В завершение подчеркнем, что успех публикации 1С в Docker зависит от трех факторов:

  1. Правильная установка всех системных зависимостей (библиотек и шрифтов) в Dockerfile.
  2. Корректное сопоставление имен хостов через extra_hosts для исключения ошибок DNS.
  3. Настройка прав доступа chown к файлам публикации внутри контейнера.
Следуя этим шагам, вы получите стабильно работающую систему веб-публикации 1С на базе современных контейнерных технологий.

← На главную