Примеры конфигураций

Примеры конфигураций #

При описании настроек установки SVA, в примерах будут использованы следующие конфигурации:

Запуск в докере локально #

Конфигурация для разворачивания локально в целях тестирования:

  • http сервер с самоподписанными сертификатами на порту 8011
  • адрес контура SVA https://localhost:8011/console/ логин и пароль sadmin
  • janus медиа-шлюз в демо режиме: https://localhost:8443/echotest.html
  • mqtt авторизации, без tls на портах по-умолчанию
    • mqtt: localhost:1883
    • административный интерфейс mqtt: http://localhost:18083, логин и пароль mqtt
  • БД без авторизации и tls на порту по-умолчанию
    • mongodb: localhost:27017
  • все постоянные тома используют docker volumes
  • один телеграм провайдер

Ограничения:

  • работает только на локальном хосте
    • интерфейсы агента и клиента требуется открывать в разных браузерах или один из интерфейсов в том же браузере в режиме “инкогнито”
    • не протестировать мобильные устройства
  • нет особого смысла в настройке и использовании сервиса vc-msg
  • не нужен TURN сервер
.env
COMPOSE_PROJECT_NAME=sva
SVA_VERSION=4.2.12
EMQX_VERSION=5.3.0
JANUS_VERSION=1.1.3
LOGLEVEL=DEBUG
docker-compose.yml
volumes:
  emqx1-data:
  emqx1-etc:
  emqx1-log:
  mongodb-data:
  mongodb-config:
  FileStorage:
  tmpRecStore:
services:
  mqtt:
    image: cr.repo.altuera.ru/sva/prod/emqx:${EMQX_VERSION}
    restart: unless-stopped
    ports:
      - 1883:1883
      - 18083:18083
    environment:
      EMQX_NODE_NAME: emqx@node1
      EMQX_DASHBOARD__Default_USERNAME: mqtt
      EMQX_DASHBOARD__Default_PASSWORD: mqtt
    volumes:
      - emqx1-data:/opt/emqx/data
      - emqx1-etc:/opt/emqx/etc
      - emqx1-log:/opt/emqx/log
  mongo:
    image: cr.repo.altuera.ru/sva/prod/mongodb:${SVA_VERSION}
    restart: unless-stopped
    ports:
      - 27017:27017
    volumes:
      - mongodb-data:/data/db
      - mongodb-config:/data/configdb
  janus1:
    image: cr.repo.altuera.ru/sva/prod/janus:${JANUS_VERSION}
    restart: unless-stopped
    ports:
      - 20000-20020:20000-20020/udp
      - 20000-20020:20000-20020
      - 8080:8080
      - 8443:8443
      - 8088:8088
      - 8089:8089
      - 7088:7088
      - 7889:7889
      - 8188:8188
      - 8989:8989
      - 7188:7188
      - 7989:7989
    environment:
      JANUS_DEMO: true
      JANUS_MQTT: true
    volumes:
      - tmpRecStore:/records
    command:
      - --debug-level=5
      - --rtp-port-range=20000-20020
      - --nat-1-1=127.0.0.1
      - --session-timeout=120
  vc-www:
    image: cr.repo.altuera.ru/sva/prod/vc-www:${SVA_VERSION}
    restart: unless-stopped
    ports:
      - 8010:80
      - 8011:443
    environment:
      VC_WWW_SSL_SITES: localhost
  vc-admin:
    image: cr.repo.altuera.ru/sva/prod/vc-admin:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
  vc-auth:
    image: cr.repo.altuera.ru/sva/prod/vc-auth:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
  vc-license:
    image: cr.repo.altuera.ru/sva/prod/vc-license:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
  vc-server:
    image: cr.repo.altuera.ru/sva/prod/vc-server:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
      VC_SERVER_URL: "https://localhost:8011"
  vc-surl:
    image: cr.repo.altuera.ru/sva/prod/vc-surl:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
  vc-msg:
    image: cr.repo.altuera.ru/sva/prod/vc-msg:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
      VC_MSG__PROVIDERS__TelegramGroup__type: "telegram"
      VC_MSG__PROVIDERS__TelegramGroup__telegram__message_prefix: "Подключись к видео-поддержке url"
      VC_MSG__PROVIDERS__TelegramGroup__telegram__bot__link: "https://t.me/sva_test_bot"
      VC_MSG__PROVIDERS__TelegramGroup__telegram__bot__token: "6773403395:AAHJ-BzvaYK-Psx6jFSu-0ivRDpApSRzY22"
      VC_MSG__PROVIDERS__TelegramGroup__telegram__bot__name: "sva_test_bot"
      VC_MSG__PROVIDERS__TelegramGroup__telegram__bot__username: "sva_test_bot"
      VC_MSG__PROVIDERS__TelegramGroup__telegram__bot__button_text: "Отправить контакт"
      VC_MSG__PROVIDERS__TelegramGroup__telegram__bot__start_message: "Для продолжения работы отправьте Ваш номер телефона"
  vc-fileserver:
    image: cr.repo.altuera.ru/sva/prod/vc-fileserver:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
    volumes:
      - FileStorage:/storage
  vc-geo:
    image: cr.repo.altuera.ru/sva/prod/vc-geo:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
  vc-history:
    image: cr.repo.altuera.ru/sva/prod/vc-history:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
  vc-stat:
    image: cr.repo.altuera.ru/sva/prod/vc-stat:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
  vc-statchart:
    image: cr.repo.altuera.ru/sva/prod/vc-statchart:${SVA_VERSION}
    restart: unless-stopped
  vc-records:
    image: cr.repo.altuera.ru/sva/prod/vc-records:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
    volumes:
      - tmpRecStore:/records
  vc-mediamerge:
    image: cr.repo.altuera.ru/sva/prod/vc-mediamerge:${SVA_VERSION}
    restart: unless-stopped
    volumes:
      - tmpRecStore:/records

Установка SVA на один сервер #

all-in-one.jpg

Пример “продуктивной” конфигурации:

  • Все компоненты на одном сервере в публичном “облаке”
  • CPU: 2
  • RAM: 8 GB
  • один сетевой интерфейс - доступ только через публичный IP
    • с публичным ip 1.10.20.30
    • или есть внутренний ip и используется NAT 1-to-1
  • публичный FQDN: sva.domain.ru (доступ https://sva.domain.ru/console/)
  • размещен за реверс-прокси traefik, сертификаты обслуживаются traefik через ACME
  • все компоненты взаимодействуют между собой внутри сети docker
  • тома подключаются как директории с хоста docker
    • /srv/FileStorage
    • /srv/tmpRecStore
    • /srv/mongodb
    • /srv/acme
  • файл лицензий подключается с хоста docker: /srv/license
  • настроено 2 провайдера сообщений:
    • SMSC (смс)
    • Email
  • настройки firewall (разрешения для входящих соединений):
    • tcp 443 - https сервер
    • tcp, udp 20000-20299 - janus
    • tcp, udp 19001 - TURN сервер

Структура директорий на хосте:

  • /srv/
    • .env файл с переменными окружения для docker compose
    • docker-compose.yml
    • acme/ хранение выпущенных ACME сертификатов для traefik
    • FileStorage/ хранилище файлов для vc-fileserver
    • tmpRecStore/ временное хранилище записей
    • mongodb/ хранение данных БД
    • license/
      • license-file файл лицензии
.env
SVA_VERSION=4.2.12
PUBLIC_IP=1.10.20.30
FQDN=sva.domain.ru
FILESERVER_DIR=/srv/FileStorage
LICENSE_DIR=/srv/license
RECORDS_DIR=/srv/tmpRecStore
MONGODB_DIR=/srv/mongodb
ACME_DIR=/srv/acme
LOGLEVEL=DEBUG
COMPOSE_PROJECT_NAME=sva
EMQX_VERSION=5.3.0
JANUS_VERSION=1.1.3
docker-compose.yml
volumes:
  emqx1-data:
  emqx1-etc:
  emqx1-log:
services:
  mqtt:
    image: cr.repo.altuera.ru/sva/prod/emqx:${EMQX_VERSION}
    restart: unless-stopped
    environment:
      EMQX_NODE_NAME: emqx@node1
    volumes:
      - emqx1-data:/opt/emqx/data
      - emqx1-etc:/opt/emqx/etc
      - emqx1-log:/opt/emqx/log
  mongo:
    image: cr.repo.altuera.ru/sva/prod/mongodb:${SVA_VERSION}
    restart: unless-stopped
    volumes:
      - ${MONGODB_DIR}/data:/data/db
      - ${MONGODB_DIR}/config:/data/configdb
  janus1:
    image: cr.repo.altuera.ru/sva/prod/janus:${JANUS_VERSION}
    restart: unless-stopped
    ports:
      - 20000-20299:20000-20299/udp
      - 20000-20299:20000-20299
    environment:
      JANUS_SERVER_NAME: mgw1
      JANUS_ADMIN_SECRET: janusoverlord
      JANUS_MQTT: true
    volumes:
      - ${RECORDS_DIR}:/records
    command:
      - --debug-level=5
      - --rtp-port-range=20000-20299
      - --nat-1-1=${PUBLIC_IP}
      - --session-timeout=120
  coturn:
    image: cr.repo.altuera.ru/sva/prod/coturn:4.6.2
    restart: unless-stopped
    network_mode: host
    command: [ 
      "-n", 
      "--listening-port=19001",
      "--min-port=49152", 
      "--max-port=65535",
      "--use-auth-secret",
      "--static-auth-secret=secret123",
      "--realm=sva.domain.ru",
      "--fingerprint",
      "--mobility",
      "--no-multicast-peers",
      "--no-cli",
      "--log-file=stdout",
      "--verbose",
    ]
  balancer:
    image: cr.repo.altuera.ru/sva/prod/traefik:2.10.4
    restart: unless-stopped
    ports:
      - 80:80
      - 443:443
    environment:
      TRAEFIK_LOG_LEVEL: INFO
      TRAEFIK_API_DASHBOARD: false
      TRAEFIK_PROVIDERS_DOCKER: true
      TRAEFIK_PROVIDERS_DOCKER_EXPOSEDBYDEFAULT: false
      TRAEFIK_ENTRYPOINTS_HTTP_ADDRESS: :80
      TRAEFIK_ENTRYPOINTS_HTTPS_ADDRESS: :443
      TRAEFIK_ENTRYPOINTS_HTTPS_HTTP_TLS: true
      TRAEFIK_CERTIFICATESRESOLVERS_DEFAULT_ACME_TLSCHALLENGE: true
      TRAEFIK_CERTIFICATESRESOLVERS_DEFAULT_ACME_EMAIL: your.email@domain.ru
      TRAEFIK_CERTIFICATESRESOLVERS_DEFAULT_ACME_STORAGE: /acme/acme.json
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ${ACME_DIR}:/acme
    labels:
      traefik.enable: true
  vc-www:
    image: cr.repo.altuera.ru/sva/prod/vc-www:${SVA_VERSION}
    restart: unless-stopped
    labels:
      traefik.enable: true
      traefik.http.routers.vc-www.entrypoints: https
      traefik.http.routers.vc-www.rule: Host(`${FQDN}`)
      traefik.http.routers.vc-www.tls.certresolver: default
      traefik.http.services.vc-www.loadbalancer.server.port: 80
  vc-admin:
    image: cr.repo.altuera.ru/sva/prod/vc-admin:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
      VC_ADMIN_LOGIN: sadmin
      VC_ADMIN_PASSWORD: sadmin
      VC_ADMIN_COMPANY: SmartVideoAgent
  vc-auth:
    image: cr.repo.altuera.ru/sva/prod/vc-auth:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
  vc-license:
    image: cr.repo.altuera.ru/sva/prod/vc-license:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
    volumes:
      - ${LICENSE_DIR}:/app/license:ro
  vc-server:
    image: cr.repo.altuera.ru/sva/prod/vc-server:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
      VC_SERVER_URL: "https://${FQDN}"
      VC_SERVER_GEO_PROVIDER: "nominatim"
      VC_SERVER_RTCP_SECRET: "secret123"
      VC_SERVER_RTCP_ICE_TRANSPORT_POLICY: "all"
      VC_SERVER_RTCP_SERVERS: >
        turn:${FQDN}:19001        
  vc-surl:
    image: cr.repo.altuera.ru/sva/prod/vc-surl:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
  vc-msg:
    image: cr.repo.altuera.ru/sva/prod/vc-msg:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
      VC_MSG__PROVIDERS__SMSC__type: "smsc-ru-api"
      VC_MSG__PROVIDERS__SMSC__smsc__login: "login"
      VC_MSG__PROVIDERS__SMSC__smsc__psw: "password"
      VC_MSG__PROVIDERS__SMSC__smsc__id: ""
      VC_MSG__PROVIDERS__SMSC__smsc__sender: "SmartVideoAgent"
      VC_MSG__PROVIDERS__SMSC__smsc__tinyurl: 0
      VC_MSG__PROVIDERS__SMSC__smsc__message-prefix: "Подключись к SVA по ссылке: "
      VC_MSG__PROVIDERS__Email__type: "email"
      VC_MSG__PROVIDERS__Email__email__message_subject: "Подключись к SVA"
      VC_MSG__PROVIDERS__Email__email__message_prefix: "Для подключения к Видео-Чату перейди по ссылке: emailUrl"
      VC_MSG__PROVIDERS__Email__smtp__to: "email"
      VC_MSG__PROVIDERS__Email__smtp__from: "no-reply@domain.ru"
      VC_MSG__PROVIDERS__Email__smtp__host: "smtp.yandex.ru"
      VC_MSG__PROVIDERS__Email__smtp__port: "465"
      VC_MSG__PROVIDERS__Email__smtp__login: "no-reply@domain.ru"
      VC_MSG__PROVIDERS__Email__smtp__password: "password"
      VC_MSG__PROVIDERS__Email__smtp__use_ssl: true
      VC_MSG__PROVIDERS__Email__smtp__starttls: true
      VC_MSG__PROVIDERS__Email__smtp__auth: true
      VC_MSG__PROVIDERS__Email__smtp__debug: false
  vc-fileserver:
    image: cr.repo.altuera.ru/sva/prod/vc-fileserver:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
    volumes:
      - ${FILESERVER_DIR}:/storage
  vc-geo:
    image: cr.repo.altuera.ru/sva/prod/vc-geo:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
  vc-history:
    image: cr.repo.altuera.ru/sva/prod/vc-history:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
  vc-stat:
    image: cr.repo.altuera.ru/sva/prod/vc-stat:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
  vc-statchart:
    image: cr.repo.altuera.ru/sva/prod/vc-statchart:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
  vc-records:
    image: cr.repo.altuera.ru/sva/prod/vc-records:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
    volumes:
      - ${RECORDS_DIR}:/records
  vc-mediamerge:
    image: cr.repo.altuera.ru/sva/prod/vc-mediamerge:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
    volumes:
      - ${RECORDS_DIR}:/records

Установка SVA на несколько серверов #

Пример “продуктивной” конфигурации в корпоративной сети.

multihost.jpg

Общие вводные:

  • Доступ из сети Интернет только клиентов
    • публичный IP: 1.10.20.30
    • публичный FQDN: sva.domain.ru
  • Доступ к административному и агентскому интерфейсам только внутри сети:
    • внутренний IP: 192.168.70.41 (Front)
    • внутренний FQDN: sva.domain.local
    • доступ только с ip адресов 10.0.0.0/8 и 192.168.0.0/16
  • mqtt брокер установлен на отдельном хосте с tls и авторизацией (mqttuser/mqttpassword)
  • db развернута на отдельном хосте с tls и авторизацией (dbuser/dbpassword)
  • настроено 2 провайдера сообщений:
    • SMSC (смс)
    • Email
  • развернуто 2 экземпляра janus
  • хранилище файлов подключено как сетевой диск
    • vc-fileserver записывает файлы с UID=1101 и GID=1101
  • настройки firewall (разрешения для входящих соединений):
    • NAT 1-to-1 1.10.20.30 -> 192.168.70.41
    • tcp 443 - https сервер
    • tcp, udp 20000:20599 - janus1, janus2
    • tcp, udp 19001 - TURN сервер
Общий .env файл
SVA_VERSION=4.2.12
PUBLIC_IP=1.10.20.30
PUBLIC_FQDN=sva.domain.ru
INTERNAL_FQDD=sva.domain.local
INTERNAL_IP=192.168.70.41
HOST_FRONT=192.168.70.41
HOST_APP=192.168.70.42
HOST_DB=192.168.70.43
LOGLEVEL=DEBUG
COMPOSE_PROJECT_NAME=sva
EMQX_VERSION=5.3.0
JANUS_VERSION=1.1.3

Front #

Конфигурация:

  • CPU: 2
  • RAM: 4 GB
  • docker engine 23+ (userland-proxy: false)
  • ip: 192.168.70.41

Компоненты:

  • vc-www
  • медиа шлюзы janus:
    • janus1 c портами 20000-20299
    • janus2 c портами 20300-20599
  • coturn TURN сервер на порту 19001
  • vc-records
  • vc-mediamerge

Структура файлов на хосте:

  • /srv/
    • .env файл с переменными окружения для docker compose
    • docker-compose.yml
    • certificates/ директория с сертификатами
      • CA.crt сертификат CA
      • cert.key приватный ключ сертификата сервера
      • cert_fullchain.pem сертификат сервера, intermediateCA сертификат
docker-compose.yml
volumes:
  tmpRecStore:
services:
  vc-www:
    image: cr.repo.altuera.ru/sva/prod/vc-www:${SVA_VERSION}
    restart: unless-stopped
    ports:
      - 443:443
    environment:
      VC_WWW_SSL_SITES: ${PUBLIC_FQDN} ${INTERNAL_FQDN}
      VC_WWW_INTERNAL_ACCESS: 10.0.0.0/8 192.168.0.0/16
      VC_ADMIN_HOST: ${HOST_APP}
      VC_AUTH_HOST: ${HOST_APP}
      VC_SERVER_HOST: ${HOST_APP}
      VC_SURL_HOST: ${HOST_APP}
      VC_MSG_HOST: ${HOST_APP}
      VC_FILESERVER_HOST: ${HOST_APP}
      VC_HISTORY_HOST: ${HOST_APP}
      VC_STAT_HOST: ${HOST_APP}
      VC_STATCHART_HOST: ${HOST_APP}
    volumes:
      - /srv/certificates/cert_fullchain.pem:/srv/cert/${PUBLIC_FQDN}_fullchain.pem:ro
      - /srv/certificates/cert.key:/srv/cert/${PUBLIC_FQDN}.key:ro
      - /srv/certificates/cert_fullchain.pem:/srv/cert/${INTERNAL_FQDN}_fullchain.pem:ro
      - /srv/certificates/cert.key:/srv/cert/${INTERNAL_FQDN}.key:ro
  coturn:
    image: cr.repo.altuera.ru/sva/prod/coturn:4.6.2
    restart: unless-stopped
    network_mode: host
    command: [
      "-n",
      "--listening-port=19001",
      "--min-port=49152",
      "--max-port=65535",
      "--use-auth-secret",
      "--static-auth-secret=secret123",
      "--realm=sva.domain.ru",
      "--fingerprint",
      "--mobility",
      "--no-multicast-peers",
      "--no-cli",
      "--log-file=stdout",
      "--verbose",
    ]
  janus1:
    image: cr.repo.altuera.ru/sva/prod/janus:${JANUS_VERSION}
    ports:
      - 20000-20299:20000-20299/udp
      - 20000-20299:20000-20299
    extra_hosts:
      vc-history: ${HOST_APP}
    environment:
      JANUS_MQTT: true
      MQTT_SERVER_HOST: ${HOST_DB}
      MQTT_SERVER_PORT: 8883
      MQTT_TLS_USE: true
      MQTT_CACERT_PATH: /certificates/CA.crt
      MQTT_USER_NAME: mqttuser
      MQTT_PASSWORD: mqttpassword
    volumes:
      - tmpRecStore:/records
      - /srv/certificates/CA.crt:/certificates/CA.crt:ro
    command:
      - --debug-level=5
      - --rtp-port-range=20000-20299
      - --nat-1-1=${PUBLIC_IP},${INTERNAL_IP}
      - --session-timeout=120
  janus2:
    image: cr.repo.altuera.ru/sva/prod/janus:${JANUS_VERSION}
    ports:
      - 20300-20599:20300-20599/udp
      - 20300-20599:20300-20599
    extra_hosts:
      vc-history: ${HOST_APP}
    environment:
      JANUS_MQTT: true
      MQTT_SERVER_HOST: ${HOST_DB}
      MQTT_SERVER_PORT: 8883
      MQTT_TLS_USE: true
      MQTT_CACERT_PATH: /certificates/CA.crt
      MQTT_USER_NAME: mqttuser
      MQTT_PASSWORD: mqttpassword
    volumes:
      - tmpRecStore:/records
      - /srv/certificates/CA.crt:/certificates/CA.crt:ro
    command:
      - --debug-level=5
      - --rtp-port-range=20300-20599
      - --nat-1-1=${PUBLIC_IP},${INTERNAL_IP}
      - --session-timeout=120
  vc-records:
    image: cr.repo.altuera.ru/sva/prod/vc-records:${SVA_VERSION}
    restart: unless-stopped
    extra_hosts:
      vc-fileserver: ${HOST_APP}
    environment:
      VC_RECORDS_HTTP_TLS_USE: true
      VC_RECORDS_HTTP_CACERT_PATH: /certificates/CA.crt
      LOGLEVEL: ${LOGLEVEL}
      DB_HOST: ${HOST_DB}
      DB_TLS_USE: true
      DB_CACERT_PATH: /certificates/CA.crt
      DB_USER: dbuser
      DB_PASSWORD: dbpassword
      MQTT_SERVER_HOST: ${HOST_DB}
      MQTT_SERVER_PORT: 8883
      MQTT_TLS_USE: true
      MQTT_CACERT_PATH: /certificates/CA.crt
      MQTT_USER_NAME: mqttuser
      MQTT_PASSWORD: mqttpassword
    volumes:
      - tmpRecStore:/records
      - /srv/certificates/CA.crt:/certificates/CA.crt:ro
  vc-mediamerge:
    image: cr.repo.altuera.ru/sva/prod/vc-mediamerge:${SVA_VERSION}
    restart: unless-stopped
    environment:
      MQTT_SERVER_HOST: ${HOST_DB}
      MQTT_SERVER_PORT: 8883
      MQTT_TLS_USE: true
      MQTT_CACERT_PATH: /certificates/CA.crt
      MQTT_USER_NAME: mqttuser
      MQTT_PASSWORD: mqttpassword
    volumes:
      - tmpRecStore:/records
      - /srv/certificates/CA.crt:/certificates/CA.crt:ro

Application #

Конфигурация:

  • CPU: 2
  • RAM: 6 GB
  • docker engine 23+
  • ip: 192.168.70.42

Компоненты:

  • vc-admin
  • vc-auth
  • vc-license
  • vc-server
  • vc-surl
  • vc-msg
  • vc-fileserver
  • vc-geo
  • vc-history
  • vc-stat
  • vc-statchart

Структура файлов на хосте:

  • /srv/
    • .env файл с переменными окружения для docker compose
    • docker-compose.yml
    • certificates/ директория с сертификатами
      • CA.crt сертификат CA
      • cert.key приватный ключ сертификата сервера
      • cert_fullchain.pem сертификат сервера, intermediateCA сертификат
    • license/
      • license-file файл лицензии
docker-compose.yml
volumes:
  FileStorage:
    driver: local
    driver_opts:
      type: nfs4
      o: addr=${HOST_DB},rw
      device: :/exports/FileStorage
services:
  vc-admin:
    image: cr.repo.altuera.ru/sva/prod/vc-admin:${SVA_VERSION}
    restart: unless-stopped
    ports:
      - 9105:9105
    environment:
      LOGLEVEL: ${LOGLEVEL}
      VC_ADMIN_LOGIN: SuperAdmin
      VC_ADMIN_PASSWORD: SuperAdmin1
      VC_ADMIN_COMPANY: SVA
      DB_HOST: ${HOST_DB}
      DB_TLS_USE: true
      DB_CACERT_PATH: /certificates/CA.crt
      DB_USER: dbuser
      DB_PASSWORD: dbpassword
      MQTT_SERVER_HOST: ${HOST_DB}
      MQTT_SERVER_PORT: 8883
      MQTT_TLS_USE: true
      MQTT_CACERT_PATH: /certificates/CA.crt
      MQTT_USER_NAME: mqttuser
      MQTT_PASSWORD: mqttpassword
    volumes:
      - /srv/certificates/CA.crt:/certificates/CA.crt:ro
  vc-auth:
    image: cr.repo.altuera.ru/sva/prod/vc-auth:${SVA_VERSION}
    restart: unless-stopped
    ports:
      - 9101:9101
    environment:
      LOGLEVEL: ${LOGLEVEL}
      DB_HOST: ${HOST_DB}
      DB_TLS_USE: true
      DB_CACERT_PATH: /certificates/CA.crt
      DB_USER: dbuser
      DB_PASSWORD: dbpassword
      MQTT_SERVER_HOST: ${HOST_DB}
      MQTT_SERVER_PORT: 8883
      MQTT_TLS_USE: true
      MQTT_CACERT_PATH: /certificates/CA.crt
      MQTT_USER_NAME: mqttuser
      MQTT_PASSWORD: mqttpassword
    volumes:
      - /srv/certificates/CA.crt:/certificates/CA.crt:ro
  vc-license:
    image: cr.repo.altuera.ru/sva/prod/vc-license:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
      DB_HOST: ${HOST_DB}
      DB_TLS_USE: true
      DB_CACERT_PATH: /certificates/CA.crt
      DB_USER: dbuser
      DB_PASSWORD: dbpassword
      MQTT_SERVER_HOST: ${HOST_DB}
      MQTT_SERVER_PORT: 8883
      MQTT_TLS_USE: true
      MQTT_CACERT_PATH: /certificates/CA.crt
      MQTT_USER_NAME: mqttuser
      MQTT_PASSWORD: mqttpassword
    volumes:
      - /srv/license:/app/license:ro
      - /srv/certificates/CA.crt:/certificates/CA.crt:ro
  vc-server:
    image: cr.repo.altuera.ru/sva/prod/vc-server:${SVA_VERSION}
    restart: unless-stopped
    ports:
      - 9103:9103
    environment:
      LOGLEVEL: ${LOGLEVEL}
      VC_SERVER_URL: "https://${PUBLIC_FQDN}"
      VC_SERVER_GEO_PROVIDER: "nominatim"
      VC_SERVER_RTCP_TTL: 86400
      VC_SERVER_RTCP_SECRET: secret123
      VC_SERVER_RTCP_SERVERS: >
        turn:${PUBLIC_FQDN}:19001        
      DB_HOST: ${HOST_DB}
      DB_TLS_USE: true
      DB_CACERT_PATH: /certificates/CA.crt
      DB_USER: dbuser
      DB_PASSWORD: dbpassword
      MQTT_SERVER_HOST: ${HOST_DB}
      MQTT_SERVER_PORT: 8883
      MQTT_TLS_USE: true
      MQTT_CACERT_PATH: /certificates/CA.crt
      MQTT_USER_NAME: mqttuser
      MQTT_PASSWORD: mqttpassword
    volumes:
      - /srv/certificates/CA.crt:/certificates/CA.crt:ro
  vc-surl:
    image: cr.repo.altuera.ru/sva/prod/vc-surl:${SVA_VERSION}
    restart: unless-stopped
    ports:
      - 9102:9102
    environment:
      LOGLEVEL: ${LOGLEVEL}
      DB_HOST: ${HOST_DB}
      DB_TLS_USE: true
      DB_CACERT_PATH: /certificates/CA.crt
      DB_USER: dbuser
      DB_PASSWORD: dbpassword
      MQTT_SERVER_HOST: ${HOST_DB}
      MQTT_SERVER_PORT: 8883
      MQTT_TLS_USE: true
      MQTT_CACERT_PATH: /certificates/CA.crt
      MQTT_USER_NAME: mqttuser
      MQTT_PASSWORD: mqttpassword
    volumes:
      - /srv/certificates/CA.crt:/certificates/CA.crt:ro
  vc-msg:
    image: cr.repo.altuera.ru/sva/prod/vc-msg:${SVA_VERSION}
    restart: unless-stopped
    ports:
      - 9106:9106
    environment:
      LOGLEVEL: ${LOGLEVEL}
      VC_MSG__PROVIDERS__SMSC__type: "smsc-ru-api"
      VC_MSG__PROVIDERS__SMSC__smsc__login: "login"
      VC_MSG__PROVIDERS__SMSC__smsc__psw: "password"
      VC_MSG__PROVIDERS__SMSC__smsc__id: ""
      VC_MSG__PROVIDERS__SMSC__smsc__sender: "SmartVideoAgent"
      VC_MSG__PROVIDERS__SMSC__smsc__tinyurl: 0
      VC_MSG__PROVIDERS__SMSC__smsc__message-prefix: "Подключись к SVA по ссылке: "
      VC_MSG__PROVIDERS__Email__type: "email"
      VC_MSG__PROVIDERS__Email__email__message_subject: "Подключись к SVA"
      VC_MSG__PROVIDERS__Email__email__message_prefix: "Для подключения к Видео-Чату перейди по ссылке: emailUrl"
      VC_MSG__PROVIDERS__Email__smtp__to: "email"
      VC_MSG__PROVIDERS__Email__smtp__from: "no-reply@domain.ru"
      VC_MSG__PROVIDERS__Email__smtp__host: "smtp.yandex.ru"
      VC_MSG__PROVIDERS__Email__smtp__port: "465"
      VC_MSG__PROVIDERS__Email__smtp__login: "no-reply@domain.ru"
      VC_MSG__PROVIDERS__Email__smtp__password: "password"
      VC_MSG__PROVIDERS__Email__smtp__use_ssl: true
      VC_MSG__PROVIDERS__Email__smtp__starttls: true
      VC_MSG__PROVIDERS__Email__smtp__auth: true
      VC_MSG__PROVIDERS__Email__smtp__debug: false
      DB_HOST: ${HOST_DB}
      DB_TLS_USE: true
      DB_CACERT_PATH: /certificates/CA.crt
      DB_USER: dbuser
      DB_PASSWORD: dbpassword
      MQTT_SERVER_HOST: ${HOST_DB}
      MQTT_SERVER_PORT: 8883
      MQTT_TLS_USE: true
      MQTT_CACERT_PATH: /certificates/CA.crt
      MQTT_USER_NAME: mqttuser
      MQTT_PASSWORD: mqttpassword
    volumes:
      - /srv/certificates/CA.crt:/certificates/CA.crt:ro
  vc-fileserver:
    image: cr.repo.altuera.ru/sva/prod/vc-fileserver:${SVA_VERSION}
    restart: unless-stopped
    ports:
      - 9118:9118
      - 9108:9108
    environment:
      LOGLEVEL: ${LOGLEVEL}
      EUID: 1101
      EGID: 1101
      VC_FILESERVER_HTTP_TLS_USE: true
      VC_FILESERVER_HTTP_CERTFILE: /certificates/cert_fullchain.pem
      VC_FILESERVER_HTTP_KEYFILE: /certificates/cert.key
      DB_HOST: ${HOST_DB}
      DB_TLS_USE: true
      DB_CACERT_PATH: /certificates/CA.crt
      DB_USER: dbuser
      DB_PASSWORD: dbpassword
      MQTT_SERVER_HOST: ${HOST_DB}
      MQTT_SERVER_PORT: 8883
      MQTT_TLS_USE: true
      MQTT_CACERT_PATH: /certificates/CA.crt
      MQTT_USER_NAME: mqttuser
      MQTT_PASSWORD: mqttpassword
    volumes:
      - FileStorage:/storage
      - /srv/certificates/CA.crt:/certificates/CA.crt:ro
      - /srv/certificates/cert_fullchain.pem:/certificates/cert_fullchain.pem:ro
      - /srv/certificates/cert.key:/certificates/cert.key:ro
  vc-geo:
    image: cr.repo.altuera.ru/sva/prod/vc-geo:${SVA_VERSION}
    restart: unless-stopped
    environment:
      LOGLEVEL: ${LOGLEVEL}
      MQTT_SERVER_HOST: ${HOST_DB}
      MQTT_SERVER_PORT: 8883
      MQTT_TLS_USE: true
      MQTT_CACERT_PATH: /certificates/CA.crt
      MQTT_USER_NAME: mqttuser
      MQTT_PASSWORD: mqttpassword
    volumes:
      - /srv/certificates/CA.crt:/certificates/CA.crt:ro
  vc-history:
    image: cr.repo.altuera.ru/sva/prod/vc-history:${SVA_VERSION}
    restart: unless-stopped
    ports:
      - 9107:9107
      - 9117:9117
    environment:
      LOGLEVEL: ${LOGLEVEL}
      DB_HOST: ${HOST_DB}
      DB_TLS_USE: true
      DB_CACERT_PATH: /certificates/CA.crt
      DB_USER: dbuser
      DB_PASSWORD: dbpassword
    volumes:
      - /srv/certificates/CA.crt:/certificates/CA.crt:ro
  vc-stat:
    image: cr.repo.altuera.ru/sva/prod/vc-stat:${SVA_VERSION}
    restart: unless-stopped
    ports:
      - 9104:9104
    environment:
      LOGLEVEL: ${LOGLEVEL}
      DB_HOST: ${HOST_DB}
      DB_TLS_USE: true
      DB_CACERT_PATH: /certificates/CA.crt
      DB_USER: dbuser
      DB_PASSWORD: dbpassword
      MQTT_SERVER_HOST: ${HOST_DB}
      MQTT_SERVER_PORT: 8883
      MQTT_TLS_USE: true
      MQTT_CACERT_PATH: /certificates/CA.crt
      MQTT_USER_NAME: mqttuser
      MQTT_PASSWORD: mqttpassword
    volumes:
      - /srv/certificates/CA.crt:/certificates/CA.crt:ro
  vc-statchart:
    image: cr.repo.altuera.ru/sva/prod/vc-statchart:${SVA_VERSION}
    restart: unless-stopped
    ports:
      - 9113:9113
    environment:
      DB_HOST: ${HOST_DB}
      DB_TLS_USE: true
      DB_CACERT_PATH: /certificates/CA.crt
      DB_USER: dbuser
      DB_PASSWORD: dbpassword
    volumes:
      - /srv/certificates/CA.crt:/certificates/CA.crt:ro

DB #

Конфигурация:

  • CPU: 2
  • RAM: 4 GB
  • docker engine 23+
  • ip: 192.168.70.43

Компоненты:

  • брокер шины mqtt
  • БД mongodb

Структура файлов на хосте:

  • /srv/
    • .env файл с переменными окружения для docker compose
    • docker-compose.yml
    • certificates/ директория с сертификатами
      • CA_fullchain.pem сертификаты CA и intermediateCA
      • cert.crt сертификат сервера
      • cert.key приватный ключ сертификата сервера
      • cert_key_fullchain.pem сертификат и ключ сертификата, intermediateCA сертификат
docker-compose.yml
volumes:
  emqx1-data:
  emqx1-etc:
  emqx1-log:
  mongodb-data:
  mongodb-config:
services:
  mongo:
    image: cr.repo.altuera.ru/sva/prod/mongodb:${SVA_VERSION}
    restart: unless-stopped
    ports:
      - 27017:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: mongo
      MONGO_INITDB_ROOT_PASSWORD: mongo
      DB_USER: dbuser
      DB_PASSWORD: dbpassword
      DB_CACERT_PATH: /certificates/CA_fullchain.pem
    volumes:
      - mongodb-data:/data/db
      - mongodb-config:/data/configdb
      - /srv/certificates:/certificates
    command: [
      "--tlsMode", "requireTLS",
      "--tlsCertificateKeyFile", "/certificates/cert_key_fullchain.pem",
      "--tlsAllowConnectionsWithoutCertificates",
    ]
  mqtt:
    image: cr.repo.altuera.ru/sva/prod/emqx:${EMQX_VERSION}
    restart: unless-stopped
    ports:
      - 8883:8883
      - 18084:18084
    environment:
      EMQX_NODE_NAME: emqx@node1
      EMQX_DASHBOARD__Default_USERNAME: mqtt
      EMQX_DASHBOARD__Default_PASSWORD: mqtt
      EMQX_LISTENERS__SSL__DEFAULT__SSL_OPTIONS__CERTFILE: /certificates/cert.crt
      EMQX_LISTENERS__SSL__DEFAULT__SSL_OPTIONS__KEYFILE: /certificates/cert.key
      EMQX_LISTENERS__SSL__DEFAULT__SSL_OPTIONS__CACERTFILE: /certificates/CA_fullchain.pem
      EMQX_LISTENERS__SSL__DEFAULT__SSL_OPTIONS__VERSIONS: '["tlsv1.3","tlsv1.2"]'
      EMQX_LOG__CONSOLE_HANDLER__LEVEL: info
      EMQX_DASHBOARD__LISTENERS__HTTPS__BIND: 18084
      EMQX_DASHBOARD__LISTENERS__HTTPS__ENABLE: true
      EMQX_DASHBOARD__LISTENERS__HTTPS__CERTFILE: /certificates/cert.crt
      EMQX_DASHBOARD__LISTENERS__HTTPS__KEYFILE: /certificates/cert.key
      EMQX_DASHBOARD__LISTENERS__HTTPS__CACERTFILE: /certificates/CA_fullchain.pem
      EMQX_DASHBOARD__LISTENERS__HTTPS__VERSIONS: '["tlsv1.3","tlsv1.2"]'
    volumes:
      - emqx1-data:/opt/emqx/data
      - emqx1-etc:/opt/emqx/etc
      - emqx1-log:/opt/emqx/log
      - /srv/certificates:/certificates
powered by Altuera