Развертывание сервера 1С:Предприятие 8.3 на операционной системе Ubuntu 18.04 в связке с PostgreSQL — задача стандартная, но до момента установки веб-сервера для публикации баз. Часто возникает ситуация, когда после выполнения команды apt install apache2 стабильно работавшая система перестает функционировать: клиент 1С выдает ошибку "Сервер БД не обнаружен", а служба 1С теряет связь с СУБД. Проанализируем причины этого конфликта и разберем по шагам методы его устранения.
Одной из самых неочевидных причин является изменение состава системных библиотек. При установке Apache2 через менеджер пакетов apt, система автоматически разрешает зависимости и может обновить или заменить версии библиотек, которые критически важны для работы сервера 1С. В частности, 1С чувствительна к библиотекам libxml2, libgsf и libpng.
Выясним причину, проверив связи исполняемых файлов 1С. Для этого нам необходимо перейти в каталог с установленной платформой (замените 8.3.X.X на вашу версию) и выполнить проверку зависимостей для основных процессов ragent, rmngr и rphost:
cd /opt/1cv8/x86_64/8.3.X.X/
ldd ragent
ldd rphost
Внимательно изучим вывод. Если в списке присутствуют записи not found или пути ведут к версиям библиотек, установленным вместе с Apache, которые не совместимы с текущим релизом 1С, сервер не сможет корректно инициализировать драйверы для работы с PostgreSQL. Решением здесь будет создание символических ссылок на нужные версии библиотек в каталоге /usr/lib или использование LD_LIBRARY_PATH в скрипте запуска 1С.
Рассмотрим ситуацию с сетевыми интерфейсами. После установки Apache в Ubuntu часто меняются приоритеты разрешения имен. Проанализируем файл /etc/hosts. Иногда система начинает разрешать localhost как IPv6-адрес ::1, в то время как PostgreSQL может быть настроен на прослушивание только IPv4-адреса 127.0.0.1.
Проверим настройки конфигурации PostgreSQL. Откроем файл postgresql.conf (путь обычно /var/lib/pgpro/10/data/postgresql.conf или аналогичный для вашей версии) и найдем параметр listen_addresses:
# В файле postgresql.conf
listen_addresses = '*'
# Или убедитесь, что указаны оба протокола
# listen_addresses = 'localhost, 127.0.0.1'
Если сервер 1С обращается к базе данных по имени (например, по имени хоста), а после установки Apache это имя стало разрешаться иначе, связь прервется. Попробуем в настройках подключения 1С в консоли администрирования явно указать IP-адрес 127.0.0.1 вместо localhost или имени сервера.
Система AppArmor в Ubuntu 18.04 по умолчанию ограничивает права процессов. При установке веб-сервера Apache могут активироваться дополнительные политики безопасности, которые начинают блокировать межпроцессное взаимодействие (IPC) или доступ сервера 1С к сокетам PostgreSQL. Проанализируем системный лог на наличие блокировок:
sudo tail -f /var/log/syslog | grep -i audit
Если мы видим сообщения от apparmor="DENIED", относящиеся к процессам rphost или postgres, необходимо перевести AppArmor в режим обучения для этих профилей или временно отключить его, чтобы подтвердить теорию:
sudo systemctl stop apparmor
sudo systemctl disable apparmor
Важно: полное отключение безопасности не рекомендуется для рабочих серверов. В случае подтверждения проблемы следует добавить исключения для путей 1С в конфигурационные файлы AppArmor в каталоге /etc/apparmor.d/.
Сервер 1С:Предприятие при активной работе порождает множество потоков и открывает тысячи дескрипторов файлов и сокетов. Apache — это тоже многопоточный сервис. После его запуска общесистемные ресурсы могут быть исчерпаны, если не настроены лимиты для пользователя usr1cv8.
Разберем, как увеличить лимиты. Отредактируем файл /etc/security/limits.conf, добавив в конец следующие строки:
usr1cv8 hard nofile 65536
usr1cv8 soft nofile 65536
usr1cv8 hard nproc 10000
usr1cv8 soft nproc 10000
После внесения изменений необходимо перезагрузить сервер или переоткрыть сессию пользователя, чтобы новые параметры вступили в силу. Это гарантирует, что rphost сможет открывать достаточное количество соединений с базой данных PostgreSQL.
По умолчанию Apache занимает порты 80 и 443. Однако сервер 1С использует не только порты 1540, 1541 и 1560-1591. Процессы rphost динамически выбирают порты из диапазона. Выясним, нет ли пересечений. Используем команду netstat для анализа занятых портов:
sudo netstat -tulpn | grep -E 'apache2|1cv8|postgres'
Если мы обнаружим, что какой-либо вспомогательный модуль Apache или прокси-плагин пытается занять порты из диапазона 1560-1591, нам потребуется изменить настройки публикации 1С или диапазон рабочих портов в файле /etc/init.d/srv1cv8 (или в соответствующем unit-файле systemd).
Если в настройках подключения 1С к PostgreSQL в поле "Сервер баз данных" указано localhost, система может пытаться подключиться через Unix domain sockets. Установка Apache может изменить права доступа к директории /var/run/postgresql/ или /tmp.
Проанализируем права доступа. Убедимся, что пользователь usr1cv8 имеет права на чтение и выполнение в каталоге, где находится сокет PostgreSQL (обычно это файл .s.PGSQL.5432). Попробуем принудительно перевести соединение на TCP/IP, указав в консоли 1С адрес сервера как 127.0.0.1 (это заставит драйвер использовать сетевой стек вместо сокета).
Ubuntu 18.04 поставляется с OpenSSL 1.1. Некоторые релизы 1С 8.3 (особенно до версии 8.3.12-13) ориентированы на OpenSSL 1.0. При установке Apache могут обновиться системные конфигурации крипто-провайдеров, что ломает механизм аутентификации 1С при обращении к защищенным ресурсам или даже к СУБД, если используется шифрование соединений.
Для решения этой проблемы проверим наличие установленного пакета libssl1.0.0. Если он отсутствует, его необходимо установить вручную из репозиториев или архивов, так как Apache мог переключить систему на эксклюзивное использование libssl1.1.
sudo systemctl stop apache2 srv1cv8 postgresql.ragent и rmngr активны.dmesg на предмет ошибок сегментации (segmentation fault). Если 1С "падает" в момент старта Apache, причина в конфликте библиотек (см. Шаг 1).webinst, только убедившись в стабильности серверной части.Следование этим шагам позволит выявить, на каком именно уровне (сетевом, системном или уровне библиотек) происходит блокировка взаимодействия между сервером 1С и базой данных после появления в системе веб-сервера.