Как опубликовать базу 1С 8.3 на веб-сервере Apache

· 9 мин

Содержание

Чтобы открыть базу 1С 8.3 в браузере, нужен веб-сервер: он принимает HTTP-запросы, а модуль платформы отдаёт веб-клиент. Настройка Apache для 1С 8.3 сводится к трём действиям — подключить модуль wsap24, опубликовать информационную базу утилитой webinst и выдать веб-серверу права на каталог публикации.

Веб-клиент работает с двумя веб-серверами: IIS на Windows и Apache на Windows или Linux. На Linux-серверах публикуют именно через Apache. Один и тот же модуль платформы отдаёт не только веб-клиент, но и web-сервисы, HTTP-сервисы и стандартный интерфейс OData — что из этого включать, задаётся в файле описания публикации default.vrd.

Дальше — порядок для Ubuntu/Debian и отдельные замечания по Windows, содержимое файла httpd.conf с виртуальным хостом, настройка прав, параметры производительности и разбор типичных ошибок.

Что нужно проверить до публикации

Модуль веб-сервера входит в состав платформы — отдельно его ставить не надо. Но перед публикацией сверьте три вещи.

  • 🧩 Разрядность. 64-разрядный Apache работает только с 64-разрядным модулем из каталога x86_64, 32-разрядный — с модулем из i386. Несовпадение разрядности модуля и веб-сервера — причина №1, по которой Apache не стартует или отдаёт ошибку 500.
  • 📦 Версия Apache. Платформа 8.3 несёт модули под Apache 2.2 (wsap22) и 2.4 (wsap24). На актуальных дистрибутивах Linux ставится Apache 2.4, под него и берите wsap24.so.
  • 🔢 Версия платформы. Путь к модулю содержит номер релиза. После обновления платформы старый путь перестанет существовать — публикацию придётся переделать или поправить путь вручную (разбор ниже).

Сам Apache на Ubuntu ставится из репозитория:

sudo apt update
sudo apt install apache2

На сервере 1С уже должна быть установлена серверная платформа (пакеты 1c-enterprise-*) и запущен агент сервера, если база серверная. Для файловой базы достаточно, чтобы каталог базы был доступен тому пользователю, под которым работает Apache.

Перед публикацией
Выполнено: 0 / 5

Где лежит модуль и как его найдёт Apache

Модуль wsap24.so лежит в каталоге установленной платформы. На Linux это обычно:

/opt/1cv8/x86_64/8.3.25.1374/wsap24.so

Номер релиза в пути — ваш. Посмотреть установленные версии можно так:

ls /opt/1cv8/x86_64/

На Windows модуль называется wsap24.dll и лежит в каталоге bin установленной платформы, например C:\Program Files\1cv8\8.3.25.1374\bin\.

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

LoadModule _1cws_module "/opt/1cv8/x86_64/8.3.25.1374/wsap24.so"

Проверить, что модуль загрузился после рестарта, можно по списку подключённых модулей (имя модуля — _1cws_module, в выводе Apache может быть усечено).

Публикация базы: webinst на Linux и мастер в конфигураторе

На Linux публикацию делают утилитой webinst из того же каталога платформы. Команда для серверной базы:

cd /opt/1cv8/x86_64/8.3.25.1374
sudo ./webinst -publish -apache24 \
  -wsdir accounting \
  -dir /var/www/accounting \
  -connstr "Srvr=1c-server;Ref=accounting;" \
  -confPath /etc/apache2/apache2.conf

Разберём флаги:

ФлагЧто задаёт
-apache24версия веб-сервера (для 2.2 — -apache22)
-wsdirимя публикации — часть URL после адреса сервера
-dirфизическая папка, куда лягут default.vrd и служебные файлы
-connstrстрока подключения к базе
-confPathкакой конфиг Apache править

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

-connstr "File=/var/1c/bases/accounting;"

После публикации в папке из -dir появится файл default.vrd — описание того, что именно опубликовано. По умолчанию открыт веб-клиент; web-сервисы, HTTP-сервисы и OData включаются правкой этого файла. Снять публикацию можно той же утилитой с ключом -delete и теми же -wsdir/-dir/-confPath.

На Windows публикуют из конфигуратора: Администрирование → Публикация на веб-сервере…. В окне выбирается веб-сервер (Apache или IIS), каталог, имя публикации и флажки — что отдавать (веб-клиент, сервисы, OData).

Конфигуратор должен быть запущен от имени администратора — иначе он не создаст папку публикации и не сможет записать настройки в конфиг Apache.

Что дописывается в httpd.conf и виртуальный хост

webinst добавляет в указанный конфиг блок примерно такого вида:

LoadModule _1cws_module "/opt/1cv8/x86_64/8.3.25.1374/wsap24.so"

# 1c publication
Alias "/accounting" "/var/www/accounting/"
<Directory "/var/www/accounting/">
    AllowOverride All
    Options None
    Require all granted
    SetHandler 1c-application
    ManagedApplicationDescriptor "/var/www/accounting/default.vrd"
</Directory>
# end 1c publication

Ключевые строки здесь — SetHandler 1c-application (запросы к каталогу обрабатывает модуль 1С) и ManagedApplicationDescriptor (путь к default.vrd). Alias связывает URL-часть с физической папкой. После этого база открывается по адресу http://адрес-сервера/accounting.

Если на сервере несколько сайтов или нужен отдельный домен под публикацию, удобнее завести виртуальный хост и перенести блок <Directory> внутрь него:

<VirtualHost *:80>
    ServerName 1c.company.ru

    Alias "/accounting" "/var/www/accounting/"
    <Directory "/var/www/accounting/">
        AllowOverride All
        Options None
        Require all granted
        SetHandler 1c-application
        ManagedApplicationDescriptor "/var/www/accounting/default.vrd"
    </Directory>
</VirtualHost>

На Ubuntu файлы виртуальных хостов кладут в /etc/apache2/sites-available/ и активируют командой a2ensite, строку LoadModule при этом оставляют в основном apache2.conf. После любой правки конфига сначала проверьте синтаксис, потом перезапускайте служебно:

sudo apache2ctl configtest
sudo apache2ctl graceful

graceful перечитывает конфиг, не обрывая текущие сеансы, в отличие от полного restart. Полный перезапуск Apache закрывает активные соединения веб-клиента — делайте его в нерабочее время.

Что настраивается в файле default.vrd

default.vrd — это XML-описание публикации. Именно здесь задаётся, что отдавать наружу, и к какой базе подключаться. Файл лежит в папке из -dir, его можно править вручную, а после правки перечитать конфиг (apache2ctl graceful). Минимальный вид для файловой базы:

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       base="/accounting"
       ib="File=&quot;/var/1c/bases/accounting&quot;;">
    <standardOdata enable="false"/>
</point>

Что здесь имеет смысл трогать:

  • 🌐 standardOdata enable — стандартный интерфейс OData. По умолчанию при публикации его часто оставляют выключенным; включайте, только если по OData реально работает интеграция.
  • 🔌 web-сервисы и HTTP-сервисы — публикуются отдельными элементами. Можно отдавать все сервисы из конфигурации или перечислить только нужные по именам — лишние сервисы наружу лучше не открывать.
  • ♻️ Пул соединений — атрибуты размера пула и таймаута управляют тем, сколько соединений с базой держится про запас. Для файловой базы с единичными пользователями это не критично, для нагруженной серверной — помогает не создавать соединение на каждый запрос.

Если нужен только веб-клиент, а сервисы и OData не используются, держите их выключенными. Меньше открытых интерфейсов — проще и безопаснее.

Строка подключения ib в default.vrd — то же, что -connstr при публикации. Для серверной базы она выглядит как Srvr="1c-server";Ref="accounting";, кавычки внутри XML экранируются как &quot;.

Права доступа и защита публикации

Apache на Ubuntu работает под пользователем www-data (на RHEL/CentOS — apache). Этому пользователю нужен доступ:

  • на чтение — к каталогу платформы с модулем;
  • на чтение и запись — к папке публикации (там создаются служебные файлы и каталог сеансов);
  • для файловой базы — на чтение и запись к самому каталогу базы.

Типовая выдача прав на папку публикации и файловую базу :

sudo chown -R www-data:www-data /var/www/accounting
sudo chown -R www-data:www-data /var/1c/bases/accounting

Для серверной базы доступ к файлам базы www-data не нужен — соединение идёт к кластеру по строке подключения.

По защите публикации держите в голове несколько моментов:

  • 🔐 HTTPS обязателен, если база доступна извне. Поднимается через mod_ssl и бесплатный сертификат Let’s Encrypt (certbot), трафик с паролями по открытому HTTP гонять нельзя.
  • 🚪 OData и сервисы — отключайте в default.vrd всё, что не используете. Открытый наружу стандартный интерфейс OData — лишняя поверхность атаки.
  • 🧱 SELinux на RHEL по умолчанию может блокировать модулю сетевые соединения к кластеру. Признак — ошибки доступа в логах при внешне верном конфиге; разрешается настройкой контекста и булевых переключателей SELinux.
  • 🔥 Порты 80 и 443 должны быть открыты в межсетевом экране сервера.

Производительность: MPM, процессы и память

Модуль 1С работает внутри процессов Apache, поэтому важен выбранный MPM (модуль мультипроцессорности). 1С рекомендует prefork — он стабильнее всего работает с модулем веб-сервера. Проверить активный MPM и переключиться на Ubuntu:

apache2ctl -M | grep mpm
sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
sudo systemctl restart apache2

Основные параметры prefork в /etc/apache2/mods-available/mpm_prefork.conf:

ПараметрСмысл
StartServersсколько процессов поднять при старте
MinSpareServers / MaxSpareServersзапас свободных процессов
MaxRequestWorkersпотолок одновременных процессов (а значит — подключений)
MaxConnectionsPerChildпосле скольких запросов процесс перезапускается (борьба с утечками)

По памяти ориентир простой: один процесс prefork с загруженным модулем 1С занимает несколько десятков мегабайт. Умножьте примерный расход на один процесс на MaxRequestWorkers — сумма не должна упираться в оперативную память сервера, иначе начнётся своппинг и всё встанет. Для грубой прикидки: при ~40 МБ на процесс и MaxRequestWorkers 150 это около 6 ГБ только под Apache.

Реальная нагрузка от пользователей ложится не на Apache, а на рабочие процессы кластера 1С. Если веб-клиент тормозит под нагрузкой — добавляйте рабочие процессы rphost в кластере, а не только воркеры Apache.

Ещё пара настроек, которые помогают под веб-клиентом: держите KeepAlive On с небольшим KeepAliveTimeout (5–10 секунд), чтобы соединения не висели и не отъедали процессы впустую.

Следить за запасом процессов удобно через серверную статистику Apache (mod_status): она показывает, сколько процессов занято прямо сейчас. Если число занятых постоянно упирается в MaxRequestWorkers, потолок пора поднимать — но только если под это есть оперативная память.

Если база не открывается: разбор по логам

Первое, куда смотреть, — логи Apache. На Ubuntu это /var/log/apache2/error.log и access.log, на RHEL — /var/log/httpd/. Смотреть в реальном времени:

sudo tail -f /var/log/apache2/error.log
Диагностика: выберите симптом

Быстро проверить, что модуль вообще отвечает, можно запросом прямо с сервера — не открывая браузер:

curl -I http://localhost/accounting

Код 200 или 302 в ответе означает, что публикация жива и модуль обрабатывает запрос; 404 — проблема с Alias, 500 — с правами или default.vrd.

Перед тем как перезапускать Apache ради диагностики, помните: полный restart оборвёт сеансы всех уже работающих пользователей. На рабочем сервере сначала пробуйте apache2ctl configtest и graceful.

Частые вопросы

Apache или IIS — что выбрать для 1С?
На Windows-сервере обычно проще IIS — он уже в системе и публикуется из конфигуратора в пару кликов. На Linux альтернативы Apache по сути нет. По возможностям для веб-клиента разницы нет.
Можно ли опубликовать несколько баз на одном Apache?
Да. Для каждой базы — свой запуск webinst с уникальными -wsdir и -dir. В конфиге появятся отдельные блоки Alias + <Directory>, базы откроются по разным URL.
Нужна ли лицензия 1С для работы через веб-клиент?
Да. Сеанс веб-клиента занимает клиентскую лицензию так же, как обычное подключение. Лицензии выдаёт сервер лицензирования или ключ — отдельной «веб-лицензии» нет.
Как включить HTTPS для публикации?
Поднимите mod_ssl, получите сертификат (проще всего Let’s Encrypt через certbot) и пропишите публикацию внутри <VirtualHost *:443>. HTTP-версию обычно оставляют только для редиректа на HTTPS.
Почему после обновления платформы веб-клиент выдаёт ошибку?
Путь к модулю в LoadModule жёстко привязан к номеру релиза. После обновления старого каталога уже нет — Apache не может загрузить модуль. Лечится повторной публикацией базы на новой версии платформы.