Как подружить 32-битный сервер 1С и 64-битный веб-сервер Apache 2.4 на Linux

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При эксплуатации серверных решений 1С:Предприятие на ОС Linux системные администраторы часто сталкиваются с проблемой избыточного потребления оперативной памяти 64-битной версией сервера (процессами rphost). В условиях ограниченных ресурсов (например, при наличии всего 8 ГБ ОЗУ) 64-битный сервер 1С может потреблять практически всю доступную память, что приводит к уходу системы в глубокий своп и резкому падению производительности. В то же время 32-битная версия сервера 1С работает с памятью значительно скромнее, но возникает архитектурный конфликт: стандартные 64-битные веб-серверы (Apache) не могут напрямую загрузить 32-битные модули расширения 1С.

В данной статье мы подробно разберем, как реализовать гибридную схему работы, сохранив преимущества 64-битной операционной системы и экономичность 32-битного сервера 1С.

Анализ проблемы: почему x64 потребляет больше памяти

Прежде чем переходить к настройке, проанализируем ситуацию. В 64-битных системах адресное пространство практически не ограничено, и платформа 1С использует это для агрессивного кэширования метаданных и временных таблиц. Процесс rphost версии x64 сразу после старта может занимать 4–5 ГБ ОЗУ, в то время как версия x32 в аналогичных условиях потребляет менее 1 ГБ. Основная сложность заключается в публикации баз: веб-сервер Apache 2.4 (x64), установленный из стандартных репозиториев современных дистрибутивов (Ubuntu 16.04/18.04/20.04), требует наличия 64-битной библиотеки wsap24.so. Попытка подключить 32-битный модуль к 64-битному процессу Apache приведет к ошибке сегментирования или отказу в запуске службы.

Решение №1: Гибридная установка модулей (Метод подмены)

Рассмотрим наиболее изящный способ, который позволяет запустить 32-битный сервер приложений 1С, но использовать 64-битные модули для публикации на Apache. Основная идея заключается в том, что модулю расширения веб-сервера неважно, какой разрядности сервер 1С (кластер), так как общение между ними идет по протоколу TCP/IP. Главное условие — полное совпадение версий (сборки) платформы.

Разберем процесс по шагам:

  1. Установка 64-битной платформы: Сначала устанавливаем полную 64-битную версию сервера 1С той версии, которую планируем использовать (например, 8.3.16.1224).
  2. Резервное копирование библиотек: Нам необходимо сохранить папку с 64-битными модулями. Копируем содержимое директории: cp -r /opt/1C/v8.3/x86_64 /opt/1C/v8.3/x86_64_backup Это нужно сделать, так как при удалении пакета x64 система может очистить каталог /opt/1C.
  3. Удаление x64 и установка x32: Удаляем 64-битную платформу и устанавливаем аналогичную версию сервера 1С x32 (i386). После установки возвращаем сохраненную папку x86_64 обратно в /opt/1C/v8.3/.
  4. Настройка Apache: Теперь у нас в системе физически присутствует и работающий 32-битный сервер 1С (служба srvc1cv83), и набор 64-битных библиотек в папке x86_64. При публикации базы через утилиту webinst или вручную в конфигурационном файле Apache (httpd.conf или apache2.conf) указываем путь к 64-битному модулю: LoadModule _1cws_module "/opt/1C/v8.3/x86_64/wsap24.so"
  5. Проверка прав доступа: Убедимся, что пользователь, под которым запущен Apache (обычно www-data), имеет права на чтение файлов в каталоге /opt/1C/v8.3/x86_64/.

Выясним причину, почему это работает: Apache успешно загружает 64-битный wsap24.so, так как их архитектуры совпадают. В свою очередь, этот модуль обращается к 32-битному серверу 1С по локальному адресу 127.0.0.1 и портам 1540/1541, используя стандартные механизмы межпроцессного взаимодействия.

Решение №2: Использование Docker-контейнеров

Если вы не хотите «засорять» основную систему смешиванием библиотек разных архитектур, проанализируем вариант с Docker. Это современный и безопасный подход, позволяющий изолировать окружение веб-сервера от окружения сервера приложений.

Рассмотрим алгоритм настройки:

  1. Сервер приложений: Устанавливаем 32-битный сервер 1С непосредственно на хостовую ОС (x64 Linux) через механизм multiarch (команда dpkg --add-architecture i386).
  2. Контейнер с Apache: Создаем Docker-контейнер на базе 32-битного образа (например, i386/httpd или i386/ubuntu).
  3. Публикация: Внутри контейнера устанавливаем 32-битные модули расширения веб-сервера 1С.
  4. Связь: В настройках публикации (файл .vrd) указываем адрес хостовой машины вместо localhost, чтобы Apache из контейнера мог достучаться до ragent на хосте.

Посмотрим на пример настройки SSL при таком подходе. Чтобы не мучиться с сертификатами внутри контейнера, рекомендуется использовать Nginx x64 на хостовой машине в качестве обратного прокси (Reverse Proxy). Nginx будет принимать HTTPS-трафик, терминировать SSL (например, от Let's Encrypt), и перенаправлять чистый HTTP-трафик на Apache (в контейнере или локальный x32).

Важные нюансы и решение ошибки "Error loading component pack"

В некоторых версиях платформы (особенно 8.3.15 и выше) простой подмены файла wsap24.so может быть недостаточно. Проанализируем ситуацию: новый модуль расширения имеет зависимости от других библиотек платформы (libcore8.so, libmw8.so и др.).

Если при попытке зайти через веб-клиент вы получаете ошибку "1C:Enterprise 8 application error: Error loading component pack", выполните следующие действия:

Итоги и рекомендации

Мы рассмотрели, что «подружить» разные архитектуры вполне реально. Наиболее стабильным и простым в реализации является первый метод (гибридная папка /opt/1C). Он позволяет сэкономить несколько гигабайт оперативной памяти, что критично для серверов с объемом ОЗУ 8 ГБ и ниже.

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

← На главную