Как устроен и настраивается собственный сервер взаимодействия 1С:Предприятия

· 10 мин

Содержание

Сервер взаимодействия 1С — это отдельное серверное приложение на Java, через которое работает система взаимодействия платформы 8.3: чаты и обсуждения, сообщения к документам, уведомления, звонки, передача файлов между пользователями баз. Информационная база регистрируется на таком сервере, и все её пользователи начинают видеть друг друга в обсуждениях. Сервер бывает двух видов: облачный сервис фирмы 1С (1cdialog.com) и собственный, который ставят в своей сети.

С кластером серверов 1С (ragent, rmngr, rphost) его путают постоянно. Это разные вещи: кластер выполняет код конфигурации и обслуживает базы, а сервер взаимодействия только доставляет сообщения между клиентами. Ниже — как он устроен, какие порты слушает, где искать логи и что проверять, когда обсуждения не подключаются.

Из чего состоит сервер взаимодействия и как он работает

Схема простая. Клиент 1С (тонкий, толстый или веб) открывает постоянное WebSocket-соединение с сервером взаимодействия. По этому каналу приходят новые сообщения, статусы «в сети», входящие звонки. Сама база в доставке сообщений не участвует: она лишь хранит регистрацию и даёт серверу знать, какие пользователи в ней есть.

Собственный сервер взаимодействия собирается из нескольких компонентов:

  • ☕ Java — сам сервер написан на Java, нужна версия из системных требований дистрибутива;
  • 🐘 PostgreSQL — хранит сообщения, обсуждения, пользователей и регистрации баз;
  • 🔎 Elasticsearch — полнотекстовый поиск по сообщениям;
  • 🗂 хранилище файлов — вложения и картинки из чатов, его инициализируют отдельной командой после установки;
  • 🧩 Hazelcast — встроенный механизм для объединения нескольких узлов сервера в кластер;
  • 🛠 утилита ring — через неё создают экземпляр сервера, службу и задают все параметры.

Сервер взаимодействия и кластер 1С: в чём разница

Кластер серверов 1ССервер взаимодействия
Процессыragent, rmngr, rphostJava-приложение cs
Порты по умолчанию1540 (агент), 1541 (менеджер), 1560–1591 (рабочие процессы)WebSocket для клиентов + HTTP для администрирования
Задачавыполняет код, работает с СУБД базыдоставляет сообщения, звонки, уведомления
Управлениеконсоль кластера, racring, HTTP-запросы к админ-интерфейсу
Нужен ли для работы базыда, в клиент-серверном вариантенет, база работает и без него

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

Облако или свой сервер

ВариантКогда подходитОграничения
Облачный 1cdialog.comнебольшая компания, есть выход в интернетсообщения хранятся у 1С, нужна почта для подтверждения регистрации
Собственный сервертребования безопасности, закрытый контур, много пользователейсвоя инфраструктура: Java, PostgreSQL, Elasticsearch, сертификат

Установка и параметры запуска: команды ring и порты

Собственный сервер ставят из дистрибутива «Сервер взаимодействия», который скачивают вместе с другими продуктами 1С на портале обновлений. Порядок установки одинаков для Windows и Linux, отличаются пути и способ запуска служб.

  1. Установите Java нужной версии, PostgreSQL и Elasticsearch. Под сервер взаимодействия создайте в PostgreSQL отдельную базу, например cs_db.
  2. Распакуйте дистрибутив и запустите установщик. Вместе с сервером поставится утилита ring.
  3. Создайте экземпляр сервера и службу.
  4. Пропишите параметры WebSocket, подключение к PostgreSQL и к Elasticsearch.
  5. Запустите службу и инициализируйте хранилище файлов.

Типовой набор команд для Linux выглядит так (имена, пароли и пути замените своими):

ring cs instance create --dir /var/cs/cs_instance --owner cs_user
ring cs --instance cs_instance service create --java-home /opt/java --stopped

ring cs --instance cs_instance websocket set-params --hostname 0.0.0.0
ring cs --instance cs_instance websocket set-params --port 9094

ring cs --instance cs_instance jdbc pools --name common set-params \
  --url jdbc:postgresql://localhost:5432/cs_db?currentSchema=public
ring cs --instance cs_instance jdbc pools --name common set-params --username postgres
ring cs --instance cs_instance jdbc pools --name common set-params --password <пароль>

ring cs --instance cs_instance jdbc pools --name privileged set-params \
  --url jdbc:postgresql://localhost:5432/cs_db?currentSchema=public
ring cs --instance cs_instance jdbc pools --name privileged set-params --username postgres
ring cs --instance cs_instance jdbc pools --name privileged set-params --password <пароль>

ring cs --instance cs_instance elasticsearch set-params --addresses localhost:9300

Пул common сервер использует для обычной работы, privileged — для создания и обновления своих таблиц. Синтаксис конкретной версии всегда сверяйте по справке: ring help и ring cs help.

После запуска службы хранилище файлов включают HTTP-запросом POST к административному интерфейсу по адресу http://localhost:8087/admin/bucket_server. В теле запроса в формате JSON передают параметры хранилища — строку подключения JDBC к той же базе PostgreSQL, логин и пароль. Точный состав полей для вашей версии берите из документации к дистрибутиву: он менялся между выпусками.

Учётная запись admin:admin — стандартная для свежей установки. Смените пароль администратора сразу после настройки и не открывайте порт 8087 наружу.

Какие порты открыть

  • 🔌 WebSocket-порт (в примере 9094) — к нему подключаются все клиенты 1С. Его открывают в межсетевом экране для пользователей.
  • 🔒 8087 — административный HTTP-интерфейс. Достаточно доступа с самого сервера или из сети администраторов.
  • 🐘 5432 — PostgreSQL, нужен только серверу взаимодействия.
  • 🔎 9300 — Elasticsearch, тоже только для сервера.

Для пользователей из интернета клиентский порт обычно прячут за обратным прокси (nginx) на 443 с HTTPS. Тогда в настройках базы указывают адрес вида wss://cs.example.ru. Прокси обязательно должен пропускать заголовки Upgrade и Connection — без них WebSocket не поднимется.

location / {
    proxy_pass http://127.0.0.1:9094;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_read_timeout 3600s;
}

proxy_read_timeout увеличен специально: соединение висит часами, а короткий таймаут прокси будет рвать его, и у пользователей обсуждения станут «мигать».

Подключение информационной базы к серверу взаимодействия

Регистрирует базу пользователь с административными правами.

  1. В типовых конфигурациях на БСП откройте раздел Администрирование и найдите группу настроек «Обсуждения» (в разных конфигурациях она лежит в общих настройках или в настройках органайзера).
  2. Включите обсуждения и выберите вариант подключения.
  3. Для облачного сервиса укажите почту администратора: на неё придёт код подтверждения, его вводят в той же форме.
  4. Для собственного сервера укажите адрес: ws://имя-сервера:9094 в локальной сети или wss://… через прокси с сертификатом.
  5. Перезапустите клиент у пользователей — в панели появятся обсуждения.

Если в конфигурации нет такой настройки, регистрацию выполняют платформенной стандартной функцией. Она называется «Управление системой взаимодействия» и лежит в меню Все функции → Стандартные. Если команды «Все функции» в главном меню нет, включите её: Сервис и настройки → Параметры, флаг «Отображать команду “Все функции”».

💡 Регистрация привязана к самой базе. Если развернуть копию рабочей базы для тестов, копия унаследует регистрацию. В результате сообщения из тестовой базы могут попадать к реальным сотрудникам. Сразу после развёртывания копии отключите в ней обсуждения или зарегистрируйте её на отдельном тестовом сервере.

Диагностика сервера взаимодействия: логи и проверки

Проверку ведите снизу вверх: служба → порт → компоненты → клиент.

1. Служба запущена? На Linux проверьте статус через systemctl status с именем службы, созданной ring. На Windows — оснастка «Службы».

2. Порт слушается?

ss -tlnp | grep -E '9094|8087'

На Windows аналог — netstat -ano | findstr 9094.

3. Порт доступен с машины пользователя? С клиентского компьютера выполните в PowerShell:

Test-NetConnection cs-server -Port 9094

TcpTestSucceeded : False при работающей службе означает межсетевой экран или маршрутизацию.

4. Логи самого сервера. Они лежат в каталоге экземпляра, который задавали в ring cs instance create --dir, в подкаталоге logs. Ищите строки с ERROR и Exception вокруг времени сбоя. Типичное содержимое:

  • ошибки JDBC — сервер не может войти в PostgreSQL (пароль, pg_hba.conf, нет базы);
  • ошибки соединения с Elasticsearch — тот не запущен или слушает другой адрес;
  • нехватка памяти Java — сервер падает под нагрузкой.

5. Логи соседних компонентов. Elasticsearch и PostgreSQL пишут свои журналы. Часто корень там: Elasticsearch на Linux не стартует без увеличенного параметра ядра vm.max_map_count (требуемое значение — 262144):

sysctl -w vm.max_map_count=262144
echo "vm.max_map_count=262144" >> /etc/sysctl.conf

6. Сторона 1С. Если сервер в порядке, а у одного пользователя обсуждения не появляются, смотрите журнал регистрации базы за период подключения и проверяйте, не блокирует ли антивирус или прокси на этом компьютере WebSocket.

Лицензирование: нужны ли отдельные лицензии

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

Что действительно стоит учитывать:

  • 📦 дистрибутив собственного сервера доступен на портале обновлений пользователям с действующей поддержкой;
  • ☁️ облачный 1cdialog.com регистрирует базу по почте администратора, отдельный ключ не нужен;
  • 🐘 PostgreSQL и Elasticsearch — свободное ПО, их лицензии к 1С не относятся;
  • 🔐 для wss нужен TLS-сертификат: бесплатный Let’s Encrypt или корпоративный.

Если в базе не хватает лицензий, проблема не в сервере взаимодействия. Пользователь просто не войдёт в программу, и до обсуждений дело не дойдёт.

Производительность и масштабирование кластера взаимодействия

Для компании на несколько десятков пользователей хватает одного узла, где Java, PostgreSQL и Elasticsearch стоят на одной виртуальной машине. Узкие места появляются с ростом числа сообщений и вложений.

ПризнакЧто подкрутить
Сервер падает с ошибкой памяти Javaувеличить объём памяти JVM в параметрах службы и оперативную память ВМ
Поиск по сообщениям медленныйвынести Elasticsearch на отдельную машину, дать ему больше памяти
Быстро растёт база PostgreSQLхранить файлы во внешнем S3-совместимом хранилище вместо базы
Сотни одновременных пользователейдобавить второй узел, объединить узлы через Hazelcast, поставить балансировщик с поддержкой WebSocket

Ещё три приёма из практики:

  1. Регулярное обслуживание PostgreSQL. Включите autovacuum и следите за размером таблиц: сообщения накапливаются годами.
  2. Отдельный диск под вложения. Если файлы лежат в базе, держите её на быстром SSD.
  3. Резервное копирование . Бэкапьте базу PostgreSQL сервера взаимодействия вместе с хранилищем файлов. Индекс Elasticsearch восстанавливается переиндексацией, но сообщения — нет.

Перезапуск службы сервера взаимодействия разрывает WebSocket-соединения у всех пользователей: на несколько секунд пропадут обсуждения, а идущие звонки оборвутся. Работа в самих базах не прервётся, но перезапуск лучше делать вне рабочих часов.

Ошибки подключения к серверу взаимодействия

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

Две ошибки, которые делают при установке чаще остальных:

  • ❌ Открыли наружу порт 8087. Административный интерфейс со стандартным паролем доступен из интернета. Закрывайте его и меняйте пароль.
  • ❌ Указали в базе localhost. У администратора на сервере всё работает, у остальных — нет, потому что для их компьютеров localhost — это они сами. В адресе всегда пишите сетевое имя или IP сервера.

Частые вопросы о сервере взаимодействия

Можно ли поставить сервер взаимодействия на тот же сервер, где кластер 1С?
Можно, если хватает памяти. Компоненты не конфликтуют по портам с ragent и rphost. Для крупных внедрений лучше вынести его на отдельную машину.
Сколько баз можно зарегистрировать на одном сервере?
Несколько. Каждая база регистрируется отдельно и получает свой список пользователей и обсуждений. Ограничение задаёт не число баз, а ресурсы сервера и PostgreSQL.
Что будет с обсуждениями, если сервер взаимодействия недоступен?
Работа в базе продолжится. Пропадут только чаты, уведомления и звонки до восстановления связи.
Можно ли перенести обсуждения из облака 1cdialog на свой сервер?
Готового переноса истории между облачным и собственным сервером в типовых инструментах нет. При смене сервера базу регистрируют заново, и история начинается с нуля.
Работает ли сервер взаимодействия с веб-клиентом и мобильным приложением?
Да. Веб-клиент и мобильный клиент подключаются к тому же адресу WebSocket, поэтому сервер должен быть доступен с тех сетей, откуда работают пользователи.