Примеры конфигураций #
При описании настроек установки 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
- mqtt:
- БД без авторизации и tls на порту по-умолчанию
- mongodb:
localhost:27017
- mongodb:
- все постоянные тома используют 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 на один сервер #

Пример “продуктивной” конфигурации:
- Все компоненты на одном сервере в публичном “облаке”
- 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 (смс)
- настройки firewall (разрешения для входящих соединений):
- tcp
443- https сервер - tcp, udp
20000-20299- janus - tcp, udp
19001- TURN сервер
- tcp
Структура директорий на хосте:
/srv/.envфайл с переменными окружения для docker composedocker-compose.ymlacme/хранение выпущенных ACME сертификатов для traefikFileStorage/хранилище файлов дляvc-fileservertmpRecStore/временное хранилище записей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 на несколько серверов #
Пример “продуктивной” конфигурации в корпоративной сети.

Общие вводные:
- Доступ из сети Интернет только клиентов
- публичный IP:
1.10.20.30 - публичный FQDN:
sva.domain.ru
- публичный IP:
- Доступ к административному и агентскому интерфейсам только внутри сети:
- внутренний IP:
192.168.70.41(Front) - внутренний FQDN:
sva.domain.local - доступ только с ip адресов
10.0.0.0/8и192.168.0.0/16
- внутренний IP:
- mqtt брокер установлен на отдельном хосте с tls и авторизацией (
mqttuser/mqttpassword) - db развернута на отдельном хосте с tls и авторизацией (
dbuser/dbpassword) - настроено 2 провайдера сообщений:
- SMSC (смс)
- развернуто 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 сервер
- NAT 1-to-1
Общий .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:
janus1c портами20000-20299janus2c портами20300-20599
coturnTURN сервер на порту19001vc-recordsvc-mediamerge
Структура файлов на хосте:
/srv/.envфайл с переменными окружения для docker composedocker-compose.ymlcertificates/директория с сертификатамиCA.crtсертификат CAcert.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-adminvc-authvc-licensevc-servervc-surlvc-msgvc-fileservervc-geovc-historyvc-statvc-statchart
Структура файлов на хосте:
/srv/.envфайл с переменными окружения для docker composedocker-compose.ymlcertificates/директория с сертификатамиCA.crtсертификат CAcert.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 composedocker-compose.ymlcertificates/директория с сертификатамиCA_fullchain.pemсертификаты CA и intermediateCAcert.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