Веб-доступ к 1С из браузера: сервер на Ubuntu, Apache и webinst

· 9 мин

Содержание

Чтобы опубликовать базу 1С на веб-сервере Apache в Ubuntu, нужны три вещи: Apache 2.4, установленный компонент платформы «Модули расширения веб-сервера» той же версии, что и сервер 1С, и одна команда webinst -publish -apache24. Утилита сама создаст каталог с файлом default.vrd и допишет в конфиг Apache строку LoadModule и блок Alias. Через пару минут база открывается в браузере по адресу вида http://сервер/buh.

Частая ошибка — ставить на Ubuntu только Apache и ждать, что 1С «подхватится». Без модуля wsap24.so из дистрибутива платформы Apache ничего не знает о 1С и отдаёт 404 или голый листинг каталога. Второе заблуждение — что можно взять модуль от другой версии платформы. Нельзя: версии веб-расширения и сервера 1С должны совпадать до последней цифры.

Что проверить на сервере Ubuntu до установки 1С

Начните с чистой системы. Подойдут Ubuntu 22.04 и 24.04 LTS: платформа 8.3 актуальных версий на них ставится штатно.

Минимальный набор подготовки:

  • 🖥️ Имя хоста. Сервер 1С регистрирует кластер по имени машины. Имя должно разрешаться в IP — и на самом сервере, и на клиентах.
  • 🌐 Локаль. Для 1С и PostgreSQL нужна русская локаль ru_RU.UTF-8.
  • 🔤 Шрифты. Без них печатные формы в веб-клиенте поедут.
  • 🔒 Порты. Снаружи открыты только 80 и 443, порты кластера 1540–1591 — только для внутренней сети.
sudo apt update && sudo apt upgrade -y
sudo hostnamectl set-hostname srv1c
echo "127.0.1.1 srv1c" | sudo tee -a /etc/hosts
sudo locale-gen ru_RU.UTF-8
sudo update-locale LANG=ru_RU.UTF-8
sudo apt install -y apache2 fontconfig ttf-mscorefonts-installer

Если клиенты в локальной сети тоже будут подключаться толстым или тонким клиентом напрямую к серверу, пропишите srv1c в DNS или в hosts каждого компьютера. Иначе получите Сервер 1С:Предприятия не обнаружен, хотя ping по IP проходит.

Базу данных (PostgreSQL в сборке для 1С или Postgres Pro) ставьте до публикации и проверьте, что она стартует с локалью ru_RU.UTF-8. Для файловой базы СУБД не нужна, но для работы нескольких пользователей через браузер клиент-серверный вариант надёжнее.

Как поставить платформу 1С:Предприятие на Ubuntu

С платформы 8.3.20 дистрибутив для Linux — единый установщик setup-full-<версия>-x86_64.run. Скачайте его из личного кабинета на портале поддержки 1С и положите на сервер.

Для публикации нужны компоненты:

КомпонентЗачем
serverсервер 1С:Предприятия (агент, менеджер кластера, рабочие процессы)
wsмодули расширения веб-сервера — файл wsap24.so
server_adminсервер администрирования ras и утилита rac

Установка без графического интерфейса:

chmod +x setup-full-8.3.24.1467-x86_64.run
sudo ./setup-full-8.3.24.1467-x86_64.run --mode unattended \
  --enable-components server,ws,server_admin

Номер версии в примерах — для наглядности, подставьте свой. Платформа ложится в /opt/1cv8/x86_64/<версия>/, и под каждую новую версию создаётся отдельный каталог. Это важно позже, при обновлении.

Если веб-сервер и сервер 1С на разных машинах, на машину с Apache достаточно поставить только ws. Версия всё равно должна совпадать с сервером.

Запуск службы и настройка кластера серверов 1С

В новых версиях платформы служба сервера — шаблонный юнит systemd, файл которого лежит в каталоге платформы. Его нужно подключить и запустить:

V=8.3.24.1467
sudo systemctl link /opt/1cv8/x86_64/$V/srv1cv8-$V@.service
sudo systemctl enable --now srv1cv8-$V@default
sudo systemctl status srv1cv8-$V@default

После старта поднимается агент на порту 1540, менеджер кластера на 1541 и рабочие процессы в диапазоне 1560–1591. Проверить можно командой ss -tlnp | grep 15.

Чтобы управлять кластером без Windows, запустите сервер администрирования и посмотрите кластер:

/opt/1cv8/x86_64/$V/ras cluster --daemon
/opt/1cv8/x86_64/$V/rac cluster list

Команда rac cluster list выведет UUID кластера. Он нужен, чтобы создать информационную базу через rac infobase create. Набор параметров этой команды смотрите в rac help infobase — он зависит от СУБД.

Проще всего базу создать с любого Windows-компьютера в сети: в окне запуска 1С нажать Добавить → Создание новой информационной базы, выбрать вариант «На сервере 1С:Предприятия» и указать кластер srv1c, имя базы, тип СУБД и учётные данные PostgreSQL. Готовую базу из .dt загрузите потом через Конфигуратор.

Запомните имя базы в кластере (например, buh). Именно оно пойдёт в строку подключения при публикации, а не имя базы в PostgreSQL и не название в списке баз на клиенте.

Как Apache подключается к 1С

Apache обслуживает запросы браузера, а модуль wsap24.so пересылает их серверу 1С. Сам модуль ничего не хранит: всё, что он знает о базе, записано в файле default.vrd в каталоге публикации.

Цепочка выглядит так:

  1. Браузер открывает https://1c.example.ru/buh.
  2. Apache по директиве Alias "/buh" находит каталог /var/www/buh.
  3. Обработчик 1c-application читает default.vrd и берёт строку подключения Srvr="srv1c";Ref="buh";.
  4. Модуль подключается к кластеру как клиент и отдаёт браузеру веб-клиент.

Перед публикацией проверьте, что Apache работает и нужные модули включены:

sudo systemctl enable --now apache2
sudo a2enmod ssl headers
sudo apache2ctl -M | grep -E "ssl|headers"

Каталог публикации должен читаться пользователем www-data. Для клиент-серверной базы этого достаточно. Для файловой — www-data нужен ещё и доступ на запись к каталогу с файлом 1Cv8.1CD, иначе база откроется только на чтение или не откроется вовсе.

Публикация базы 1С на веб-сервере Apache командой webinst

Утилита webinst лежит в каталоге платформы. Одной командой она делает всю публикацию:

sudo mkdir -p /var/www/buh
sudo /opt/1cv8/x86_64/$V/webinst -publish -apache24 \
  -wsdir buh -dir /var/www/buh \
  -connstr "Srvr=srv1c;Ref=buh;" \
  -confpath /etc/apache2/apache2.conf

Что означают ключи:

  • -apache24 — тип веб-сервера (Apache 2.4);
  • -wsdir buh — виртуальный каталог, то есть хвост адреса;
  • -dir — физический каталог, куда ляжет default.vrd;
  • -connstr — строка подключения к базе;
  • -confpath — конфиг Apache, который утилита дополнит.

Для файловой базы строка подключения другая: -connstr "File=/srv/1c/buh;".

Проверьте, что дописала утилита, и перезапустите Apache:

sudo tail -n 20 /etc/apache2/apache2.conf
sudo apache2ctl configtest
sudo systemctl restart apache2

В конце файла появятся строка LoadModule _1cws_module "/opt/1cv8/x86_64/.../wsap24.so" и блок <Directory "/var/www/buh/"> с обработчиком 1c-application. Откройте http://srv1c/buh — должен загрузиться веб-клиент с окном входа.

Перезапуск Apache обрывает текущие сеансы веб-клиента. На рабочем сервере делайте это вне рабочего дня или используйте sudo systemctl reload apache2, если меняли только каталоги публикации.

Что править в default.vrd руками

Файл короткий, его удобно редактировать напрямую. Типовые правки:

  • 🧹 Логин и пароль. Если в строку подключения попали Usr и Pwd, уберите их. Иначе любой, кто откроет адрес, войдёт под этим пользователем.
  • 🔌 HTTP- и веб-сервисы. Атрибуты enable у элементов <ws> и <httpServices> управляют публикацией сервисов конфигурации. Не нужны — выключайте.
  • 📊 OData. Стандартный интерфейс OData публикуется отдельным флагом. Без задачи интеграции его не включают.

Когда публикация больше не нужна, её снимают тем же webinst с ключом -delete и теми же -wsdir, -dir, -confpath.

Обновление платформы и публикация

После обновления платформы строка LoadModule по-прежнему указывает на каталог старой версии. Apache либо грузит старый модуль, и база ругается на несовпадение версий, либо не стартует, если старый каталог удалили.

Порядок такой: поставить новую версию с компонентом ws, запустить службу новой версии, затем выполнить webinst -publish уже из нового каталога. Старую строку LoadModule в apache2.conf удалите вручную — двух модулей 1С в одном Apache быть не должно.

Защита опубликованной базы: HTTPS, доступ и порты

База, открытая в интернет по HTTP, — это пароли пользователей открытым текстом. Минимум для рабочей публикации:

  1. HTTPS. Бесплатный сертификат Let’s Encrypt ставится за минуту, если на сервер смотрит доменное имя:
sudo apt install -y certbot python3-certbot-apache
sudo certbot --apache -d 1c.example.ru

Certbot сам создаст виртуальный хост на 443 и настроит автопродление. Блок Alias и <Directory> от webinst лежат в общем конфиге и работают на обоих портах.

  1. Перенаправление с HTTP на HTTPS. Certbot предложит его при установке — соглашайтесь.

  2. Фаервол. Наружу только веб:

sudo ufw allow OpenSSH
sudo ufw allow "Apache Full"
sudo ufw enable

Порты 1540–1591 и 5432 в интернет не открывайте. Если нужен доступ тонким клиентом извне — только через VPN.

  1. Пользователи 1С. В базе должна быть включена аутентификация, у каждого сотрудника — свой пользователь с паролем. Пользователь без пароля с полными правами на публичном адресе — прямой путь к утечке.

  2. Скрытие версии Apache. В /etc/apache2/conf-available/security.conf поставьте ServerTokens Prod и ServerSignature Off.

Каждый сеанс веб-клиента занимает клиентскую лицензию так же, как тонкий клиент. Публикация не даёт «бесплатных» подключений — посчитайте лицензии до того, как раздавать ссылку.

Проверка публикации и разбор ошибок

После публикации откройте базу в браузере и проверьте вход, открытие пары документов и печатную форму. Если что-то не так, первым делом смотрите журнал Apache:

sudo tail -f /var/log/apache2/error.log

Там видно, загрузился ли модуль и что ответил сервер 1С. Самые частые ситуации разобраны ниже.

Диагностика: выберите симптом

Если журнал Apache молчит, а база не открывается, смотрите технологический журнал сервера 1С или хотя бы journalctl -u srv1cv8-$V@default. Ошибки подключения к СУБД и нехватки лицензий видны именно там.

Резервное копирование базы и публикации

Опубликованная база работает круглые сутки, поэтому копию снимают на живой базе средствами СУБД. Для PostgreSQL это pg_dump в сжатом формате — его можно запускать без остановки 1С.

Скрипт /usr/local/bin/backup1c.sh:

#!/bin/bash
set -e
DIR=/backup/1c
mkdir -p "$DIR"
pg_dump -U postgres -h localhost -Fc buh > "$DIR/buh_$(date +%F_%H%M).dump"
find "$DIR" -name "buh_*.dump" -mtime +14 -delete

Пароль для pg_dump положите в ~/.pgpass пользователя, от которого запускается задание, с правами 600. Расписание в crontab -e:

30 2 * * * /usr/local/bin/backup1c.sh >> /var/log/backup1c.log 2>&1

Кроме дампа базы сохраняйте то, что нужно для быстрого восстановления публикации:

  • 📄 /var/www/buh/default.vrd;
  • ⚙️ /etc/apache2/apache2.conf и каталог /etc/apache2/sites-available/;
  • 🗂️ каталог настроек кластера в домашнем каталоге пользователя usr1cv8 — там список баз кластера.

Хранить копии только на том же сервере — не резервное копирование. Раз в сутки отправляйте дампы на другой сервер или в объектное хранилище, а раз в месяц разворачивайте один из них в тестовую базу и проверяйте, что он открывается.

Перед тем как дать ссылку пользователям
Выполнено: 0 / 6

Частые вопросы по публикации 1С на Apache

Можно ли опубликовать на одном Apache несколько баз?
Да. Запустите webinst -publish для каждой базы со своими -wsdir и -dir. Строка LoadModule останется одна, а блоков Alias станет несколько.
Нужен ли Apache, если пользователи работают тонким клиентом?
Нет, тонкий клиент подключается к кластеру напрямую. Публикация нужна для веб-клиента, тонкого клиента через интернет по HTTP, мобильного клиента и HTTP-сервисов.
Подойдёт ли nginx вместо Apache?
Модуля 1С для nginx нет. Обычная схема — nginx снаружи как обратный прокси с TLS, а за ним Apache с опубликованной базой.
Как сменить адрес базы с /buh на другой?
Снимите публикацию через webinst -delete, затем опубликуйте заново с новым -wsdir. Ручная правка Alias тоже сработает, но легко забыть второй блок.
Работает ли публикация с файловой базой?
Работает, если www-data может писать в каталог базы. Но при нескольких пользователях через браузер файловая база заметно тормозит, клиент-серверный вариант надёжнее.