Технологические вопросы крупных внедрений
10.07.2023

Настройка 1С:Сервера взаимодействия и медиасервера

Что необходимо

  1. PostgreSQL – https://releases.1c.ru/project/AddCompPostgre (версия >= 9.5)
  2. Сервер системы взаимодействия - https://releases.1c.ru/project/CollaborationSystem

Минимальный размер оперативной памяти – 4 Гб. 

Для выбора версии сервера рекомендуем воспользоваться таблицей

Версия 1С:Сервера взаимодействия Версия платформы 1С:Предприятие
10.0.47 8.3.19
9.0.34 8.3.18

Установка на «Linux» (на примере CentOS 7)

Установочный образ:
http://isoredirect.centos.org/centos/7/isos/x86_64

  1. Установить Java по инструкции:
    https://bell-sw.com/pages/repositories/#yum
  2. Скачать дистрибутивы (версии могут отличаться):

    Сервер взаимодействия:
    https://releases.1c.ru/version_file?nick=CollaborationSystem&ver=10.0.47&path=CollaborationSystem\10_0_47\1c_cs_10.0.47_linux_x86_64.tar.gz

    PostgreSQL:
    https://releases.1c.ru/version_file?nick=AddCompPostgre&ver=11.5-19.1C&path=AddCompPostgre\11_5_19_1C\postgresql_11.5_19.1C_x86_64_rpm.tar.bz2
    https://releases.1c.ru/additional_file?nick=AddCompPostgre&path=AddCompPostgre\Extrafiles\centos_7.7.1908.x64.tar.gz
     

  3. Распаковать архивы: Копировать в буфер обмена

    $ tar xvzf 1c_cs_10.0.47_linux_x86_64.tar.gz
    $ tar xvjf postgresql_11.5_19.1C_x86_64_rpm.tar.bz2

  4. Установка сервера взаимодействия: Копировать в буфер обмена

    $ sudo ./1ce-installer-cli install

  5. Установка PostgreSQL: Копировать в буфер обмена

    $ sudo rpm -ihv libicu-50.2-3.el7.x86_64.rpm libxslt-1.1.28-5.el7.x86_64.rpm
    $ sudo rpm -ihv postgresql11-1c-11.5-19.el7.x86_64.rpm postgresql11-1c-libs-11.5-19.el7.x86_64.rpm postgresql11-1c-contrib-11.5-19.el7.x86_64.rpm postgresql11-1c-server-11.5-19.el7.x86_64.rpm

  6. Задать пароль “postgres” пользователю postgres: Копировать в буфер обмена

    $ sudo passwd postgres

  7. Запуск PostgreSQL: Копировать в буфер обмена

    $ su postgres
    $ /usr/pgsql-11/bin/initdb -D /var/lib/pgsql/11/data
    $ psql

    postgres=# CREATE DATABASE cs_db;
    postgres=# \c cs_db
    postgres=# CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
    postgres=# \q

    $ exit
    $ sudo systemctl enable postgresql-11
    $ sudo systemctl start postgresql-11

  8. Перейти в root режим Копировать в буфер обмена

    $ su -l

  9. Установить переменную JAVA_HOME: Копировать в буфер обмена

    # export JAVA_HOME=/usr/lib/jvm/bellsoft-java11.x86_64/

  10. Установка сервера взаимодействия  Копировать в буфер обмена

    # useradd cs_user
    # mkdir -p /var/cs/cs_instance
    # chown cs_user:cs_user /var/cs/cs_instance
    # /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs instance create --dir /var/cs/cs_instance --owner cs_user
    # /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs --instance cs_instance service create --username cs_user --java-home $JAVA_HOME --stopped

  11. Инстанс Hazelcast Копировать в буфер обмена

    # useradd hc_user
    # mkdir -p /var/cs/hc_instance
    # chown hc_user:hc_user /var/cs/hc_instance
    # /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring hazelcast instance create --dir /var/cs/hc_instance --owner hc_user
    # /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring hazelcast --instance hc_instance service create --username hc_user --java-home $JAVA_HOME --stopped

  12. Инстанс Elasticsearch Копировать в буфер обмена

    # useradd elastic_user
    # mkdir -p /var/cs/elastic_instance
    # chown elastic_user:elastic_user /var/cs/elastic_instance
    # /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring elasticsearch instance create --dir /var/cs/elastic_instance --owner elastic_user
    # /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring elasticsearch --instance elastic_instance service create --username elastic_user --java-home $JAVA_HOME --stopped

  13. Настройка JDBC: Копировать в буфер обмена

    # /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs --instance cs_instance jdbc pools --name common set-params --url jdbc:postgresql://localhost:5432/cs_db?currentSchema=public
    # /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs --instance cs_instance jdbc pools --name common set-params --username postgres
    # /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs --instance cs_instance jdbc pools --name common set-params --password postgres

    # /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs --instance cs_instance jdbc pools --name privileged set-params --url jdbc:postgresql://localhost:5432/cs_db?currentSchema=public
    # /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs --instance cs_instance jdbc pools --name privileged set-params --username postgres
    # /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs --instance cs_instance jdbc pools --name privileged set-params --password postgres

  14. Настройка WebSocket: Копировать в буфер обмена

    # /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs --instance cs_instance websocket set-params --hostname <сs_host>
    # /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs --instance cs_instance websocket set-params --port 9094
    <cs_host> - имя или IP-адрес компьютера, на котором установлен сервер взаимодействия и к которому будет подключаться клиентское приложение системы взаимодействия (система «1С:Предприятие»).

  15. Запуск Копировать в буфер обмена

    # /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring hazelcast --instance hc_instance service start
    # /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring elasticsearch --instance elastic_instance service start
    # /opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs --instance cs_instance service start

    Проверить, что все запустилось: Копировать в буфер обмена

    # 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,"services":{"available":true,"unsatisfied":[]}}

    При необходимости смотреть логи: Копировать в буфер обмена

    /var/cs/cs_instance/logs/
    /var/cs/hc_instance/logs/
    /var/cs/elastic_instance/logs/

  16. Инициализация базы данных: Копировать в буфер обмена

    # curl -Sf -X POST -H "Content-Type: application/json" -d "{ \"url\" : \"jdbc:postgresql://localhost:5432/cs_db\", \"username\" : \"postgres\", \"password\" : \"postgres\", \"enabled\" : true }" -u admin:admin http://localhost:8087/admin/bucket_server

    Успешный ответ: Копировать в буфер обмена

    {"id":"b844212d-9744-4cb0-9e2a-8377185d8222","url":"jdbc:postgresql://localhost:5432/cs_db","username":"postgres","password":"postgres","lastUsedAt":null,"enabled":true,"deleted":false}

  17. Открыть порт: Копировать в буфер обмена

    # firewall-cmd --zone=public --add-port=9094/tcp --permanent
    # firewall-cmd --reload

Настройка обмена файлами в системе взаимодействия

Для обмена файлами в системе взаимодействия необходимо подключиться на сервере взаимодействия к хранилищу файлов. Хранилище должно поддерживать протокол S3 (V2 или V4).

Можно развернуть собственное хранилище:

  1. Minio

Или подключиться к существующим:

  1. Amazon
  2. Amazon CDN
  3. Google Cloud
  4. Google Cloud CDN
  5. Croc Cloud
  6. Техносерв

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

  1. Собственное хранилище файлов
  2. Внешнее хранилище файлов

Запуск собственного хранилища для обмена файлами

  1. Подготовка хранилища: Копировать в буфер обмена

    $ sudo mkdir -p /opt/minio
    $ sudo chown user:user /opt/minio
    $ sudo mkdir -p /var/minio
    $ sudo chown user:user /var/minio
    $ cd /opt/minio
    $ wget https://dl.min.io/server/minio/release/linux-amd64/minio
    $ sudo chmod +x minio

  2. Открыть порт: Копировать в буфер обмена

    $ sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent
    $ sudo firewall-cmd --reload

  3. Запуск сервера хранилища в качестве службы:
    Пример взят с https://github.com/minio/minio-service/tree/master/linux-systemd

    Для доступа к серверу хранилища, необходимо задать логин и пароль в переменных среды MINIO_ACCESS_KEY и MINIO_SECRET_KEY, соответственно. Чтобы значения этих переменных устанавливалиь при старте, занесем их инициализацию в /etc/default.
    Копировать в буфер обмена

    $ sudo vi /etc/default/minio

    Копировать в буфер обмена

    MINIO_VOLUMES="/var/minio/"
    MINIO_ACCESS_KEY=minio
    MINIO_SECRET_KEY=minio123

    $ sudo vi /etc/systemd/system/minio.service

    [Unit]
    Description=MinIO
    Documentation=https://docs.min.io
    Wants=network-online.target
    After=network-online.target
    AssertFileIsExecutable=/opt/minio/minio

    [Service]
    WorkingDirectory=/usr/local/
    User=user
    Group=user
    EnvironmentFile=/etc/default/minio
    ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
    ExecStart=/opt/minio/minio server $MINIO_OPTS $MINIO_VOLUMES
    Restart=always
    LimitNOFILE=65536
    TimeoutStopSec=infinity
    SendSIGKILL=no

    [Install]
    WantedBy=multi-user.target

    Копировать в буфер обмена

    $ sudo systemctl enable minio.service
    $ sudo systemctl start minio.service

  4. В браузере перейдите по ссылке:

    http://IP-адрес-сервера-хранилища:9000

    Создайте новое хранилище, например cs-bucket

    Логин:  значение переменной MINIO_ACCESS_KEY,
    Пароль: значение переменной MINIO_SECRET_KEY

    Для хранилища укажите, что оно работает в режиме "Read and Write".
     
  5. На сервере взаимодействия выполните команду Копировать в буфер обмена

    $ curl -Sf -X POST -H 'Content-Type: application/json' -d '{ "apiType": "AMAZON", "storageType": "DEFAULT", "baseUrl": "http://ИМЯ СЕРВЕРА ИЛИ IP:9000", "containerUrl": "http://ИМЯ СЕРВЕРА ИЛИ IP:9000/${container_name}", "containerName": "cs-bucket", "region": "eu-west-1", "accessKeyId": "minio", "secretKey": "minio123", "signatureVersion": "V2", "uploadLimit": 1073741824, "downloadLimit": 1073741824, "fileSizeLimit": 104857600, "bytesToKeep": 104857600, "daysToKeep": 31, "pathStyleAccessEnabled": true }' -u admin:admin http://localhost:8087/admin/storage_server

Подключение внешнего хранилища для обмена файлами (опциональный вариант)

В данном примере будет использоваться хранилище Amazon

  1. В браузере открыть ссылку https://console.aws.amazon.com/s3
  2. Войти или создать аккаунт.
  3. Нажать кнопку Create bucket.
  4. Задать имя хранилища, например 1c-cs-bucket-2.
  5. Перейти по ссылке https://console.aws.amazon.com/iam/home
  6. В верхнем правом углу нажать на логин и в выпадающем меню выбрать My Security Credentials.
  7. Раскрыть пункт: Access keys (access key ID and secret access key).
  8. Нажать Create New Access Key.
  9. Нажать Show Access Key.
  10. Скопировать себе Access Key ID и Secret Access Key. Эти данные понадобятся в запросе на добавление хранилища в базу данных.

Если вы планируете работать в web-клиенте, то  необходимо настроить CORS:

  1. Откройте хранилище в браузере (или перейдите по ссылке https://console.aws.amazon.com/s3/buckets/<имя_хранилища>/?region=eu-west-1)
  2. Permissions / CORS Configuration
  3. Настройка с максимальным уровнем доступа:

    <?xml version="1.0" encoding="UTF-8"?>
    <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
    </CORSConfiguration>

     
  4. На сервере взаимодействия выполните команду Копировать в буфер обмена

    $ curl -Sf -X POST -H 'Content-Type: application/json' -d '{ "type": "AMAZON", "baseUrl": "https://s3.amazonaws.com", "containerUrl": "https://${container_name}.s3.${region}.amazonaws.com", "containerName": "Имя хранилища", "region": "eu-west-1", "accessKeyId": "Access Key ID", "secretKey": "Secret Access Key", "signatureVersion": "V4", "uploadLimit": 1073741824, "downloadLimit": 1073741824, "fileSizeLimit": 104857600, "bytesToKeep": 104857600, "daysToKeep": 31, "pathStyleAccessEnabled": false }' -u admin:admin http://localhost:8087/admin/storage_server

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

Для подключения информационной базы необходимо использовать обработку:
https://releases.1c.ru/version_file?nick=CollaborationSystem&ver=10.0.47&path=CollaborationSystem\10_0_47\CollaborationSystemRegister.epf

  

Подключение медиасервера для проведения видеоконференций

Если планируется проведение видеоконференций с большим числом участников (20 и более), то рекомендуется подключить систему взаимодействия к медиасерверу. Это позволит снизить нагрузку на сеть и на CPU во время видеозвонка.   В качестве медиасервера используется доработанный WebRTC Server «Janus» https://janus.conf.meetecho.com/   На компьютере, где будет размещаться медиасервер, необходимо:
  1. Установить git: Копировать в буфер обмена

    $ sudo yum install git

  2. Создать папку сбора дистрибутива Копировать в буфер обмена

    $ mkdir ~/distr
    $ cd ~/distr

  3. Установить пакеты из репозитория Копировать в буфер обмена

    $ sudo yum install epel-release
    $ sudo yum install wget ninja-build meson jansson-devel openssl-devel libsrtp-devel sofia-sip-devel glib2-devel opus-devel libogg-devel libcurl-devel pkgconfig gengetopt libconfig-devel libtool autoconf automake cmake
    $ sudo yum groupinstall 'Development Tools'

  4. Установить пакет libnice Копировать в буфер обмена

    $ cd ~/distr
    $ git clone https://gitlab.freedesktop.org/libnice/libnice.git
    $ cd libnice
    $ meson --prefix=/usr build && ninja -C build && sudo ninja -C build install 

  5. Установить пакет libmicrohttpd-0.9.59-2.el7.x86_64 Копировать в буфер обмена

    $ wget http://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.9.59.tar.gz
    $ tar xvf libmicrohttpd-0.9.59.tar.gz
    $ cd libmicrohttpd-0.9.59
    $ ./configure --libdir=/usr/lib64
    $ make
    $ sudo make install
    $ sudo ldconfig

  6. Установить пакет libsrtp Копировать в буфер обмена

    $ cd ~/distr
    $ wget https://github.com/cisco/libsrtp/archive/v2.2.0.tar.gz
    $ tar xfv v2.2.0.tar.gz
    $ cd libsrtp-2.2.0
    $ ./configure --prefix=/usr --enable-openssl --libdir=/usr/lib64
    $ make shared_library && sudo make install

  7. Установить пакет libwebsockets Копировать в буфер обмена

    $ cd ~/distr
    $ git clone https://libwebsockets.org/repo/libwebsockets
    $ cd libwebsockets
    $ mkdir build
    $ cd build
    $ cmake -DLWS_MAX_SMP=1 -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" -DLIB_SUFFIX=64 ..
    $ make && sudo make install

  8. Установить медиасервер janus от компании 1С Копировать в буфер обмена

    $ cd ~/distr
    $ git clone https://github.com/1C-Company/janus-gateway
    $ cd janus-gateway
    $ sh autogen.sh
    $ ./configure  --disable-data-channels --disable-rabbitmq --disable-mqtt --prefix=/opt/janus --libdir=/usr/lib64
    $ make
    $ sudo make install

  9. Создать файлы настроек Копировать в буфер обмена

    $ cd /opt/janus/etc/janus
    $ sudo cp janus.eventhandler.gelfevh.jcfg.sample janus.eventhandler.gelfevh.jcfg
    $ sudo cp janus.eventhandler.sampleevh.jcfg.sample janus.eventhandler.sampleevh.jcfg
    $ sudo cp janus.eventhandler.wsevh.jcfg.sample janus.eventhandler.wsevh.jcfg
    $ sudo cp janus.jcfg.sample janus.jcfg
    $ sudo cp janus.plugin.audiobridge.jcfg.sample janus.plugin.audiobridge.jcfg
    $ sudo cp janus.plugin.echotest.jcfg.sample janus.plugin.echotest.jcfg
    $ sudo cp janus.plugin.nosip.jcfg.sample janus.plugin.nosip.jcfg
    $ sudo cp janus.plugin.recordplay.jcfg.sample janus.plugin.recordplay.jcfg
    $ sudo cp janus.plugin.streaming.jcfg.sample janus.plugin.streaming.jcfg
    $ sudo cp janus.plugin.textroom.jcfg.sample janus.plugin.textroom.jcfg
    $ sudo cp janus.plugin.videocall.jcfg.sample janus.plugin.videocall.jcfg
    $ sudo cp janus.plugin.videoroom.jcfg.sample janus.plugin.videoroom.jcfg
    $ sudo cp janus.plugin.voicemail.jcfg.sample janus.plugin.voicemail.jcfg
    $ sudo cp janus.transport.http.jcfg.sample janus.transport.http.jcfg
    $ sudo cp janus.transport.pfunix.jcfg.sample janus.transport.pfunix.jcfg

  10. Настройки Janus Копировать в буфер обмена

    $ sudo mkdir /var/log/janus
    $ sudo vi /opt/janus/etc/janus/janus.jcfg

    Копировать в буфер обмена

    admin_secret = пароль администратора
    event_loops = количество ядер
    no_media_timer = 2
    min_nack_queue = 500
    opaqueid_in_api = true
    ignore_mdns = true # если не нужны подключения по локальной сети
    log_to_stdout = false
    log_lo_file = /var/log/janus/janus.log

    Копировать в буфер обмена

    $ sudo vi /opt/janus/etc/janus/janus.plugin.videoroom.jcfg

    Копировать в буфер обмена

    string_ids = true

  11. Запуск janus в качестве службы Копировать в буфер обмена

    $ sudo vi /etc/systemd/system/janus.service
    [Unit]
    Description=Janus WebRTC Server
    After=network.target

    [Service]
    Type=simple
    ExecStart=/opt/janus/bin/janus –o
    Restart=on-abnormal
    LimitNOFILE=65536

    [Install]
    WantedBy=multi-user.target

    $ sudo systemctl enable janus.service
    $ sudo systemctl start janus.service

  12. Открыть порт 8088 и все UDP порты. UDP порты можно ограничить диапазоном, указанном в настройке rtp_port_range (в файле janus.jcfg). Копировать в буфер обмена

    $ sudo firewall-cmd --zone=public --add-port=8088/tcp –permanent
    $ sudo firewall-cmd --zone=public --add-port=0-65535/udp –permanent
    $ sudo firewall-cmd –reload

  13. Подключение медиасервера к системе взаимодействия Копировать в буфер обмена

    $ curl -Sf -X POST -H 'Content-Type: application/json' -d '{ "url": "http://:8088/janus/", "name": "Janus 1", "confereeLimit": 1000, "enabled": true }' -u admin:admin http://localhost:8087/admin/media_server

    mediaserver - имя машины или IP-адрес сервера Janus.

    Успешный ответ:
    {"id":"f4ba9f08-5925-4b71-850b-d353c2ebd38f","name":"Janus 1","url":"http:// :8088/janus/","enabled":true,"confereeLimit":1000,"onlineConferee":0,"lockKey":"MediaServer: f4ba9f08-5925-4b71-850b-d353c2ebd38f","deleted":false}

  14. Настройка видеоконференций в системе взаимодействия
    Копировать в буфер обмена
    $ sudo vi /var/cs/cs_instance/config/video.yml
    video:
      enabled: true
      conference-server-based-member-limit: 34
      conference-server-based-threshold: 3 # Количество участников конференции, после которого используется медиасервер, вместо прямого соединения p2p
      max-bandwidth: 2000
      max-reference-width: 1280
      max-reference-height: 720
      max-reference-fps: 30

Для проверки, что конференция идет через медиасервер, необходимо создать конференцию с числом участников >= значения параметра conference-server-based-threshold. После того, как все участники конференции ответят на звонок, выполнить команду:

Копировать в буфер обмена

$ sudo netstat -antp | grep -i janus

tcp6       0      0 :::8088                 :::*                    LISTEN      1213/janus 
tcp6       0      0 10.10.10.10:8088        10.10.10.10:54688       ESTABLISHED 1213/janus 
tcp6       0      0 10.10.10.10:8088        10.10.10.10:54862       ESTABLISHED 1213/janus
tcp6       0      0 10.10.10.10:8088        10.10.10.10:54872       ESTABLISHED 1213/janus
tcp6       0      0 10.10.10.10:8088        10.10.10.10:54878       ESTABLISHED 1213/janus
 
Число соединений "ESTABLISHED", должно равняться числу участников конференции.