Свой сервер для обсуждений и звонков в 1С: от установки до диагностики
Содержание
Сервер взаимодействия 1С — это отдельное серверное приложение на Java, которое обслуживает систему взаимодействия платформы 1С:Предприятие 8.3: чаты-обсуждения, уведомления, аудио- и видеозвонки, обмен сообщениями с мессенджерами. Без своего сервера базы подключаются к облачному сервису фирмы 1С — «1С:Диалог». Собственный сервер ставят, когда переписка не должна уходить за периметр компании или облако недоступно из сети.
Типичная жалоба администратора: обсуждения то работают, то пишут, что нет связи с сервером, а в браузере по адресу сервера висит HTTP 503. Чаще всего виновата не платформа, а одно из звеньев цепочки: служба, сеть, прокси или база PostgreSQL самого сервера.
Как работает сервер взаимодействия и чем он отличается от облака
Система взаимодействия встроена в платформу начиная с версии 8.3.10. Платформа умеет показывать обсуждения, а хранит и раздаёт сообщения именно сервер взаимодействия.
Схема обмена такая:
- 💻 Клиент 1С (тонкий, веб, мобильный) держит постоянное соединение WebSocket с сервером взаимодействия.
- 🖥️ Сервер 1С:Предприятия тоже обращается к нему — когда код конфигурации создаёт обсуждение или отправляет сообщение.
- 🗄️ Сервер взаимодействия хранит переписку и вложения в своей базе PostgreSQL, рассылает новые сообщения всем подключённым клиентам.
- 🔎 Вспомогательные компоненты — кластерный кеш Hazelcast и Elasticsearch для поиска по сообщениям.
Информационная база 1С регистрируется на сервере один раз. После регистрации пользователи базы становятся пользователями системы взаимодействия, и им не нужны отдельные логины.
| Критерий | Облако «1С:Диалог» | Собственный сервер |
|---|---|---|
| Где хранится переписка | На серверах фирмы 1С | У вас, в вашем PostgreSQL |
| Установка | Не нужна | Java, PostgreSQL, сервер, сопровождение |
| Доступ из закрытой сети | Нужен выход в интернет | Работает внутри периметра |
| Кто обновляет | Фирма 1С | Ваш администратор |
| Когда выбирать | Малый офис, нет требований к хранению | Требования ИБ, изолированная сеть, много пользователей |
Если цель — просто включить обсуждения в типовой конфигурации, начните с облака. Свой сервер оправдан, когда есть требование хранить данные у себя или нет стабильного выхода в интернет.
Что подготовить перед установкой сервера взаимодействия
Сервер взаимодействия работает на Windows и Linux. Для пилота хватит одной машины, для боевой эксплуатации его лучше вынести отдельно от сервера 1С:Предприятия: Java-процесс и PostgreSQL заметно потребляют память.
Что нужно заранее:
- Дистрибутив сервера взаимодействия с портала обновлений фирмы 1С. Версию берите ту, что совместима с вашей платформой: требования указаны в описании релиза.
- Установщик
1ce-installer— через него ставятся сервер и утилитаring, которой он настраивается. - 64-разрядная Java той версии, которую требует релиз сервера. Для свежих релизов подходит Liberica JDK или другая сборка OpenJDK нужной версии.
- PostgreSQL и пустая база под данные сервера, например
cs_db, плюс пользователь с правами владельца этой базы. - DNS-имя сервера, например
cs.company.local. С ним проще перейти на TLS и не перенастраивать базы при смене IP. - Открытые порты между клиентами и сервером: порт WebSocket (в примерах документации — 9094) и, только для администратора, порт HTTP-администрирования (в примерах — 8087).
Не ставьте сервер взаимодействия на ту же машину, где крутится нагруженный кластер 1С, без запаса по памяти. Нехватка RAM у Java-процесса выглядит как «случайные» обрывы связи у всех пользователей сразу.
Установка собственного сервера взаимодействия по шагам
Порядок одинаковый для Windows и Linux, различаются только пути и способ запуска службы.
Шаг 1. Установите компоненты
Запустите 1ce-installer из дистрибутива и установите сервер взаимодействия. Вместе с ним ставятся Hazelcast, Elasticsearch и утилита ring. Проверьте, что ring доступна из командной строки: команда ring help должна вывести список
модулей.
Шаг 2. Создайте экземпляр и службу
Экземпляр — это каталог с настройками, журналами и данными конкретного сервера. Создаётся он командой модуля cs, после чего для экземпляра регистрируется служба операционной системы:
ring cs instance create --dir /var/cs/cs_instance --owner cs_user
ring cs --instance cs_instance service create --java-home /opt/java/jdk --stopped
На Windows вместо путей Linux укажите каталог вида C:\cs\cs_instance. Точный набор параметров для вашего релиза смотрите в справке ring cs --help — он менялся от версии к версии. Аналогично создаются экземпляры Hazelcast и Elasticsearch.
Шаг 3. Пропишите подключение к PostgreSQL и сетевые адреса
Экземпляру нужно сообщить, где лежит база и на каком адресе слушать клиентов:
ring cs --instance cs_instance jdbc pool set-params --url jdbc:postgresql://localhost:5432/cs_db?currentSchema=public
ring cs --instance cs_instance jdbc pool set-params --username cs_dbuser --password 'СложныйПароль'
ring cs --instance cs_instance websocket set-params --hostname 0.0.0.0 --port 9094
Шаг 4. Запустите службу и инициализируйте хранилище
Запустите службу средствами ОС (systemctl start на Linux или оснастка «Службы» на Windows). Java-процесс стартует не мгновенно: первые десятки секунд сервер может отвечать ошибкой.
После старта база сервера регистрируется через HTTP-интерфейс администрирования запросом, приведённым в инструкции по установке вашего релиза. Без этого шага сервер запускается, но клиенты получают отказ.
Шаг 5. Проверьте, что сервер жив
С самой машины выполните:
curl http://localhost:8087/rs/health
Ответ без ошибки значит, что сервер поднялся и видит свою базу. Затем с рабочего места пользователя проверьте доступность порта WebSocket: на Windows — Test-NetConnection cs.company.local -Port 9094 в PowerShell.
Подключение информационной базы к своему серверу
Регистрация выполняется из самой базы 1С, под пользователем с полными правами.
- В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) откройте раздел
Администрированиеи найдите в настройках программы группу «Обсуждения». Быстрее всего — поиском по слову «Обсуждения» в настройках. - Нажмите подключение и выберите вариант с собственным сервером.
- Укажите адрес сервера:
ws://cs.company.local:9094илиwss://cs.company.localпри работе через TLS. - Введите e-mail администратора: на него придёт код подтверждения регистрации. Вставьте код в форму.
- Перезапустите клиент и откройте обсуждения — список должен загрузиться без предупреждений.
В конфигурациях без БСП то же самое делается через платформенную стандартную функцию «Управление системой взаимодействия» (Все функции → Стандартные).
Одна информационная база — одна регистрация. Если базу скопировали для тестов, копия унаследует регистрацию, и сообщения из теста попадут в рабочие обсуждения. После копирования отмените регистрацию в копии, прежде чем пускать туда людей.
Защита сервера взаимодействия: TLS, порты и доступ
Сервер хранит деловую переписку и вложения, поэтому закрывать его нужно не хуже, чем сервер 1С.
- 🔒 Шифрование. Переведите клиентов на
wss://. Проще всего поставить перед сервером nginx с TLS-сертификатом и проксировать WebSocket на порт 9094. Сертификат должен быть доверенным для всех клиентов: самоподписанный вызывает отказ соединения без внятного сообщения. - 🚪 Порт администрирования. HTTP-порт 8087 слушайте только на
127.0.0.1или откройте его в межсетевом экране лишь для машины администратора. - 🔑 Пароли. Смените учётные данные администратора, заданные по умолчанию в инструкции по установке. Пароль пользователя PostgreSQL храните только в настройках экземпляра.
- 🧱 Сегментация. Если внешние пользователи не нужны, не публикуйте порт WebSocket в интернет — оставьте доступ из локальной сети или через VPN.
- 💾 Резервные копии. Переписка живёт в базе PostgreSQL сервера, а не в базе 1С. Включите её в регламент копирования отдельно.
Минимальный блок nginx для 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;
}
Без заголовков Upgrade и Connection прокси не пропустит рукопожатие WebSocket, а короткий proxy_read_timeout рвёт простаивающие соединения каждую минуту.
Ошибки сервера взаимодействия: HTTP 503 и обрывы связи
Почти все сбои сводятся к трём вещам: служба не работает , до неё не доходит сеть или сервер не видит свою базу. Начинайте проверку с сервера, а не с клиента.
curl http://localhost:8087/rs/health. Если служба падает сама, смотрите в журнале нехватку памяти Java (OutOfMemoryError) и увеличьте объём кучи в параметрах экземпляра.Перезапуск службы сервера взаимодействия обрывает соединения всех пользователей: обсуждения и звонки пропадут на время рестарта. Учётную работу в 1С это не останавливает, но делайте перезапуск вне пиковых часов и предупредите людей.
Перед перезапуском полезно собрать факты: время сбоя, текст из журнала экземпляра, вывод ss -tlnp | grep 9094 на Linux или netstat -ano | findstr 9094 на Windows. С этими данными причина находится быстрее, чем перебором.
Производительность и масштабирование сервера
Один экземпляр спокойно обслуживает небольшую компанию. Узкие места появляются с ростом числа одновременных подключений и объёма вложений.
Куда смотреть в первую очередь:
| Узкое место | Признак | Что сделать |
|---|---|---|
| Память Java | Падения с OutOfMemoryError, долгие паузы | Увеличить кучу в параметрах экземпляра, оставить запас RAM системе |
| PostgreSQL | Медленная загрузка истории обсуждений | Вынести базу на SSD, настроить PostgreSQL под объём памяти, следить за ростом таблиц |
| Вложения | Быстрый рост базы | Ограничить размер файлов в обсуждениях, регулярно чистить старые |
| Поиск | Долгий поиск по сообщениям | Выделить Elasticsearch память и диск отдельно |
| Сеть | Задержки в звонках | Проверить пропускную способность и маршрут медиатрафика |
Когда одного узла мало, сервер разворачивают кластером: несколько экземпляров сервера взаимодействия работают с общей базой PostgreSQL и связаны через Hazelcast. Перед ними ставят балансировщик с поддержкой WebSocket и «липкими» сессиями.
Видеозвонки нагружают сеть и процессор сильнее чата. Если звонки массово не нужны, отключите их в настройках обсуждений базы — это снизит нагрузку на сервер и канал.
Интеграция с мессенджерами и программный доступ из 1С
Сервер взаимодействия умеет связывать обсуждения 1С с внешними каналами. Через механизм интеграций сообщения из Telegram или ВКонтакте попадают в обсуждения базы, а ответ сотрудника уходит клиенту обратно. Так строят приём обращений: менеджер отвечает из 1С, не открывая мессенджер. Набор доступных внешних систем зависит от релиза сервера и платформы.
Для разработчика сервер доступен через объект глобального контекста СистемаВзаимодействия. Пример: при закрытии месяца создать обсуждение и отправить в него сообщение.
Если Не СистемаВзаимодействия.ИнформационнаяБазаЗарегистрирована() Тогда
Возврат;
КонецЕсли;
Обсуждение = СистемаВзаимодействия.СоздатьОбсуждение();
Обсуждение.Заголовок = "Закрытие месяца";
Обсуждение.Участники.Добавить(СистемаВзаимодействия.ТекущийПользователь());
Обсуждение.Записать();
Сообщение = СистемаВзаимодействия.СоздатьСообщение(Обсуждение.Идентификатор);
Сообщение.Текст = Новый ФорматированнаяСтрока("Регламентные операции выполнены");
Сообщение.Записать();
Проверка регистрации в начале обязательна: в незарегистрированной базе обращение к обсуждениям вызовет исключение, и регламентное задание упадёт.
Типовые сценарии интеграции:
- 📣 уведомление ответственного о новом документе или ошибке обмена;
- 🧾 обсуждение, привязанное к конкретному документу — контекстное обсуждение прямо в его форме;
- 🤖 бот, который отвечает в чате результатом запроса к базе;
- 📱 сообщения сотрудникам в мобильном клиенте 1С.