Сервер взаимодействия позволил общаться сотрудникам компании, используя одновременно разные конфигурации, например, такие, как «Ортикон: Лизинг. Бухгалтерский учет КОРП ред. 3.0» и «1С: Бухгалтерия 8».
Расскажем, что же представляет собой данный сервер с технической точки зрения и как его установить.
1С: Сервер взаимодействия
1С: Сервер взаимодействия — это программа, которая реализует серверную часть системы взаимодействия. Сервер взаимодействия может быть развёрнут в Интернете или в локальной сети предприятия на компьютерах с операционными системами Microsoft Windows или Linux.
В состав дистрибутива входят следующие компоненты:
-
Сервер системы взаимодействия.
-
Распределенное хранилище Hazelcast. В нем хранятся сессии пользователей, подписки на события, очереди.
-
Поисковый кластер Elasticsearch. Используется для подбора пользователей и полнотекстового поиска.
-
Утилита ring.
-
Внешняя обработка CollaborationSystemRegister.epf, предназначенная для регистрации информационной базы на сервере взаимодействия.
Для работы системы взаимодействия на компьютере необходимо наличие следующих программных продуктов:
1. JDK (64-разрядная) — версия 11. Рекомендуется Liberica JDK.
Для установки с помощью утилиты командной строки и работы сервера взаимодействия необходим вариант Standard.
Для установки с помощью графической утилиты необходим JDK с поддержкой Java FX, например, Liberica JDK вариант Full.
Скачать JDK: https://libericajdk.ru/pages/downloads/ или https://bell-sw.com/pages/downloads/.
2. СУБД PostgreSQL — версия 9.6 и старше.
Скачать сервер: https://www.postgresql.org/download/.
3. Утилита ring поставляется в составе сервера взаимодействия.
4. Утилита curl. Скачать утилиту: https://curl.haxx.se/download.html.
Подготовка для установки Сервера взаимодействия
Установку будем проводить под операционную систему Windows.
В первую очередь установите PostgreSQL все настройки по умолчанию.
После установки зайдите через pgAdmin4 и создайте пользователя, от имени которого СУБД будет работать с сервером взаимодействия. Данный пользователь должен обладать правами создания базы данных:
-
Login: cs_user.
-
Pass: cs_pwd.
Создайте БД cs_db и в качестве владельца укажите пользователя cs_user.
Для базы данных cs_db следует подключить расширения uuid-ossp. Для этого необходимо выполнить следующую команду базы данных, используя Query tools: CREATE EXTENSION IF NOT EXISTS “uuid-ossp”.
Затем установите JDK, мы использовали Bellsoft. После установки проверьте наличие системной переменной JAVA_HOME, переменная должна указывать на ваш JDK.
Установка Сервера взаимодействия
Установка Сервера взаимодействия производится путем скачивания дистрибутива с сайта обновлений 1С https://releases.1c.ru/total, его распаковки и запуска программы 1ce-installer.exe с правами администратора.
Приступим к настройке пакетов. Для этого откройте командную строку с правами администратора и перейдите в каталог с установленной утилитой ring.
Для начальной инициализации сервера Hazelcast необходимо выполнить следующие действия:
-
ring hazelcast instance create —dir C:\1CE\hc;
-
ring hazelcast —instance hc service create —stopped.
Теперь инициализируйте сервер Elasticsearch:
-
ring elasticsearch instance create —dir C:\1CE\es;
-
ring elasticsearch —instance es service create —stopped.
Инициализируем сервер взаимодействия:
-
ring cs instance create —dir C:\1CE\cs;
-
ring cs —instance cs service create —stopped.
После инициализации соедините ваш сервер взаимодействия с СУБД. Для этого нужно выполнить настройку параметров JDBC-драйверов PostgreSQL:
-
ring cs —instance cs jdbc pools —name common set-params —url jdbc:postgresql://localhost:5432/cs_db?currentSchema=public;
-
ring cs —instance cs jdbc pools —name common set-params —username cs_user;
-
ring cs —instance cs jdbc pools —name common set-params —password cs_pwd;
-
ring cs —instance cs jdbc pools —name privileged set-params —url jdbc:postgresql://localhost:5432/cs_db?currentSchema=public;
-
ring cs —instance cs jdbc pools —name privileged set-params —username cs_user;
-
ring cs —instance cs jdbc pools —name privileged set-params —password cs_pwd;
Для взаимодействия сервера взаимодействия и клиентского приложения используется протокол WebSocket. Для настройки работы этого протокола выполните следующие действия:
-
ring cs —instance cs websocket set-params —hostname 172.23.64.1;
-
ring cs —instance cs websocket set-params —port 9200.
После успешной установки и настройки Сервера взаимодействия необходимо инициализировать базу данных сервера. Команда инициализации выглядит таким образом:
curl -Sf -X POST -H «Content-Type: application/json» -d «{ \»url\» : \»jdbc:postgresql://localhost:5432/cs_db\», \»username\» : \» cs_user \», \»password\» : \» cs_pwd \», \»enabled\» : true }» -u admin:admin http://localhost:8087/admin/bucket_server.
-
cs_db — имя базы данных сервера взаимодействия;
-
cs_user — имя пользователя, от имени которого сервер взаимодействия подключается к СУБД.
-
cs_pwd — пароль этого пользователя;
-
admin, admin — имя пользователя и пароль для доступа к интерфейсу обслуживания сервера взаимодействия.
Проверка работоспособности Сервера взаимодействия
Для проверки работоспособности сервера взаимодействия откройте в браузере адрес http://localhost:8087/rs/health.
В случае успешной инициализации сервер вернет ответ следующего вида:
Для подключения собственных баз используется внешняя обработка CollaborationSystemRegister.epf, которая идет в комплекте:
В качестве адреса указывается ws://172.23.64.1:9200.
После подключения можно произвести тестирование обсуждения.
В этом примере описана одна из возможностей сервера взаимодействия. Также можно реализовать обмен файлами, подключить чат бота telegram и интегрироваться с социальной сетью ВКонтакте, что также будет реализовано внутри компании Ортикон.
Содержание:
1. Установка и настройка сервера взаимодействия 1С
2. Настройка сервера системы взаимодействия на WSS подключение
3. Установка и настройка облачного хранилища файлов MinIO
4. Настройка сайта для подключения внешних пользователей системы
5. Подключение системы взаимодействия к платформе 1С: Предприятие
1. Установка и настройка сервера взаимодействия 1С
Первым делом, требуется скачать и установить необходимые дистрибутивы:
1. Postgresql версии 12 https://www.enterprisedb.com/downloads/postgres-postgresql-downloads;
2. Liberica Full JDK 11-ой версии https://releases.1c.ru/version_files?nick=Liberica11FullJDK&ver=11.0.12%2b7;
3. Утилита Openssl https://slproweb.com/download/Win64OpenSSL-3_0_9.msi;
4. Сервер взаимодействия 1С и обработка CollaborationSystemRegister для регистрации сервера взаимодействия 1С https://releases.1c.ru/version_files?nick=CollaborationSystem&ver=23.0.23.
Стоит отметить, что для каждой версии платформы, должна устанавливаться совместимая версия сервера взаимодействия 1С. В моём случае, установлена версия платформы 1С: Предприятие 8.3.23, поэтому должен устанавливаться сервер взаимодействия версии 23.0.23.
Установка postgresql, liberica jdk и openssl проста и не требует подробного разъяснения. Отмечу лишь пару моментов, а именно:
1) Выбор директории при openssl- установке
2) Необходимость запомнить пароль, указываемый для postgres пользователя, во время установки posgtresql
Установка сервера взаимодействия
Чтобы установить сервер взаимодействия 1С, необходимо распаковать дистрибутив из архива и запустить установочный файл 1ce-installer. В открывшемся окне нужно указать директорию, где будет располагаться сервер взаимодействия 1С и все его компоненты, а затем нажать “Установить”
Далее установщик выведет сообщение об успешном завершении инсталляции, нажмём “Готово” для выхода из программы установки
После установки дистрибутивов, необходимо добавить пути к liberika jdk и openssl в переменную среды Path
Также в Windows переменную Path следует добавлять путь к утилите ring, но у меня она добавилась автоматически.
Проверим, что все компоненты сервера взаимодействия установились корректно, отправив в cmd команду:
ring
Должны отобразиться 3 компонента: Сервер взаимодействия, Elasticsearch и Hazelcast.
Создание и настройка базы cs_db в postgresql
Перед выполнением настройки сервера взаимодействия 1C, необходимо создать и настроить базу cs_db в postgresql.
Для создания базы, потребуется воспользоваться программой pgAdmin 4, она устанавливается вместе с postgresql и позволяет работать с СУБД в графическом интерфейсе.
При первом запуске, необходимо установить pgAdmin- пароль
Далее необходимо раскрыть ниспадающий список вкладки “Servers” и подключиться к серверу PostgreSQL 12, введя пароль пользователя postgres, указанный во время установки postgresql
Создадим пользователя cs_user для работы с базой cs_db, нажав ПКМ на вкладке “Login/Group Roles” и выбрав пункты “Create” – “Login/Group Role”
Во вкладке “General” введём имя пользователя
Перейдём во вкладку “Definition”, где укажем пароль для пользователя cs_user
Во вкладке “Privileges” укажем необходимые права, после чего сохраним настройки нажав на “Save”
Создадим базу cs_db для работы с сервером взаимодействия 1С, нажав ПКМ на вкладке “Databases” и выбрав пункты “Create” – “Database”
Введём имя базы во вкладке “General” и сохраним изменения нажав на “Save”
Подключим расширение uuid-ossp, нажав ПКМ на базе cs_db и выбрав пункт “Query Tool”. В открывшемся редакторе введём следующий запрос:
CREATE EXTENSION
IF NOT EXISTS «uuid-ossp»
Отправим запрос, нажав на клавишу F5.
Настройка сервера взаимодействия 1С
Создадим директории и службы сервера взаимодействия, введя в командной строке следующие команды:
ring hazelcast instance
create —dir C:\cs\hc_instance
ring hazelcast
—instance hc_instance service create –stopped
ring elasticsearch
instance create —dir C:\cs\es_instance
ring elasticsearch
—instance es_instance service create —stopped
ring cs instance create
—dir C:\cs\cs_instance
ring cs —instance
cs_instance service create —stopped
Осуществим настройку JDBC драйверов postgresql с помощью следующих команд:
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
cs_user
ring
cs —instance cs_instance jdbc pools —name common set-params —password <пароль_пользователя_cs_user>
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
cs_user
ring
cs —instance cs_instance jdbc pools —name privileged set-params —password <пароль_пользователя_cs_user>
Настроим WebSocket протокол:
ring cs
—instance cs_instance websocket set-params —hostname <доменное_имя>
ring cs
—instance cs_instance websocket set-params —port <порт_сервера_взаимодействия>
“Не забывайте создавать правила для всех указываемых портов в брандмауэре Windows”
Настроим каталог для хранения бэкапов:
ring cs —instance
cs_instance backup set-params —storage C:\cs\cs_instance\dumps
Теперь необходимо запустить службы сервера взаимодействия с помощью команд:
ring
hazelcast —instance hc_instance service start
ring
elasticsearch —instance es_instance service start
ring
cs —instance cs_instance service start
Либо можно сделать это через диспетчер задач, из подменю “Службы”
После настройки сервера взаимодействия 1С, необходимо инициализировать базу данных cs_db, сделать это можно с помощью следующей команды:
curl
-Sf -X POST -H «Content-Type: application/json» -d «{ \»url\»
: \»jdbc:postgresql://localhost:5432/cs_db\», \»username\»
: \»cs_user\», \»password\» : \»<пароль пользователя cs_user>\», \»enabled\»
: true }» -u admin:admin
Пример успешного ответа:
{«id»:»4efdace4-6c60-414e-95cb-19b8dd39b6ff»,»url»:»jdbc:postgresql://localhost:5432/cs_db»,»username»:»cs_user»,»password»:»********»,»lastUsedAt»:null,»enabled»:true,»deleted»:false}
Проверим, что сервер взаимодействия 1С работает с помощью команды:
curl
http://localhost:8087/rs/health
Если всё установлено и настроено корректно, получим следующий ответ:
{«status»:»UP»,»mainDbOk»:true,»allShardsOk»:true,»hazelcast»:{«available»:true,»members»:[«127.0.0.1:5701″]},»elasticsearchOk»:true,»mediaClusterOk»:false,»mediaServers»:{},»pushOk»:false}
Установка и настройка сервера взаимодействия завершена. В том случае, если достаточно WS подключения, и никаких функций кроме обмена сообщениями не требуется, дальнейшие действия можно не выполнять.
2. Настройка сервера системы взаимодействия на WSS подключение
Если подключение к базе осуществляется через https, то и сервер взаимодействия должен работать по защищённому WSS протоколу.
Для настройки WSS подключения, требуется создать хранилище ключей Java KeyStore (JKS) и поместить туда сертификат, оформленный на доменное имя сервера, на котором располагается сервер взаимодействия 1С.
Сертификат можно приобрести или воспользоваться утилитой win-acme, чтобы получить бесплатный SSL сертификат letsencrypt. Для реализации этого метода, требуется создать виртуальный хост, прослушивающий стандартный порт http 80, я создал его с помощью стандартного веб-сервера IIS от Microsoft.
Создание виртуального хоста в веб-сервере IIS
Первым делом, необходимо создать директорию сайта в каталоге веб-сервера IIS C:\inetpub\wwwroot\доменное_имя
Затем, в директории сайта создадим файл index.html и добавим в него следующее содержимое:
<html>
<head>
<title>доменное_имя</title>
</head>
<body>
<h1>Welcome to the
club buddy!</em> </h1>
</body>
</html>
Возвращая простую html страничку, можно будет убедиться в том, что сайт работает.
Для того, чтобы создать виртуальный хост, требуется открыть диспетчер служб IIS и добавить веб-сайт, нажав ПКМ на пункте “сайты”
Далее, необходимо заполнить окно создания веб-сайта следующим образом и нажать “ОК”
Теперь проверим работу сайта, введя имя домена в адресной строке, или нажав кнопку “обзор веб-сайта” на панели действий IIS
Если всё настроено корректно, сайт вернёт созданную нами html страницу.
Получение сертификата с помощью утилиты win-acme
После завершения настройки виртуального хоста, можно приступать к получению сертификата. Скачаем утилиту win-acme по ссылке https://www.win-acme.com/.
После скачивания, необходимо распаковать архив с программой в удобное место. Лично я распаковал win-acme в корневой каталог IIS, создав там папку letsencrypt
Запустим файл wacs.exe от имени администратора и выберем пункт “Create certificate (full options)”, введя “M” в консоли приложения
Выберем пункт “Read bindings from IIS”, чтобы вывести список сайтов из IIS
Далее приложение предложит выбрать сайт из списка или ввести его вручную
Выберем пункт “Pick *all* bindings”, чтобы выбрать все привязки
Подтвердим выбор, нажав на клавишу “y”, а затем проигнорируем предложение ввести дополнительное имя, нажав на “Enter”
Далее выберем пункт “Single certificate”, чтобы создать единый сертификат
Выберем пункт “[http] Save verification files on (network) path”, после чего введём путь к сайту, чтобы создать там файлы для подтверждения владения доменом
Далее приложение предложит выбрать тип ключа, нам нужен “RSA key”
Выберем пункт “PEM encoded files”
Введём путь, где будут храниться файлы сертификата. Я указал путь C:\Certificates
Выберем пункт “Type /paste in console”, и введём в консоли приложения пароль для закрытого ключа.
Запомните или запишите пароль, т.к. он потребуется при дальнейшей настройке наших сервисов на SSL подключение.
Далее приложение спросит, нужно ли сохранить сертификат в другом формате, выберем пункт “ No (additional) store steps”, чтобы оставить только ранее выбранный формат сертификата
На следующем шаге также откажемся от дополнительных действий, выбрав пункт “No (additional) installation steps”
Наконец получим сообщение об успешном создании сертификата
Настройка WSS подключения
Файлы сертификата были сохранены по указанному при создании пути C:\Certificates
Для того, чтобы импортировать файлы chain.pem и key.pem в хранилище ключей JKS, необходимо объединить их в единый файл формата PKCS12. Сделаем это с помощью ранее установленной утилиты openssl.
Откроем командную строку и введём следующие команды:
openssl
pkcs12 -export -in C:\Certificates\koderline-dev.ru-chain.pem -inkey C:\Certificates\koderline-dev.ru-key.pem
-out C:\cs\cs_instance\data\security\pkcs.p12 -name letsencrypt
«При вводе первой команды,
потребуется указать пароль от закрытого ключа, а затем задать пароль для файла pkcs.p12»
keytool
-importkeystore -destkeystore
C:\cs\cs_instance\data\security\websocket-keystore.jks -srckeystore
C:\cs\cs_instance\data\security\pkcs.p12 -srcstoretype PKCS12 -alias
letsencrypt
«При вводе второй, сначала
указываем пароль от файла pkcs.p12, а затем задаём пароль от хранилища JKS»
Первой командой мы объединили файлы сертификата в единый файл pkcs.p12, а второй создали хранилище ключей JKS, сразу импортировав в него получившийся файл.
Настроим сервер взаимодействия на WSS подключение с помощью команд:
ring cs —instance
cs_instance websocket set-params —wss true
ring cs —instance
cs_instance websocket set-params —keystore-path C:\cs\cs_instance\data\security\websocket-keystore.jks
ring cs —instance
cs_instance websocket set-params —keystore-password <пароль_JKS>
ring cs —instance
cs_instance websocket set-params —keystore-format JKS
Теперь подключение сервера взаимодействия 1С будет осуществляться через защищённый WSS протокол.
3. Установка и настройка облачного хранилища файлов MinIO
Для добавления функционала обмена файлами, необходимо настроить облачное хранилище Amazon S3 MinIO, и подключить его к серверу взаимодействия 1С.
Установка хранилища файлов MinIO
Откроем PowerShell от имени администратора и по очереди введём следующие команды:
Invoke-WebRequest
-Uri «https://dl.min.io/server/minio/release/windows-amd64/minio.exe»
-OutFile «C:\Data\minio.exe»
setx
MINIO_ROOT_USER <логин_minio>
setx
MINIO_ROOT_PASSWORD <пароль_minio>
C:\Data\minio.exe
server С:\Data —console-address «:9001»
Чтобы запуск MinIO осуществлялся автоматически, необходимо установить его как службу. Для этого скачаем архив minio-service-master.zip по следующей ссылке https://github.com/minio/minio-service, после чего распакуем его, и скопируем файл install-service.ps1 из папки windows в каталог C:\Data, где установлен сервер MinIO.
Откроем PowerShell и установим службу сервера MinIO с помощью команды:
С:\Data\install-service.ps1
Откроем каталог с установленным сервером MinIO и отредактируем файл minio-service.xml:
<service>
<id>MinIO</id>
<name>MinIO</name>
<description>MinIO is a
high performance object storage server</description>
<executable>minio.exe</executable>
<env
name=»MINIO_ROOT_USER» value=»логин_minio»/>
<env
name=»MINIO_ROOT_PASSWORD» value=»пароль_minio»/>
<arguments>server
C:\Data</arguments>
<logmode>rotate</logmode>
</service>
Теперь можно запустить службу и пользоваться облачным хранилищем, но подключение будет осуществляться через незащищённый http протокол.
Настройка сервера MinIO на SSL подключение
Для того, чтобы включить режим SSL подключения для MinIO, необходимо скопировать файлы сертификата chain.pem и key.pem в каталог C:\Users\имя_пользователя\.minio\certs и переименовать их следующим образом:
chain.pem — public.crt
key.pem — private.key
Отредактируем файл minio-service.xml:
<service>
<id>MinIO</id>
<name>MinIO</name>
<description>MinIO is a
high performance object storage server</description>
<executable>minio.exe</executable>
<env
name=»MINIO_ROOT_USER» value=»логин_minio»/>
<env
name=»MINIO_ROOT_PASSWORD» value=»пароль_minio»/>
<env name=»MINIO_CERT_PASSWD»
value=»пароль_закрытого_ключа_сертификата»/>
<arguments>server C:\Data —address «:порт_minio»</arguments>
<logmode>rotate</logmode>
</service>
В конфигурационный файл сервера была добавлена переменная MINIO_CERT_PASSWD, где задаётся пароль от закрытого ключа для созданного ранее сертификата, и параметр —address для аргумента server, чтобы явно указать порт подключения для сервера MinIO.
Важный момент при настройке SSL подключения для MinIO заключается в том, что служба сервера должна запускаться от имени пользователя, который устанавливал MinIO. Пользователя, в чей каталог были скопированы файлы сертификата. В противном случае, служба MinIO просто не будет запускаться.
Чтобы назначить пользователя, от которого будет запускаться сервис, необходимо перейти в свойства службы MinIO и, во вкладке “Вход в систему”, выбрать нужную учётную запись
После назначения пользователя для запуска сервиса, можно запустить службу и использовать протокол https для подключения к хранилищу.
Подключение хранилища файлов MinIO к серверу взаимодействия
Перед подключением хранилища к серверу взаимодействия, необходимо создать контейнер, где будут храниться передаваемые файлы.
Введём в адресной строке браузера адрес подключения к хранилищу MinIO:
https://<доменное_имя>:<порт_minio>
Авторизуемся с помощью заданных при установке данных, которые также были указаны в переменных MINIO_ROOT_USER и MINIO_ROOT_PASSWORD конфигурационного файла minio-service.xml
Перейдём в раздел “Buckets” и выберем пункт “Create Bucket”. В поле “Bucket Name” укажем имя контейнера cs-bucket, после чего нажмём “Create Bucket” для завершения создания
После создания, необходимо зайти в параметры контейнера и изменить права доступа на “public”
Теперь можно подключить MinIO к серверу взаимодействия. На портале ИТС предлагается сделать это с помощью утилиты curl
Но у меня подключить хранилище таким образом не получилось, я сделал это по аналогии с добавлением расширения uuid-ossp, т.е. отправил следующий SQL запрос в базу cs_db:
INSERT INTO
public.storage_server (id, type, base_url, container_url, container_name,
region, access_key_id, secret_key, signature_version, is_deleted, upload_limit,
download_limit, file_size_limit, created_at, updated_at, cdn_url, cdn_key_id,
cdn_secret_key, state, cdn_enabled, path_style_access_enabled, bytes_to_keep,
days_to_keep, pricing_url, api_type, storage_type, files_to_keep)
VALUES(
uuid_generate_v4(),
‘AMAZON’, ‘https://<доменное_имя>:<порт_minio>’,’https://
<доменное_имя>:<порт_minio>/cs-bucket’,
‘cs-bucket’,
»,
‘логин_ minio’,
‘пароль_minio’,
‘V2’, false,
1073741824, 1073741824, 1048576000, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL,
NULL, NULL, ‘ACTIVE’, false, true, 0, 3200,
NULL,’AMAZON’,’DEFAULT’,1073741824);
Теперь в системе взаимодействия доступен функционал обмена файлами.
4. Настройка сайта для подключения внешних пользователей системы
Для добавления в обсуждения внешних пользователей, необходимо настроить специальный сайт, который устанавливается вместе с сервером взаимодействия и находится по следующему пути C:\Program Files\1C\1CE\components\1c-cs-site-0.2.11-x86_64. Настроим его с помощью веб-сервера IIS и импортируем созданный ранее сертификат, чтобы подключение осуществлялось по https.
Кроме файлов сертификата в pem-формате, утилита win-acme создаёт единый сертификат в pfx формате, и размещает его по следующему пути: C:\ProgramData\win-acme\acme-v02.api.letsencrypt.org\Certificates, я импортировал в IIS именно его.
Для импорта сертификата pfx в IIS, необходим пароль от сертификата. Чтобы узнать его, запустим утилиту win-acme и выберем пункт “Manage renewals”
Далее выберем пункт “Show details for the renewal”, чтобы отобразить детальную информацию об обновляемых сертификатах
Скопируем и сохраним пароль из поля “.pfx password”
На начальной странице сервера в IIS перейдём во вкладку “Сертификаты сервера”, а затем выберем пункт “Импортировать” на панели действий IIS
Заполним окно импорта, указав путь и пароль от сертификата, а также хранилище, в котором будет располагаться сертификат, после чего нажмём “OK”
Создадим сайт по аналогии с виртуальным хостом, заполнив поля следующим образом
Из отличий можно увидеть другое имя сайта. Его, как и порт 9999, можно задавать по желанию, физический путь указан до каталога сайтом 1c-cs-site-0.2.11-x86_64, выбран протокол подключения https и импортированный ранее сертификат.
Проверим работу сайта, введя имя домена с указанным портом в адресной строке, или нажав кнопку ”обзор веб-сайта” на панели действий в IIS
Должна вернуться html страница сайта 1c-cs-site-0.2.11-x86_64.
Отредактируем файл config.json, который находится в каталоге сайта 1c-cs-site-0.2.11-x86_64, указав адрес подключения сервера взаимодействия в поле “serverURL”
{
«serverURL»: «wss://<доменное_имя>:<порт_сервера_взаимодействия>»,
«VAPIDPublicKey»: «****************************************************************»
}
Суть проделанных действий состоит в том, что веб-сервер, при запросе на адрес https://<доменное_имя>:<порт_сайта>, должен отдать index.html сайта 1c-cs-site-0.2.11-x86_64 просто как статику, после чего index.html запустится в браузере пользователя и на базе адреса сервера взаимодействия в config.json сам установит соединение с сервером взаимодействия 1С.
Подключим сайт к серверу взаимодействия:
ring cs —instance
cs_instance site set-params
—public-url https://<доменное_имя>:<порт_сайта>
Теперь в системе взаимодействия доступна функция добавления в обсуждения внешних пользователей.
5. Подключение системы взаимодействия к платформе 1С: Предприятие
Подключение системы взаимодействия осуществляется с помощью обработки CollaborationSystemRegister, загрузка которой была произведена ранее.
Откроем приложение 1С, перейдём во вкладку “Сервис и настройки”, затем выберем ”Файл” – “Открыть”
Откроем обработку CollaborationSystemRegister, а затем выполним подключение, заполнив поля следующим образом
В случае, если WSS подключение не настраивалось, указываем WS протокол для подключения.
Если всё установлено и настроено корректно, получим сообщение об успешной регистрации системы взаимодействия.
Специалист компании «Кодерлайн»
Артем Слатин
Подписывайтесь в соц сетях. Там провожу конкурсы и публикую еще больше контента.
Сервер взаимодействия — что за зверь?
Сервер взаимодействия, система взаимодействия – это механизм, позволяющий взаимодействовать между собой клиентским приложениям, серверу и пользователям одной или нескольких информационных баз.
В состав дистрибутива входят следующие компоненты:
- Сервер системы взаимодействия.
- Распределенное хранилище Hazelcast. В нем хранятся сессии пользователей, подписки на события, очереди.
- Поисковый кластер Elasticsearch. Используется для подбора пользователей и полнотекстового поиска.
Сервер взаимодействия может быть установлен на Windows или Linux. Для операционной системы Windows в дистрибутиве есть программа установки, которая устанавливает все три компонента на один компьютер, и стандартным образом настраивает их. Это самый простой вариант развертывания сервера взаимодействия.
Моя инструкция
Вот и я решил разобраться с этой системой. Сел с утра, скачал официальную версию 1С:Сервер взаимодействия, почитать можете здесь, открыл youtube и посмотрел ролики по установке. Разворачиваю чистую виртуалку и начинаю повторять. Конечно же ничего не получилось.
Ну думаю на ИТС плохого не посоветуют, иду туда, повторяю и конечно же ничего не получается. Скачиваю другую версию, ставлю, опять не хочет. Отключаю хардкор, ставлю по самой простой инструкции, вроде все работает и хрен там. Начинаю пытаться в логах, “курю мануалы”, короче весь день фигней занимаюсь и оказывается на ИТС тоже написано далеко не все.
Запишись на тренинг
РАЗБЕРИСЬ СО ВСЕМИ ВОЗМОЖНОСТЯМИ API TELEGRAM ПРИ РАБОТЕ ИЗ 1С
Может это конечно баг, ну блин там четко написано, установили и дальше можете не читать. После исследования всех конфигурационных файлов я замечаю, что одного нет. То есть инсталлятор его не создал. Создаю его командой из хардкорного мануала и все работает.
В итоге записал видео в котором покажу как установить 1с сервер взаимодействия на windows server 2019. Устанавливать будем сервер взаимодействия версии 8.0.15.
В следующих видео мы рассмотрим различные варианты использования сервера взаимодействия при работе в 1С, в том числе и новую возможность по созданию ботов.
Так что подписывайтесь на канал, ставьте лайк если видео было полезным, а если ставите дизлайк, то обязательно напишите в комментариях почему. Я читаю все комментарии, прислушиваюсь к замечаниям и улучшаю контент для вас.
ring cs --instance cs websocket set-params --hostname localhost
ring cs --instance cs websocket set-params --port 9000http://localhost:8087/rs/health
Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров5.5K
Нюансы установки 1С: Сервера взаимодействия в рабочем контуре на примере CentOS 7, CentOS 8, RedOS 7.3
Украли американские шпионы чертежи МИГ-29.
Собрали у себя, получается паровоз.Снова собрали-опять паровоз!
Ничего понять не могут. Решили сознаваться.
На нашем заводе собирают-стоит МиГ-29!
Спрашивают рабочего:»Как же ты его собрал, по чертежам?»
Он им отвечает:»Внизу, мелкими буквами написано:
«После сборки-обработать напильником!».
©анекдот времен СССР
Руководств как установить 1С: Сервер взаимодействия превеликое множество, как на официальном ресурсе ИТС, так и профильных сайтах.
Однако и эта статья имеет место быть. Поясню почему.
Есть простой вопрос: Вовочке дали два яблока, одно он отдал Машеньке, сколько яблок осталось у Вовочки?
Ответ: одно яблоко, может дать только гуманитарий, технарь ответит, что неизвестно, сколько яблок у Вовочки было изначально.
Так и язык инструкций, либо неизвестно начальное состояние системы, либо затеряется сноска мелким шрифтом, из-за которой затеряется ваш рабочий день.
Инструкции сайта ИТС методически грамотные и приятные глазу, в них единый стиль именования, если хотите культура кода и однозначно, они обязательны к прочтению.
Про них можно сказать уверенно — по ним вы точно не соберете работающий сервер с первого раза.
Есть еще академический язык, отличный курс от преподавателя УЦ 1С Арутюнова Сергея Рафаэльевича.
Там вы закопаетесь в кроличью нору максимально глубоко, однако на промышленную систему из нее не выйдете, уткнувшись в философскую фразу: Здесь вам не курсы по Linux.
К тому же академическое обучение в течении восьми часов дается нелегко.
Как и любое академическое образование, курс в первую очередь учит вас думать,
а не только шашкой махать
. По возможности запишитесь и посмотрите.
На это уйдет три дня по 8+ часов.
Но большинству не хочется такого длинного пути, хочется
немного подумать, немного скопипастить и чтобы все взлетело, отсюда все остальные опусы и мой в том числе.
В части просмотренных мной статей автор то запустит службы из-под рута, по брандмауэр отключит.
В это время грустит один сотрудник службы безопасности, если она есть в вашей компании или совесть, если накатывают воспоминания Win9x.CIH…
Зато радуются +100500 хацкеров. Напрасно думать, что в корпоративной сети их нет. Вы просто не представляете, на что способны скучающие менеджеры по продажам. Если кто не в курсе, то пароль пользователя БД в текущей версии 1С: Сервера взаимодействия лежит в текстовом файле и если это postgres, то безопасности хана.
А хочется, чтобы и быстро и хорошо. Поэтому и пишу эти строки.
Кратко:
Повторив построчно команды из этой публикации вы с очень высокой степенью гарантии получите рабочий 1С: Сервер взаимодействия, который можно использовать в рабочем контуре.
Полностью команды под катом, чтобы не запутаться в простыне текста, далее в публикации будут рассмотрены моменты на которые не заостряется внимание в официальной инструкции ИТС.
Все ссылки внизу статьи.
Установка 1С: Сервер взаимодействия 24 идет на CentOS 7, CentOS 8, RedOS 7.3 облачных серверов одинаковой конфигурации
Одновременно, чтобы
три раза не бегать
рассмотреть все актуальные системы сразу.
В тексте инструкции строки, которые касаются только одной системы будут выделены комментариями, жирным шрифтом показаны отличия от инструкции ИТС.
В каталоге /install лежат установочные пакеты сервера взаимодействия и java загруженные с сайта ИТС
- CentOS 7 — классика, у кого есть доступ на kb.1c.ru, найдет там взятые с боевых контуров инструкции установки, которые сработают, но год выпуска наводит на размышления
- CentOS 8 — уже теплее, но актуальным ядром может похвастаться наш родной
- RedOS 7.3. Не буду здесь разводить дискуссий про отечественного производителя. Его кстати каждый может увидеть в зеркале. Кто не разу не прибивал в печатной форме хардкодом ФИО главного бухгалтера, может кинуть в меня камнем.
Чего не хватает на мой взгляд, это форума поддержки, чтобы не приходилось утекать на stackoverflow.
Те, кто не любит читать буквы, может посмотреть видео
Полный листинг установки:
#осмотреться в отсеках
uname -a
ip addr
# или кто к нему привык ifconfig
#при установке из образа dvd вариант сервер без графической оболочки его не будет
#устанавливаем yum install net-tools -y
hostname
#+CentOS 8
cd /etc/yum.repos.d/
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
#-CentOS 8
yum update -y
#обновляемся
yum install mc -y
#пригодится, если он вам не нужен, то зачем вы читаете эти строки?
#отключаем ipv6
#+CentOS 8, RedOS 7.3
nmtui
#-CentOS 8, RedOS 7.3
#+CentOS 7
echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf
echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf
#-CentOS 7
#установка java
cd /install
yum install *.rpm -y
#установка сервера взаимодействия
tar xvzf *.tar.gz
./1ce-installer-cli install --ignore-signature-warnings
#установка postgresql
#+CentOS 8
dnf module list postgresql
dnf module enable postgresql:12
#-CentOS 8
yum install postgresql-server -y
yum install postgresql-contrib -y
postgresql-setup initdb
systemctl enable postgresql.service --now
systemctl status postgresql.service --now
#+CentOS 7
yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum list -y postgre*-server*
yum install postgresql12-server postgresql12-contrib -y
postgresql-12-setup initdb
systemctl enable postgresql-12.service --now
systemctl status postgresql-12.service
#-CentOS 7
#создание базы postgresql
passwd postgres
su postgres
psql
ALTER USER postgres WITH PASSWORD '123456';
CREATE USER db_user WITH PASSWORD '123456';
CREATE DATABASE cs_db OWNER db_user;
\c cs_db
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
\q
exit
#переключаем ident на md5 для postgresql
cat /var/lib/pgsql/data/pg_hba.conf
perl -i.orig -pE 's/(^host.*127.0.0.1\/32\s+)ident/$1 md5/i' /var/lib/pgsql/data/pg_hba.conf
cat /var/lib/pgsql/data/pg_hba.conf
systemctl restart postgresql.service
systemctl status postgresql.service --no-pager
#+CentOS 7
cat /var/lib/pgsql/12/data/pg_hba.conf
perl -i.orig -pE 's/(^host.*127.0.0.1\/32\s+)ident/$1 md5/i' /var/lib/pgsql/12/data/pg_hba.conf
cat /var/lib/pgsql/12/data/pg_hba.conf
systemctl restart postgresql-12.service
systemctl status postgresql-12.service --no-pager
#-CentOS 7
#в этой точке, чтобы была видна утилита ring желателен
reboot
#но можно
bash
source ~/.bashrc
#или
mc
#проверяем существование и устанавливаем переменную JAVA_HOME
ls /usr/lib/jvm/bellsoft-java11-full.x86_64/
export JAVA_HOME=/usr/lib/jvm/bellsoft-java11-full.x86_64/
#создаем сервисы
useradd hc_user
mkdir -p /var/cs/hc_instance
chown hc_user:hc_user /var/cs/hc_instance
ring hazelcast instance create --dir /var/cs/hc_instance --owner hc_user
ring hazelcast --instance hc_instance service create --username hc_user --stopped --java-home $JAVA_HOME
useradd es_user
mkdir -p /var/cs/es_instance
chown es_user:es_user /var/cs/es_instance
ring elasticsearch instance create --dir /var/cs/es_instance --owner es_user
ring elasticsearch --instance es_instance service create --username es_user --stopped --java-home $JAVA_HOME
useradd cs_user
mkdir -p /var/cs/cs_instance
chown cs_user:cs_user /var/cs/cs_instance
ring cs instance create --dir /var/cs/cs_instance --owner cs_user
ring cs --instance cs_instance service create --username cs_user --stopped --java-home $JAVA_HOME
#прописываем настройки БД
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 db_user
ring cs --instance cs_instance jdbc pools --name common set-params --password '123456'
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 db_user
ring cs --instance cs_instance jdbc pools --name privileged set-params --password '123456'
#прописываем настройки веб-сокета
ring cs --instance cs_instance websocket set-params --hostname <ваше_имя или IP>
ring cs --instance cs_instance websocket set-params --port 9094
ring -l trace -x hazelcast --instance hc_instance service start
ring -l trace -x hazelcast --instance hc_instance service status
#стартуем
#в этой точке если вы нигде не ошиблись при копипасте в CentOS 7 сервис запустится, а в CentOS 8 и RedOS 7.3 нет
#посмотреть ошибки
journalctl -xe --no-pager
#проверяем настройки selinux
getenforse #может отсутствовать
sestatus
#если selinux включен, временно отключаем его
setenforce 0
#стартуем еще раз
systemctl start 1ce-cs_instance
systemctl start 1ce-hc_instance
systemctl start 1ce-es_instance
#проверяем что все запустилось
systemctl status 1ce-cs_instance --no-pager
systemctl status 1ce-hc_instance --no-pager
systemctl status 1ce-es_instance --no-pager
curl http://localhost:8087/rs/health
#если все хорошо то переходим к настройке selinux, понадобится audit2allow, ищем в каком она пакете
#+CentOS 8, RedOS 7.3
setenforce 1
yum provides audit2allow
yum install policycoreutils-python-ххх.ххх -y
systemctl restart 1ce-hc_instance
#создаем правила selinux на основе записей лога
cd /var/cs/cs_instance
grep systemd /var/log/audit/audit.log | audit2allow -M my-systemd
#как вариант ausearch -c 'systemd' --raw | audit2allow -M my-systemd
#применяем созданные правила
semodule -i my-systemd.pp
semodule -R
#проверяем что все запустилось при включенном selinux
systemctl restart 1ce-hc_instance
systemctl restart 1ce-es_instance
systemctl restart 1ce-cs_instance
curl http://localhost:8087/rs/health
#-CentOS 8, RedOS 7.3
#инициализируем БД
curl -Sf -X POST -H "Content-Type: application/json" -d "{ \"url\" : \"jdbc:postgresql://localhost:5432/cs_db\", \"username\" : \"db_user\", \"password\" : \"123456\", \"enabled\" : true }" -u admin:admin http://localhost:8087/admin/bucket_server
#добавляем правила в firewall
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload
#можно подключаться из баз 1С и штатно работать
#бонус 1 - включение wss
#создаем хранилище keystore java
mkdir /var/cs/cs_instance/data/security
cd mkdir /var/cs/cs_instance/data/security
keytool -keystore /var/cs/cs_instance/data/security/websocket-keystore.jks -genkey -alias RedOS-7.3.local
#экспорт приватного ключа из keystore java
keytool -importkeystore -srckeystore /var/cs/cs_instance/data/security/websocket-keystore.jks -srcstorepass 123456 -srckeypass 123456 -srcalias RedOS-7.3.local -destalias RedOS-7.3.local -destkeystore identity.p12 -deststoretype PKCS12 -deststorepass 123456 -destkeypass 123456
openssl pkcs12 -in identity.p12 -nodes -nocerts -out private_key.pem
openssl pkcs12 -in identity.p12 -nokeys -out cert.pem
ring cs --instance <cs_instance> websocket set-params --wss true
ring cs --instance <cs_instance> websocket set-params --keystore-path /var/cs/cs_instance/data/security/websocket-keystore.jks
ring cs --instance <cs_instance> websocket set-params --keystore-password 123456
ring cs --instance <cs_instance> websocket set-params --keystore-format JKS
systemctl restart 1ce-cs_instance
#бонус 2 - приятная глазу утилита мониторинга в замену top
yum install epel-release -y
yum install glances -y
glances
Купила группа РеноНиссан завод АвтоВАЗ.
Перенастроили производство, запускают конвейер.На выходе Жигули!
Демонтируют оборудование, пригнали новое из Японии.Снова Жигули!
Привозят работников из Франции.- Жигули!
Около завода холм, на нём отдыхают бывшие гл. инженер и директор завода.
Инженер директору:
— А я тебе говорил — место проклятое. А ты всё — руки не оттуда растут…
©анекдот.ру
Нюансы установки
Даже чистые системы, только что развернутые в облаке, будут возможно отличаться друг от друга и от установки из образа загруженного с сайта производителя, поскольку их образы заранее подготовили админы, которых в народе зовут системными.
Поэтому в любом случае надо осмотреться, обновить систему, проверить наличие нужных пакетов и отключить ipv6, если вы его не используете.
Создаем отдельного пользователя БД postgres.
su postgres
psql
ALTER USER postgres WITH PASSWORD '123456';
CREATE USER db_user WITH PASSWORD '123456';
CREATE DATABASE cs_db OWNER db_user;
\c cs_db
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
\q
exit
Перед установкой сервисов 1С: Сервера взаимодействия проверяем существование каталога и устанавливаем переменную JAVA_HOME:
export JAVA_HOME=/usr/lib/jvm/bellsoft-java11-full.x86_64/
Далее ее используем в строке создания сервисов.
ring hazelcast --instance hc_instance service create --username hc_user --stopped --java-home $JAVA_HOME
ring elasticsearch --instance es_instance service create --username es_user --stopped --java-home $JAVA_HOME
ring cs --instance cs_instance service create --username cs_user --stopped --java-home $JAVA_HOME
На корпоративе к программисту подошла симпатичная бухгалтерша и предложила:
— Может быть мы уединимся и займемся непозволительным?
-Ух ты! Будем делить на ноль!
обрадовался программист
©анекдот.ру
Можно конечно запустить все службы с правами суперпользователя, отключить брандмауэр, отключить встроенные средства безопасности ОС, для верности записать пароли в текстовый файл и ждать
пока мимо проплывет зарплата
премию…
Да еще пароль везде использовать 123456 
Не забудьте поменять его на надежный при копипасте из листинга публикации!
При включенном selinux сервисы 1С: Сервера взаимодействия запустятся только в CentOS 7, в его старших (младших?) братьях будет таймаут запуска с не совсем информативным сообщением ошибки.
Это отрабатывает selinux.
Если безопасность вам не важна то идем в cd /etc/selinux изменяем в файле config .
SELINUX=enforcing на SELINUX=disabled или SELINUX=permissive
Если здоровье и рассудок вам дороги, то не отключаем selinux, а создаем правила для него.
Понадобится утилита audit2allow.
С ее помощью можно легко преобразовать записи лога файла аудита в правила selinux:
ausearch -c 'systemd' --raw | audit2allow -M my-systemd — так рекомендуют разработчики CentOS.
grep systemd /var/log/audit/audit.log | audit2allow -M my-systemd — такой пример на сайте RedHat и на мой взгляд он отрабатывает лучше.
Остается только применить и перечитать правила:
semodule -i my-systemd.pp
semodule -R
После этого все сервисы запустятся при включенном selinux:
С брандмауэром еще проще:
firewall-cmd --permanent --zone=public --add-port=9094/tcp
firewall-cmd --reload
Для полного фен-шуя остается переключиться на защищенный канал, к тому же, если для доступа к базе 1С используется веб-клиент по HTTPS, то сервер взаимодействия должен использовать протокол WSS в обязательном порядке.
Некоторая проблема в том что админы, откликающиеся на системных, привыкли и будут просить закрытый ключ сгенерированный openssl, а хранилище ключей у вас keystore java, управляемое утилитой keytool.
Сработает такой путь:
Cоздаем хранилище:
mkdir /var/cs/cs_instance/data/security
cd mkdir /var/cs/cs_instance/data/security
keytool -keystore /var/cs/cs_instance/data/security/websocket-keystore.jks -genkey -alias RedOS-7.3.local
RedOS-7.3.local — нужно заменить на ваш алиас, путь к хранилищу — рекомендованный 1С.
Экспортируем и конвертируем закрытый ключ:
keytool -importkeystore -srckeystore /var/cs/cs_instance/data/security/websocket-keystore.jks -srcstorepass 123456 -srckeypass 123456 -srcalias RedOS-7.3.local -destalias RedOS-7.3.local -destkeystore identity.p12 -deststoretype PKCS12 -deststorepass 123456 -destkeypass 123456
openssl pkcs12 -in identity.p12 -nodes -nocerts -out private_key.pem
openssl pkcs12 -in identity.p12 -nokeys -out cert.pem
Любезнейше прошу извинить, за допущенные опечатки.
Кто их найдет или у кого не получится установка по полному листингу, пишите в комментариях или возмущайтесь любым другим образом.
Огромная благодарность облачному провайдеру © Serverspace за предоставленное оборудование, без них видео не получилось бы записать.
Желающие проверить/разобраться во всем самостоятельно, вам предлагается список ссылок:
- 1С: Сервер взаимодействия 24. Тестовая версия Глава 4. Настройка и конфигурирование
- УЦ №1 Курс Администрирование 1С: Предприятия на линукс. Сервер взаимодействия
- Настройка 1С: Сервера взаимодействия и медиасервера
- Руководство для начинающих по SELinux
- keytool — Key and Certificate Management Tool
Надеюсь, статья вам сэкономит больше времени, чем вы потратите на ее прочтение.
И останется минутка поставить плюс или минус.
Система взаимодействия – это механизм внутри «1С», позволяющий организовать взаимодействие сотрудников прямо в базе. 1С: Сервер взаимодействия — это программное обеспечение реализующее серверную часть системы взаимодействия. В сервер взаимодействия входят следующие компоненты:
- Сервер системы взаимодействия
- Распределенное хранилище Hazelcast
- Поисковый кластер Elasticsearch
Установка СУБД PostgreSQL
Добавим официальный репозиторий и устанавливаем PostgreSQL
1 2 3 4 5 6 |
$ sudo apt -y install gnupg2 $ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' $ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - $ sudo apt update $ sudo apt -y install postgresql-15 $ sudo ln -s /usr/lib/postgresql/15/bin/* /usr/sbin/ |
Создаем пользователя, базу, подключаем расширение.
Подключимся к консоли Postgres
1 |
$ sudo -u postgres psql |
Зададим пароль пользователю postgres
1 2 3 |
=# \password postgres Enter new password for user "postgres": passwd Enter it again: |
Создадим пользователя
1 |
=# CREATE USER db_user WITH PASSWORD 'userpass'; |
Создадим базу cs_db
1 |
=# CREATE DATABASE cs_db WITH OWNER = db_user; |
Подключаемся к базе и добавим расширение необходимое для сервера взаимодействия
1 2 3 |
=# \c cs_db =# CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; =# \q |
Установка Java 11
Устанавливаем софт
1 2 |
$ sudo apt install -y default-jdk $ sudo apt install -y default-jre |
1 2 3 4 5 |
$ sudo nano /etc/profile.d/java.sh export PATH=$PATH:/usr/lib/jvm/java-11-openjdk-amd64/bin/ export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/ $ source /etc/profile.d/java.sh |
Установка 1С:Сервер взаимодействия
Закачиваем дистрибутив на сервер, в домашнюю директорию пользователя, распаковываем архив, устанавливаем ПО
1 2 |
$ tar -vxf 1c_cs_24.0.29_linux_x86_64.tar.gz $ sudo ./1ce-installer-cli install --ignore-signature-warnings |
Настраиваем утилиту ring
1 2 3 4 5 6 7 |
$ find / -name ring /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring /opt/1C/1CE/components/1c-cs-hazelcast-3.9.4-24-x86_64/lib/ring /opt/1C/1CE/components/1c-cs-elasticsearch-5.6.12-23-x86_64/lib/ring /opt/1C/1CE/components/1c-cs-server-small-24.0.29-x86_64/lib/ring $ sudo nano /etc/profile.d/ring.sh export PATH=$PATH:/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64 |
Команда ring работает корректно исключительно под пользователем root. Переключаемся на него, продолжаем установку
1 2 3 |
$ sudo su # source /etc/profile.d/java.sh # source /etc/profile.d/ring.sh |
Инициализация сервера взаимодействия 1С
1 2 3 4 5 |
# useradd cs_user # mkdir -p /var/cs/cs_instance # chown cs_user:cs_user /var/cs/cs_instance # ring cs instance create --dir /var/cs/cs_instance --owner cs_user # ring cs --instance cs_instance service create --username cs_user --java-home $JAVA_HOME --stopped |
Инициализация сервера Hazelcast
1 2 3 4 5 |
# useradd hc_user # mkdir -p /var/cs/hc_instance # chown hc_user:hc_user /var/cs/hc_instance # ring hazelcast instance create --dir /var/cs/hc_instance --owner hc_user # ring hazelcast --instance hc_instance service create --username hc_user --java-home $JAVA_HOME --stopped |
Инициализация сервера Elasticsearch
1 2 3 4 5 |
# useradd elastic_user # mkdir -p /var/cs/elastic_instance # chown elastic_user:elastic_user /var/cs/elastic_instance # ring elasticsearch instance create --dir /var/cs/elastic_instance --owner elastic_user # ring elasticsearch --instance elastic_instance service create --username elastic_user --java-home $JAVA_HOME --stopped |
Настройка параметров JDBC драйвера PostgreSQL
1 2 3 4 5 6 |
# 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 db_user # ring cs --instance cs_instance jdbc pools --name common set-params --password userpass # 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 db_user # ring cs --instance cs_instance jdbc pools --name privileged set-params --password userpass |
Настройка WebSocket
1 2 |
# ring cs --instance cs_instance websocket set-params --hostname 192.168.12.25 # ring cs --instance cs_instance websocket set-params --port 8181 |
По очереди включим сервисы сервера взаимодействия 1С
1 2 3 |
# ring elasticsearch --instance elastic_instance service start # ring hazelcast --instance hc_instance service start # ring cs --instance cs_instance service start |
Смотрим статусы
1 2 3 |
# ring cs --instance cs_instance service status # ring hazelcast --instance hc_instance service status # ring elasticsearch --instance elastic_instance service status |
Проверка
1 2 |
# curl http://localhost:8087/rs/health {"status":"UP","mainDbOk":true,"allShardsOk":true,"hazelcast":{"available":true,"members":["127.0.0.1:5701"]},"elasticsearchOk":true,"mediaClusterOk":false,"mediaServers":{},"pushOk":false} |
Инициализация базы данных сервера
1 |
# curl -Sf -X POST -H "Content-Type: application/json" -d "{ \"url\" : \"jdbc:postgresql://localhost:5432/cs_db\", \"username\" : \"db_user\", \"password\" : \"userpass\", \"enabled\" : true }" -u admin:admin http://localhost:8087/admin/bucket_server
|
Пример успешного ответа
1 |
{"id":"242e3b6c-2934-460c-9197-f070e769eee8","url":"jdbc:postgresql://localhost:5432/cs_db","username":"db_user","password":"userpass","lastUsedAt":null,"enabled":true,"deleted":false} |
Установка web-сервера Nginx
Выходим из пользователя root и добавляем ключ репозитория
1 2 |
# exit $ wget --quiet -O - https://nginx.org/keys/nginx_signing.key | sudo apt-key add - |
Добавляем репозиторий Nginx
1 2 3 4 |
$ sudo nano /etc/apt/sources.list.d/nginx.list # NGINX repo deb https://nginx.org/packages/mainline/debian/ bullseye nginx deb-src https://nginx.org/packages/mainline/debian bullseye nginx |
Устанавливаем Nginx
1 2 |
$ sudo apt update $ sudo apt install -y nginx |
Настройка 1С:Сервера взаимодействия для работы по https
В данном примере я использую готовый ssl-сертификат. Но можно установить и настроить утилиту certbot для получения бесплатного ssl-сертификата от Let’s Encrypt. В этом случае данный пункт придется выполнять при перевыпуске сертификата, т.е. раз в 3 месяца
Переключаемся на пользователя root и создаем каталог
1 2 |
$ sudo su # mkdir -p /var/cs/cs_instance/data/security |
Импортируем сертификат и ключ в хранилище JKS. Для этого объединим их в единый файл PKCS12
1 2 3 |
# openssl pkcs12 -export -in server.crt -inkey server.key -out /var/cs/cs_instance/data/security/pkcs.p12 -name wildcard
Enter Export Password: pkcspass
Verifying - Enter Export Password: pkcspass
|
Сгенерируем хранилище ключей JKS с импортированным файлом pkcs.p12
1 2 3 4 |
# keytool -importkeystore -destkeystore /var/cs/cs_instance/data/security/websocket-keystore.jks -srckeystore /var/cs/cs_instance/data/security/pkcs.p12 -srcstoretype PKCS12 -alias wildcard Enter destination keystore password: jkspass Re-enter new password: jkspass Enter source keystore password: pkcspass |
Включим режим защищённого подключения wss
1 2 3 4 5 6 |
# ring cs --instance cs_instance websocket set-params --wss true # ring cs --instance cs_instance websocket set-params --keystore-path /var/cs/cs_instance/data/security/websocket-keystore.jks # ring cs --instance cs_instance websocket set-params --keystore-password jkspass # ring cs --instance cs_instance websocket set-params --keystore-format JKS # ring cs --instance cs_instance websocket list-params |
Настройка https в Nginx
Создаем каталог для сертификатов
1 |
# mkdir -p /etc/nginx/ssl/
|
Сохраняем готовый сертификат и ключ в него
1 |
# mv server.* /etc/nginx/ssl/
|
Генерируем dhparam.pem (процедура идет достаточно долго). dhparam — это простое число, используемое в алгоритме Диффи-Хеллмана для обмена сессионными ключами с клиентом
1 |
# openssl dhparam -out /etc/nginx/ssl/dhparam.pem 4096
|
Создаем конфиг Nginx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# nano /etc/nginx/conf.d/1c-interaction.conf server { listen 80; listen 443 ssl; server_name 1c-interaction.itdraft.ru; charset utf-8; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; ssl_session_timeout 5m; ssl_session_cache shared:SSL:5m; ssl_dhparam /etc/nginx/ssl/dhparam.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-SEED-SHA:DHE-RSA-CAMELLIA128-SHA:HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS'; ssl_prefer_server_ciphers on; if ($scheme != "https") { return 301 https://$host$request_uri; } server_tokens off; root /opt/1C/1CE/components/1c-cs-site-0.2.11-x86_64; index index.html index.htm; access_log /var/log/nginx/1c-interaction_access.log; error_log /var/log/nginx/1c-interaction_error.log; } |
Проверяем конфиг Nginx на валидность и перезапускаем web-сервер
1 2 3 4 |
# nginx -t # nginx -s reload или # systemctl restart nginx |
Отредактируем файл config.json
1 2 3 4 5 |
# nano /opt/1C/1CE/components/1c-cs-site-0.2.11-x86_64/config.json { "serverURL": "wss://1c-interaction.itdraft.ru:8181", "VAPIDPublicKey": "BEYY_t98CbgoqySRFVyTl36Fq2mV44nhw0g27TZMVNyEZAToazA87Hy9s9PK-9XeYN1DrAh8msQuDp_5YvJ5mPM" } |
Параметр VAPIDPublicKey уже был в файле
Вносим изменения в параметр public-url сервера взаимодействия
1 |
# ring cs --instance cs_instance site set-params --public-url https://1c-interaction.itdraft.ru
|
Вносим изменения в настройки WebSocket
1 |
# ring cs --instance cs_instance websocket set-params --hostname 1c-interaction.itdraft.ru
|
Проверяем
1 2 |
# ring cs --instance cs_instance websocket list-params {hostname='1c-interaction.itdraft.ru', port=8181, keystorePath='/var/cs/cs_instance/data/security/websocket-keystore.jks', keystoreFormat='JKS', keystorePassword='jkspass', wss=true, maxHttpContentLength=128 KB, maxFramePayloadLength=128 KB, pingTimeout=60000, pingInterval=25000, bossThreads=0, workerThreads=0} |
По очереди выключаем/включим сервисы сервера взаимодействия 1С
1 2 3 4 5 6 7 8 9 |
# ring cs --instance cs_instance service stop # ring hazelcast --instance hc_instance service stop # ring elasticsearch --instance elastic_instance service stop # ring elasticsearch --instance elastic_instance service start # ring hazelcast --instance hc_instance service start # ring cs --instance cs_instance service start # ring cs --instance cs_instance websocket list-params |
Установка собственного хранилища Minio
Летом 2023 года в Minio были внесены изменения в подсистему безопасности.
Эти изменения пока не учтены в текущих версия “1С:Сервер взаимодействия”.
Для обхода проблемы следует использовать дистрибутивы Minio, выпущенные до лета 2023 года.
Переключаемся на нашего пользователя. Скачиваем дистрибутив Minio, делаем его исполняемым,
1 2 3 4 |
# exit $ wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio.RELEASE.2023-05-04T21-44-30Z $ sudo chmod +x minio.RELEASE.2023-05-04T21-44-30Z $ sudo mv minio.RELEASE.2023-05-04T21-44-30Z /usr/local/bin/minio |
Добавляем системного пользователя, меняем владельца
1 2 |
$ sudo useradd -r minio_user -s /sbin/nologin $ sudo chown minio_user:minio_user /usr/local/bin/minio |
Создадим каталог, в котором Minio будет хранить файлы, меняем владельца каталога
1 2 |
$ sudo mkdir /opt/minio $ sudo chown minio_user:minio_user /opt/minio |
Создаем каталог для конфигурационных файлов, ssl-сертификата для Minio
1 2 |
$ sudo mkdir /etc/minio $ sudo chown minio_user:minio_user /etc/minio |
Создаем конфиг Minio
1 2 3 4 5 6 7 8 9 |
$ sudo nano /etc/default/minio MINIO_ACCESS_KEY=minioadmin MINIO_SECRET_KEY=minioadmin MINIO_ROOT_USER=minioadmin MINIO_ROOT_PASSWORD=minioadmin MINIO_VOLUMES="/opt/minio/" MINIO_OPTS="-C /etc/minio --address :9000 --console-address :9001" MINIO_API_ROOT_ACCESS=on MINIO_SERVER_URL="https://1c-interaction.itdraft.ru:9000" |
Скачиваем файл для создания Systemd Unit для Minio, редактируем его
1 2 3 4 5 6 |
$ curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service $ sudo nano minio.service ... User=minio_user Group=minio_user ... |
Переместим файл minio.service в каталог /etc/system/system
1 |
$ sudo mv minio.service /etc/systemd/system |
Перечитаем все Systemd Unit
1 |
$ sudo systemctl daemon-reload |
Запускаем Minio, добавляем сервис в автозагрузку и проверяем статус
1 2 |
$ sudo systemctl enable --now minio $ sudo systemctl status minio |
Настройка Minio для работы по https и его подключение к серверу взаимодействия 1С
Копируем наш ssl-сертификат и ключ
1 2 |
$ sudo cp /etc/nginx/ssl/server.crt /etc/minio/certs/public.crt $ sudo cp /etc/nginx/ssl/server.key /etc/minio/certs/private.key |
Меняем владельца
1 2 |
$ sudo chown minio_user:minio_user /etc/minio/certs/public.crt $ sudo chown minio_user:minio_user /etc/minio/certs/private.key |
Перезапускаем сервис
1 |
$ sudo systemctl restart minio |
Открываем адрес нашего Minio в браузере
1 |
https://1c-interaction.itdraft.ru:9001 |
Создаем контейнер cs-bucket
1 2 |
Bucket > Create Bucket > Bucket Name: cs-bucket Access Policy: public |
Добавляем параметры подключения к хранилищу Minio в 1С:Сервис взаимодействия
1 |
$ curl -Sf -X POST -H 'Content-Type: application/json' -d '{ "apiType": "AMAZON", "storageType": "DEFAULT", "baseUrl": "https://1c-interaction.itdraft.ru:9000", "containerUrl": "https://1c-interaction.itdraft.ru:9000/${container_name}", "containerName": "cs-bucket", "region": "eu-west-1", "accessKeyId": "minioadmin", "secretKey": "minioadmin", "signatureVersion": "V2", "uploadLimit": 1073741824, "downloadLimit": 1073741824, "fileSizeLimit": 104857600, "bytesToKeep": 104857600, "daysToKeep": 31, "pathStyleAccessEnabled": true }' -u admin:admin http://localhost:8087/admin/storage_server |
UPD 30.07.2024 Обновление ssl сертификатов
- Обновить сертификат для nginx (/etc/nginx/ssl/)
- Обновить сертификат для minio (/etc/minio/certs/)
- Обновить сертификат для сервера взаимодействия
Сделаем резервную копию и объединим сертификат и ключ в единый файл PKCS12
1 2 3 4 5 6 7 |
# cd /var/cs/cs_instance/data/security/ # mv pkcs.p12 pkcs.p12.2024 # mv websocket-keystore.jks websocket-keystore.jks.2024 # cd /etc/nginx/ssl/ # openssl pkcs12 -export -in server.crt -inkey server.key -out /var/cs/cs_instance/data/security/pkcs.p12 -name wildcardgge Enter Export Password: pkcspass Verifying - Enter Export Password: pkcspass |
Сгенерируем хранилище ключей JKS с импортированным файлом pkcs.p12
1 2 3 4 |
# keytool -importkeystore -destkeystore /var/cs/cs_instance/data/security/websocket-keystore.jks -srckeystore /var/cs/cs_instance/data/security/pkcs.p12 -srcstoretype PKCS12 -alias wildcardgge Enter destination keystore password: jkspass Re-enter new password: jkspass Enter source keystore password: pkcspass |
Перезапускаем сервис cs_instance
1 2 3 4 5 |
# source /etc/profile.d/java.sh # source /etc/profile.d/ring.sh # ring cs --instance cs_instance service stop # ring cs --instance cs_instance service start # ring cs --instance cs_instance service status |
