Новая платформа 1С, старый веб-сервер: как перевести публикацию на свежий модуль
Содержание
Модуль расширения веб-сервера 1С отдельно не обновляется: он ставится вместе с новой версией платформы, а потом веб-сервер нужно переключить на него. Для Apache это строка LoadModule _1cws_module в httpd.conf, которая должна указывать на wsap24.dll (или wsap24.so в Linux) из папки новой версии. Для IIS — путь к wsisapi.dll в сопоставлении обработчиков. После правки веб-сервер перезапускают и проверяют версию в веб-клиенте.
Способов три: поправить путь вручную, заново опубликовать базу утилитой webinst или сделать это из Конфигуратора (Администрирование → Публикация на веб-сервере). Вручную — быстрее, если публикаций много и они уже настроены. webinst удобнее для скриптов. Конфигуратор — для одной базы, когда веб-сервер и платформа стоят на одной машине.
Зачем обновлять модуль веб-сервера вместе с платформой
Модуль веб-сервера — это не просто «переходник». Для клиент-серверной базы он сам выступает клиентом кластера 1С и подключается к нему, как толстый или тонкий клиент. Поэтому его версия должна совпадать с версией сервера 1С:Предприятия.
Типичная картина: сервер 1С обновили до новой сборки, а Apache продолжает грузить модуль из папки старой. Пользователи тонкого клиента работают, а веб-клиент, HTTP-сервисы и OData падают с ошибкой несоответствия версий.
Ещё три причины обновлять модуль:
- 🔧 исправления в самом модуле: утечки памяти, обработка больших запросов, работа с длинными сеансами;
- 🌐 поддержка новых браузеров в веб-клиенте — она зашита в версию платформы;
- 🗑 удаление старой версии платформы. Если
httpd.confссылается на её папку, после удаления Apache просто не стартует.
Для файловой базы жёсткой привязки к версии сервера нет, но модуль всё равно работает с файлами базы своей версией платформы. Держите его в одной сборке с той, которой пользуются клиенты.
Подготовка и где взять модули нужной версии
Что проверить до начала
- Версию сервера 1С. Её видно в консоли кластера или в имени папки установки:
C:\Program Files\1cv8\8.3.xx.xxxx\. - Разрядность веб-сервера. 64-битный Apache или пул IIS загружает только 64-битный модуль, 32-битный — только 32-битный. Модуль берётся из установки платформы той же разрядности.
- Какой модуль подключён сейчас. Найдите в конфигурации веб-сервера все строки с
wsapилиwsisapi. Публикаций может быть несколько, и все они используют один модуль. - Окно для работ. Перезапуск Apache или IIS обрывает все сеансы веб-клиента и запросы к HTTP-сервисам. Делайте это вне рабочего времени или предупредите пользователей и интеграторов.
Резервная копия конфигурации веб-сервера
База данных при этой операции не меняется, копировать её не нужно. Копируют настройки веб-сервера:
- Apache в Windows:
C:\Apache24\conf\httpd.conf(или путь вашей сборки) и подключаемые файлыconf\extra\; - Apache в Linux:
/etc/apache2/целиком (Debian, Ubuntu, Astra) или/etc/httpd/(РЕД ОС, CentOS-подобные); - IIS: файл
default.vrdв каталоге каждой публикации и экспорт конфигурации черезappcmd.
Файл default.vrd лежит в папке публикации и хранит строку соединения с базой, настройки веб-сервисов и OData. При переопубликации webinst и Конфигуратор его перезаписывают, поэтому ручные правки в нём пропадут, если не сохранить копию.
Откуда берётся модуль
Отдельного дистрибутива «модули расширения веб-сервера» нет. Они входят в установку технологической платформы:
| Система | Что установить | Где окажется модуль |
|---|---|---|
| Windows | Полный дистрибутив платформы, компонент «Модули расширения веб-сервера» | C:\Program Files\1cv8\<версия>\bin\ |
| Linux, сборки 8.3.20 и новее | Единый установщик платформы с компонентом модулей веб-сервера | /opt/1cv8/x86_64/<версия>/ |
| Linux, старые сборки | Пакет с суффиксом -ws той же версии, что и сервер | /opt/1cv8/x86_64/<версия>/ или /opt/1C/v8.3/x86_64/ |
Дистрибутив скачивают на портале обновлений 1С по договору ИТС. Если при установке в Windows компонент модулей не отметили, его можно добавить позже: Параметры → Приложения, найти нужную версию 1С:Предприятия, выбрать «Изменить» и отметить компонент.
Модуль 64-битного Apache есть только в 64-битной платформе. Если на сервере стоит лишь 32-битный клиент, нужного файла в папке bin просто не будет.
Как обновить модуль 1С для Apache в Windows
Версия Apache 2.4 использует wsap24.dll. Для 2.2 был wsap22.dll, для 2.0 — wsapch2.dll, но эти версии Apache давно не поддерживаются, новые установки делают на 2.4.
Вариант 1. Правка пути в httpd.conf
- Остановите службу Apache:
services.msc→ служба Apache (обычноApache2.4) → «Остановить». Или из командной строки администратора:
net stop Apache2.4
- Откройте
httpd.confв редакторе и найдите строку:
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.23.1865/bin/wsap24.dll"
- Замените номер версии на новый. Слеши в пути оставьте прямыми, путь — в кавычках, потому что в нём есть пробел.
- Проверьте синтаксис, не запуская службу:
C:\Apache24\bin\httpd.exe -t
Ответ Syntax OK значит, что Apache нашёл модуль и смог его загрузить.
- Запустите службу:
net start Apache2.4.
Строки <Location /base> и ManagedApplicationDescriptor для каждой публикации трогать не нужно: в них указан путь к default.vrd, а не к платформе.
Вариант 2. Переопубликация через webinst
Утилита webinst.exe лежит в той же папке bin новой версии. Она сама пропишет нужный путь к модулю:
"C:\Program Files\1cv8\8.3.24.1342\bin\webinst.exe" -publish -apache24 -wsdir base -dir "C:\inetpub\wwwroot\base" -connstr "Srvr=srv1c;Ref=base;" -confpath "C:\Apache24\conf\httpd.conf"
-wsdir— имя публикации в адресе (http://сервер/base);-dir— каталог публикации, где лежитdefault.vrd;-connstr— строка соединения с базой;-confpath— путь кhttpd.conf.
Запускайте от имени администратора. Остальные ключи смотрите в справке самой утилиты (webinst.exe без параметров выводит их список).
Вариант 3. Из Конфигуратора
Откройте базу в Конфигураторе новой версии платформы, затем Администрирование → Публикация на веб-сервере. Выберите Apache 2.4, проверьте имя и каталог и нажмите «Опубликовать». Конфигуратор нужно запускать от имени администратора Windows, иначе он не сможет записать httpd.conf.
Обновление модулей расширения веб-сервера в Linux
В Linux алгоритм тот же, меняются только команды. Пример для Ubuntu и Astra Linux, где служба называется apache2. В РЕД ОС и других RPM-системах служба называется httpd, а конфигурация лежит в /etc/httpd/.
Шаг 1. Установить новую версию платформы с модулями
Распакуйте дистрибутив во временный каталог, например /tmp/1c, и установите компоненты сервера и модулей веб-сервера той же версии, что и кластер. После установки проверьте, что файл появился:
ls -l /opt/1cv8/x86_64/8.3.24.1342/wsap24.so
Шаг 2. Остановить Apache
sudo systemctl stop apache2
Шаг 3. Поменять путь к модулю
Строка с модулем обычно лежит в /etc/apache2/apache2.conf или в отдельном файле в /etc/apache2/conf-available/. Найдите её:
grep -rn "_1cws_module" /etc/apache2/
Поправьте версию в пути вручную или командой sed (сначала сделайте копию файла):
sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bak
sudo sed -i 's#/opt/1cv8/x86_64/8.3.23.1865/#/opt/1cv8/x86_64/8.3.24.1342/#' /etc/apache2/apache2.conf
Тот же результат даёт webinst из каталога новой версии с ключами -publish -apache24 и путём к конфигурации в -confpath.
Шаг 4. Проверить конфигурацию и запустить
sudo apachectl configtest
sudo systemctl start apache2
sudo systemctl status apache2
В выводе status должно быть active (running). Если служба упала, причина почти всегда в первых строках journalctl -u apache2 -n 50 или в /var/log/apache2/error.log.
У пользователя, от имени которого работает Apache (www-data в Debian и Ubuntu), должно быть право на чтение каталога публикации и файла default.vrd. После переопубликации от root это право иногда теряется.
Обновление модуля веб-сервера для IIS
IIS работает с модулем wsisapi.dll через механизм ISAPI. Самый надёжный путь — переопубликовать базу новой версией webinst или Конфигуратора с выбором IIS:
"C:\Program Files\1cv8\8.3.24.1342\bin\webinst.exe" -publish -iis -wsdir base -dir "C:\inetpub\wwwroot\base" -connstr "Srvr=srv1c;Ref=base;"
Если меняете путь вручную, нужны два места, и про второе часто забывают:
- Сопоставления обработчиков. В диспетчере IIS откройте приложение публикации → «Сопоставления обработчиков» → обработчик 1С (модуль
IsapiModule) и укажите путь кwsisapi.dllиз папки новой версии. - Ограничения ISAPI и CGI. На уровне сервера откройте этот раздел и добавьте новый
wsisapi.dllс разрешением на выполнение. Без этого IIS вернёт ошибку404.2.
После правки перезапустите IIS из командной строки администратора:
iisreset
Команда iisreset перезапускает все сайты на сервере, а не только публикацию 1С. Если на том же IIS работают другие приложения, вместо неё перезапустите только пул приложений публикации.
Для 32-битного модуля в настройках пула включают «Разрешить 32-разрядные приложения». Для 64-битного модуля этот флаг должен быть выключен.
Проверка публикации после обновления
Убедиться, что Apache или IIS запустился, мало. Пройдите по списку:
Окно «О программе» в веб-клиенте открывается через меню с иконкой шестерёнки или «гамбургера» в заголовке окна. Там видны и версия платформы, и версия конфигурации.
Если после обновления у части пользователей веб-клиент ведёт себя странно (не открываются формы, ломается отрисовка), попросите их обновить страницу
с очисткой кэша (Ctrl+F5). Браузер мог закешировать скрипты старой версии.
Автоматизация обновлений для нескольких серверов
Когда публикаций десятки, а платформу обновляют каждый квартал, ручная правка надоедает. Задача сводится к замене одного номера версии в конфигурации веб-сервера.
Пример для PowerShell (Windows, Apache 2.4). Скрипт меняет путь к модулю на указанную версию, проверяет конфигурацию и при ошибке возвращает старый файл:
$new = "8.3.24.1342"
$conf = "C:\Apache24\conf\httpd.conf"
$dll = "C:/Program Files/1cv8/$new/bin/wsap24.dll"
if (-not (Test-Path $dll)) { throw "Модуль $dll не найден" }
Copy-Item $conf "$conf.bak" -Force
Stop-Service Apache2.4
$text = [IO.File]::ReadAllText($conf)
$text = $text -replace 'LoadModule _1cws_module ".*?"', "LoadModule _1cws_module `"$dll`""
[IO.File]::WriteAllText($conf, $text, (New-Object Text.UTF8Encoding $false))
& "C:\Apache24\bin\httpd.exe" -t
if ($LASTEXITCODE -ne 0) {
Copy-Item "$conf.bak" $conf -Force
Write-Host "Ошибка конфигурации, возвращён старый файл"
}
Start-Service Apache2.4
Скрипт записывает файл в UTF-8 без метки BOM. Метка в начале httpd.conf мешает Apache прочитать первую директиву, поэтому штатный Set-Content -Encoding UTF8 из Windows PowerShell 5 здесь не подходит.
В Linux удобнее другой приём: создать символическую ссылку на текущую версию и указать её в LoadModule:
sudo ln -sfn /opt/1cv8/x86_64/8.3.24.1342 /opt/1cv8/x86_64/current
# в конфигурации Apache:
# LoadModule _1cws_module "/opt/1cv8/x86_64/current/wsap24.so"
sudo apachectl configtest && sudo systemctl restart apache2
Тогда при следующем обновлении меняется только ссылка, а конфигурация Apache остаётся прежней. Такую же ссылку можно использовать в Ansible или другом средстве управления конфигурацией.
Ошибки при обновлении модуля и что с ними делать
Если ошибка не из списка, начните с журнала: C:\Apache24\logs\error.log в Windows, /var/log/apache2/error.log или /var/log/httpd/error_log в Linux. Для IIS включите трассировку неудачных запросов в диспетчере IIS: она покажет, на каком модуле обрывается обработка.