Простой способ добавления баз 1С в apache2 без правки конфигурационных файлов, поставляемых в составе пакетов. Данная публикация показывает это на примере Debian.
1С предлагает ковыряние в файле /etc/apache2/apache2.conf. Для публикации базы данных нужно загрузить модуль wsap2.so, и настроить псевдоним (alias) для базы данных.
Этот файл может быть затёрт при обновлении пакета. Или в обновлении могут появиться важные правки от сопровождающих, которые не стоит игнорировать. В общем, простое поддержание системы в актуальном состоянии превращается в проблему.
К тому же, в 1С выяснили, что в Linux тоже можно ставить несколько версий одной и той же программы параллельно. И они смогут функционировать. После этих нововведений правка этого файла стала более сложной, т.к., путь к модулю теперь стал зависеть от версии платформы. Т.е., каждый раз после смены версии нужно править /etc/apache2/apache2.conf.
Для удобства смены применяемой версии платформы можно использовать символические ссылки на нужные каталоги. Например:
ls -l /opt/1cv8/
итого 12
drwxr-xr-x 2 root root 4096 окт 24 19:08 common
drwxr-xr-x 2 root root 4096 сен 30 2021 conf
lrwxrwxrwx 1 root root 18 окт 24 19:10 current -> x86_64/8.3.22.1603
drwxr-xr-x 5 root root 4096 окт 24 19:08 x86_64
После установки новой версии, если на неё переключается управление, правим ссылку /opt/1cv8/current на нужный каталог и запускаем сервис. Для серверов в кластере это тоже удобный механизм.
Для управления загрузкой модулей есть a2enmod и a2dismod. Чтобы эти приложения управляли загрузкой модуля wsap, нужно в каталоге /etc/apache2/mods-available разместить файл с понятным именем и расширением '.load'. Например, wsap-current.load с таким содержимым:
LoadModule _1cws_module "/opt/1cv8/current/wsap24.so"
И при вызове a2enmod этот модуль можно подключить:
# a2enmod
Your choices are: access_compat actions alias allowmethods asis auth_basic auth_digest auth_form authn_anon authn_core authn_dbd authn_dbm authn_file authn_socache authnz_fcgi authnz_ldap authz_core authz_dbd authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex buffer cache cache_disk cache_socache cern_meta cgi cgid charset_lite data dav dav_fs dav_lock dbd deflate dialup dir dump_io echo env expires ext_filter file_cache filter headers heartbeat heartmonitor http2 ident imagemap include info lbmethod_bybusyness lbmethod_byrequests lbmethod_bytraffic lbmethod_heartbeat ldap log_debug log_forensic lua macro mime mime_magic mpm_event mpm_prefork mpm_worker negotiation proxy proxy_ajp proxy_balancer proxy_connect proxy_express proxy_fcgi proxy_fdpass proxy_ftp proxy_hcheck proxy_html proxy_http proxy_http2 proxy_scgi proxy_wstunnel ratelimit reflector remoteip reqtimeout request rewrite sed session session_cookie session_crypto session_dbd setenvif slotmem_plain slotmem_shm socache_dbm socache_memcache socache_shmcb speling ssl status substitute suexec unique_id userdir usertrack vhost_alias wsap-current xml2enc
Which module(s) do you want to enable (wildcards ok)?
Собственно, подключение:
# a2enmod wsap-current
Enabling module wsap-current.
To activate the new configuration, you need to run:
systemctl restart apache2
После загрузки модуля нужно прописать применение обработчика 1c-application к определённым псевдонимам в настройках сайта.
Можно писать по одному сайту на базу, но это не очень удобно. Применение обработчика для разных псевдонимов описывается в отдельных файлах в каталоге /etc/apache2/1c (а можно и этот каталог разбить на 1c-avaible и 1c-enabled, но тогда утилиту для манипуляций символическими ссылками с этими фалами нужно будет писать самому). И загружаются в описании сайта одной строкой:
IncludeOptional 1c/*.wsap
Понятно, что файлы должны быть с расширением '.wsap', "чтоб никто не догадался"...
Содержимое файла, примерно такое:
# 1c publication
Alias "/acc" "/var/1C/www/acc/"
<Directory "/var/1C/www/acc/">
AllowOverride All
Options None
Require all granted
SetHandler 1c-application
ManagedApplicationDescriptor "/var/1C/www/acc/default.vrd"
</Directory>
Путь '/var/1C/www' можно заменить на другой удобный и понятный.
Да, это именно то, что прописывает, ломая основной конфигурационный файл apache2, webinst от самой платформы 1С. Плюсами данной методики можно считать:
-
не надо беспокоиться об обновлениях через стандартный пакетный менеджер системы, все изменения от сопровождающих пакета будут внесены без потери правок, необходимых для 1С;
-
довольно просто переключаться между версиями платформы 1С;
-
те механизмы, что 1С предлагает для публикации базы данных, будут работать (надо только подсовывать фэйковый httpd.conf), например, публикация базы данных с псевдонимом 'base' (после отработки достаточно перезапустить сервер):
cp /etc/apache2/apache2.conf /tmp/httpd.conf ; /opt/1cv8/current/webinst -publish -apache24 -wsdir base -dir /var/1C/www/base -connstr "Srvr=192.168.0.10;Ref=Base;" -confpath /tmp/httpd.conf && diff /tmp/httpd.conf /etc/apache2/apache2.conf | sed -n 's/< LoadModule.*//gp; /< /s|||p' > /etc/apache2/1c/base.wsap