Публикация баз данных 1С:Предприятие 8.3 на веб-сервере Apache в Debian или Ubuntu

  • Автор:

1cv83-web-access-linux-000.png

Публикация информационных баз 1С:Предприятие на веб-сервере приобретает все большую популярность, так как позволяет легко организовать доступ с использованием стандартных протоколов HTTP/HTTPS из любого места где есть интернет. При этом вы можете работать даже там, где доступ в интернет ограничен одним лишь серфингом, если работает браузер - будет работать и 1С. Сегодня мы подробно рассмотрим настройку веб-сервера для совместной работы с 1С:Предприятие 8.3 на платформах Debian или Ubuntu.

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

С выносом веб-сервера на отдельную машину многие задачи автоматически снимаются, мы всегда можем использовать самые последние и актуальные версии ПО, а в случае компрометации сервера злоумышленник не получит доступ к серверу 1С, тем более что отдельно стоящий веб-сервер всегда можно вынести в отдельную подсеть или демилитаризованную зону. Кроме того, появляются новые возможности.

Например, веб-сервер можно использовать как единую точку консолидации для нескольких серверов, единственное условие - одинаковые версии технологической платформы. Это удобно, не нужно запоминать какая база расположена на каком сервере, кроме того, пробросить один сервер на внешний интерфейс или в VPN-сеть легче, чем группу серверов, для которых придется использовать нестандартные порты, что в ряде случаев может составить проблему.

1cv83-web-access-linux-001.pngВозможна также и иная схема, когда несколько веб-серверов работают с одним сервером 1С. Это оправдано, когда следует разделить набор доступных баз и обеспечить разный уровень безопасности, высокий для внешних пользователей и стандартный для внутренних, либо обеспечить балансировку нагрузки.

1cv83-web-access-linux-002.png

Также возможны и любые иные комбинации, которые ограничены только вашими возможностями и потребностями. А с учетом относительной нетребовательности веб-сервера к ресурсам, для них можно использовать виртуальные машины или контейнеры. Например, мы имеем хороший опыт по использованию контейнеров в системе виртуализации Proxmox.

Настройка сервера

В первую очередь установим веб-сервер Apache, так как 1С:Предприятие, начиная с версии платформы 8.3.8 поддерживает актуальную версию Apache 2.4, то вся установка сводится к единственной команде:

apt install apache2

Затем установим модуль расширения веб-сервера от 1С, для этого скачаем с официального сайта архив Cервер 1С:Предприятия (64-bit) для DEB-based Linux-систем. Сразу сделаем оговорку, мы не видим никаких причин использовать в 2019 году 32-битные версии веб-серверов для 1С, поэтому здесь и далее мы будем работать только с 64-битными системами.

Из данного архива нам понадобятся три пакета: 1c-enterprise83-ws - сам модуль веб-расширения, 1c-enterprise83-common - требуется по зависимостям и 1c-enterprise83-server, которого нет в зависимостях, но без которого веб-сервер с 1С работать не будет. Если вы используете в 1С языки отличные от русского, то вам потребуется еще добавить одноименные пакеты nls

Скопируем эти пакеты в отдельную директорию, скажем, в домашнем каталоге, перейдем в него и установим пакеты:

cd ~/1C
dpkg -i 1c*.deb

После чего отключим автозагрузку сервера 1С, который для работы не нужен, в целях экономии ресурсов:

 systemctl disable srv1cv83

Если все делать "по инструкции", то следующими шагами должна быть установка прав на папки и файлы, но на практике этого не требуется, так как модуль веб-сервера работает только на чтение и имеет для этого все права с настройками по умолчанию.

Публикация клиент-серверных баз

Перед тем как публиковать базу нужно выполнить некоторые условия. Обращаться к серверу 1С можно только по имени хоста, которое веб-сервер должен разрешать в IP-адрес, в доменных сетях это решается использованием доменных DNS, но в любом случае разрешение имен следует проверить.

Для одноранговых сетей следует добавить запись в файл /etc/hosts:

192.168.16.130 SRV-1C

Где SRV-1C имя вашего сервера 1С, перед которым указываем его IP-адрес.

Затем создадим директорию для публикации информационной базы, расположение может быть любым, но хорошим тоном для Linux-систем будет использование стандартных расположений, для веб-сервера это /var/www:

mkdir /var/www/infobase

После чего можно перейти непосредственно к публикации, для этого будем использовать утилиту webinst, предварительно перейдя в каталог с ее расположением:

cd /opt/1C/v8.3/x86_64
./webinst -publish -apache24 -wsdir InfoBase -dir /var/www/infobase -connstr "Srvr=SRV-1C;Ref=Infobase;" -confpath /etc/apache2/apache2.conf

Коротко поясним используемые параметры:

  • publish - указывает необходимое действие, в данном случае публикацию, может быть опущен, так как это действие по умолчанию
  • apache24 - задает тип веб-сервера, для Apache 2.2 следует указывать apache22.
  • wsdir - имя публикации, по которому к базе следует обращаться из браузера, обратите внимание, что оно регистрозависимое
  • dir - путь публикации, ранее созданная нами директория
  • connstr - строка соединения, состоит из нескольких частей: Srvr - имя сервера, Ref - имя базы на сервере, каждая часть должна заканчиваться служебным символом ";"
  • confpath - путь к конфигурационному файлу веб-сервера

После чего следует перезапустить веб-сервер:

service apache2 reload

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

1cv83-web-access-linux-003.pngТакже веб-клиент не умеет использовать лицензии 1С текущего узла, а сначала пытается найти локальную лицензию на веб-сервере, а затем ищет их на сервере 1С, если их там нет, то вы не сможете запустить информационную базу даже при наличии на компьютере активной лицензии 1С.

1cv83-web-access-linux-004.pngПоэтому мы рекомендуем использовать тонкий клиент везде, где это возможно. Для подключения следует использовать строку http://SRV-WEB-1C/InfoBase или http://192.168.16.136/InfoBase, для подключения можно использовать FQDN, плоское имя или IP-адрес, с условием, что имена разрешаются на клиенте в адрес сервера. Предпочтительно использовать FQDN, но работать будет любой вариант.

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

1cv83-web-access-linux-005.pngЗдесь мы еще раз напомним, что адрес регистрозависимый и если вы ранее указали в параметре wsdir имя InfoBase, то в дальнейшем его следует использовать в строке подключения, потому как http://SRV-WEB-1C/InfoBase - работать будет, а http://SRV-WEB-1C/infobase вызовет ошибку 404.

Публикация файловых баз

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

Также нам потребуется установить все необходимые для работы 1С библиотеки и шрифты. Для этого потребуется подключить несвободные репозитории, откройте файл /etc/apt/sources.list и в Debian добавьте в конце каждой строки:

non-free

а в Ubuntu раскомментируйте строки содержащие в конце

multiverse

Затем выполните:

apt update
apt install ttf-mscorefonts-installer
apt install libfontconfig1
apt install libgsf-1-114
apt install libglib2.0-0
apt install libodbc1

В зависимости от используемого вами дистрибутива часть библиотек может быть уже установлена, о чем вы получите сообщение, так в Debian 9/10 по умолчанию установлены libfontconfig1 и libglib2.0-0.

Затем установим библиотеки ImageMagick, в разных дистрибутивах они могут иметь разные версии, поэтому выполним:

apt search libmagickwand-6

В выводе найдем нужную версию с окончанием на q16-x и установим ее.

1cv83-web-access-linux-006.pngВ нашем случае это библиотека libmagickwand-6.q16-6:

apt install libmagickwand-6.q16-6

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

mkdir /opt/1C_base/InfoBase2

И поместим в нее любым доступным способом, скажем, через SFTP, файл базы данных 1Cv8.1CD, имейте ввиду, что клиента 1С на веб-сервере нет и загрузить на нем DT-файл мы не можем, поэтому его нужно развернуть в другом месте и передать на сервер именно 1CD.

Затем обязательно изменим владельца директории на пользователя веб-сервера:

chown -R www-data:www-data /opt/1C_bases

Создадим каталог публикации:

mkdir /var/www/infobase2

и опубликуем базу:

cd /opt/1C/v8.3/x86_64
./webinst -publish -apache24 -wsdir InfoBase2 -dir /var/www/infobase2 -connstr "File=/opt/1C_base/InfoBase2;" -confpath /etc/apache2/apache2.conf

Перезапустим веб-сервер и базой можно работать:

service apache2 reload

Но для работы следует использовать исключительно тонкий клиент, так как веб-клиент не сможет получить лицензию.

Ошибка "Объект заблокирован"

При активной работе с веб-сервером вы можете столкнуться с ошибкой Объект заблокирован, причем заблокирован он будет этим же пользователем. Это связано с тем, что Apache запускает несколько рабочих процессов и затем балансирует нагрузку между ними. При этом каждый рабочий процесс устанавливает свое соединение с базой 1С и может получиться так, что вы открыли документ в одном сеансе, а сохраняете в другом. Поэтому вполне закономерно столкнетесь с блокировкой.

Чтобы избежать этого следует ограничить Apacе одним рабочим процессом, для этого откройте /etc/apache2/mods-available/mpm_prefork.conf и установите следующие значение опциям:

StartServers 1
MinSpareServers 1
MaxSpareServers 1

Это ограничит Apache одним рабочим процессом, но при этом серьезно пострадает производительность, поэтому не применяйте данную настройку без реальной в том необходимости.