Как опубликовать базу 1С 8.3 на веб-сервере Apache
Содержание
Чтобы открыть базу
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.
Где лежит модуль и как его найдёт 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="/var/1c/bases/accounting";">
<standardOdata enable="false"/>
</point>
Что здесь имеет смысл трогать:
- 🌐
standardOdata enable— стандартный интерфейс OData. По умолчанию при публикации его часто оставляют выключенным; включайте, только если по OData реально работает интеграция. - 🔌 web-сервисы и HTTP-сервисы — публикуются отдельными элементами. Можно отдавать все сервисы из конфигурации или перечислить только нужные по именам — лишние сервисы наружу лучше не открывать.
- ♻️ Пул соединений — атрибуты размера пула и таймаута управляют тем, сколько соединений с базой держится про запас. Для файловой базы с единичными пользователями это не критично, для нагруженной серверной — помогает не создавать соединение на каждый запрос.
Если нужен только веб-клиент, а сервисы и OData не используются, держите их выключенными. Меньше открытых интерфейсов — проще и безопаснее.
Строка подключения ib в default.vrd — то же, что -connstr при публикации. Для серверной базы она выглядит как Srvr="1c-server";Ref="accounting";, кавычки внутри XML экранируются как ".
Права доступа и защита публикации
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
LoadModule или несовпадение разрядности модуля и веб-сервера. Проверьте, что путь к wsap24.so существует, а модуль взят из каталога нужной разрядности (x86_64 для 64-битного Apache).Alias указывает не туда. Проверьте, что блок публикации есть в активном конфиге и путь в Alias совпадает с реальной папкой.www-data на папку публикации или на каталог файловой базы, либо битый путь в ManagedApplicationDescriptor. Сверьте владельца папки и путь к default.vrd.LoadModule указывает на каталог старого релиза, которого уже нет. Переопубликуйте базу через webinst или поправьте путь на новый релиз.default.vrd ведёт на рабочий кластер и существующую базу.Быстро проверить, что модуль вообще отвечает, можно запросом прямо с сервера — не открывая браузер:
curl -I http://localhost/accounting
Код 200 или 302 в ответе означает, что публикация жива и модуль обрабатывает запрос; 404 — проблема с Alias, 500 — с правами или default.vrd.
Перед тем как перезапускать Apache ради диагностики, помните: полный restart оборвёт сеансы всех уже работающих пользователей. На рабочем сервере сначала пробуйте apache2ctl configtest и graceful.
Частые вопросы
Apache или IIS — что выбрать для 1С?
Можно ли опубликовать несколько баз на одном Apache?
webinst с уникальными -wsdir и -dir. В конфиге появятся отдельные блоки Alias + <Directory>, базы откроются по разным URL.Нужна ли лицензия 1С для работы через веб-клиент?
Как включить HTTPS для публикации?
mod_ssl, получите сертификат (проще всего Let’s Encrypt через certbot) и пропишите публикацию внутри <VirtualHost *:443>. HTTP-версию обычно оставляют только для редиректа на HTTPS.Почему после обновления платформы веб-клиент выдаёт ошибку?
LoadModule жёстко привязан к номеру релиза. После обновления старого каталога уже нет — Apache не может загрузить модуль. Лечится повторной публикацией базы на новой версии платформы.