В данном документе описывается автономная инсталляция системы корпоративных коммуникаций Dion с отказоустойчивостью компонентов.
Компоненты системы Dion разделяются на прикладные и инфраструктурные.
Прикладные компоненты включают в себя микросервисы, участвующие в приеме и обработке трафика пользователей, а также во внутренних логических взаимодействиях системы.
Инфраструктурные компоненты включают в себя различные СУБД, а также прочие системы хранения и обработки данных:
Прикладные компоненты разделены по ролям. Компоненты, необходимые для выполнения определенной логической группы операций сгруппированы и предполагают развертывание на одной ВМ.
Состав компонентов, их распределение и взаимодействие по ВМ в рамках стенда представлен на схеме ниже:

Такая группировка позволяет горизонтально масштабировать отдельные логические элементы системы путем дублирования виртуальных машин с необходимыми сущностями, не перерасходуя ресурсы на компоненты, не требующие масштабирования.
Назначение компонентов:
| VM | Компонент | Назначение |
|---|---|---|
| DION.APPS | Nginx | Веб-сервер для обработки запросов клиентов, ответ на healthcheck от балансировщика загрузки |
| FrontendClients | Клиентский интерфейс | |
| FrontendAdmins | Интерфейс административной панели | |
| ApiAdmins | Обработка запросов для работы с административной панелью | |
| SocketsPool | Работа с websocket | |
| PhotosDelivery | Загрузка изображений из базы данных | |
| RecordsDelivery | Загрузка записей контента из базы данных | |
| CallsServer | Звонки точка-точка из мобильных клиентов | |
| APIClients | Обработка запросов для работы клиентского приложения | |
| EventTracker | Мониторинг | |
| Signaling | Работа с сигнальной информацией для вызовов | |
| MediaController | Распределение медиа-ресусрсов | |
| Chat | Работа чатов внутри конференции | |
| AuditWorker | Трекер кликов для аналитики использования сервиса | |
| SMTP Worker | Работа с MTP сервером, отправка писем пользователю | |
| FileBeat | Экспорт логов | |
| NodeExporter | Сбор метрик мониторинга | |
| DION.VIDEO | FrontendVideo | Клиентский интерфейс |
| APIVideo | Обработка запросов для работы сервиса dion.video | |
| RecordsCollector | Забор из базы записей конференции | |
| HLSDelivery | Загрузка видеозаписей для просмотра | |
| HLSConverter | Конвертация видеозаписей в формат для просмотра в dion.video | |
| FileBeat | Экспорт логов | |
| NodeExporter | Сбор метрик мониторинга | |
| DION.MEDIA | SFU | Работа с видео-потоками |
| AudioHub | Работа с аудио-потоками | |
| FileBeat | Экспорт логов | |
| NodeExporter | Сбор метрик мониторинга | |
| DION.SIP | SIPServer | Обработка SIP вызовов |
| SIPTranscoder | Кодирование медиа-потоков для передачи по SIP | |
| SIPTranslator | Кодирование медиа-потоков от SIP | |
| FileBeat | Экспорт логов | |
| NodeExporter | Сбор метрик мониторинга | |
| DION.TURN | TURN | NAT Traversal для медиа-потоков от внешних пользователей |
| FileBeat | Экспорт логов | |
| NodeExporter | Сбор метрик мониторинга | |
| Infra VM | Postgresql | Базы данных приложения |
| S3 | Хранение видео-записей и картинок | |
| Redis | Кэш, хранение данных по сессиям аутентификаций, информация о нагрузке на медиа-ресурсы | |
| Consul | Обнаружение сервисов | |
| Logs VM | Opensearch | |
| Vector | ||
| opensearch-dashboards | ||
| Search guard tlstool | ||
| Monitoring VM | VictoriaMetrics | |
| Grafana |
Для демонстрации функциональных возможностей DION, а также отказоустойчивости и высокой доступности необходимо подготовить инсталляцию, включающую в себя дублированные компоненты.
Стенд в данной конфигурации имеет следующие ограничения:

Администратор, выполняющий установку, должен иметь следующие доступы:
https://git.service.t1-cloud.ru
dionop
На устройство администратора необходимо установить ansible и python3:
https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html
Внимание! Ansible host не может быть установлен на Windows устройство. Администратору нужно воспользоваться устройством под управлением Linux или Mac.
Необходимо установить на виртуальные машины операционную систему и python3.
Предпочтительно использовать Debian OS 10/11 или Ubuntu OS 22.04. О совместимости других операционных систем уточните у аккаунт команды на этапе подготовки к пилоту.
На INFRA VM необходимо выделить по 3 дополнительных диска объемом 30 Гб для работы Minio S3.
DNS сервер должен быть доступен всем элементам на стенде.
Внешние пользователи, участвующие в пилоте, должны иметь возможность разрезолвить соответствующие адреса, указанные в следующих разделах инструкции.
SMTP сервер должен иметь возможность отправить письмо пользователям, участвующим в пилотировании.
Балансировщики нагрузки должны быть прозрачны для прикладных компонентов DION. Persistance не требуется. Healthcheck может быть выполнен по tcp порту 80 (предпочтительно), либо по HTTPS GET.
DION может работать на самоподписанных сертификатах, однако для удобства работы лучше предоставить сертификат от доверенного CA.
Для совершения вызова в DION необходимо выполнить настройки на УпАТС. Должен быть настроен SIP Trunk до SIP VM.
Формат вызова:
где xxxxxxx - семизначный номер конференции DION.
Пользователи, принимающие участие в пилоте, должны быть заведены на контроллер домена, если предполагается использование SSO.
Пользователи должны иметь доступ к своему почтовому ящику.
Требования к аппаратным ресурсам системы DION представлены в таблице ниже.
Требования к ресурсам инфраструктурного окружения не представлены в таблице и должны быть рассчитаны отдельно.
|
Функциональный элемент
|
CPU (шт)* | RAM (GB) | SSD (GB) | Количество мин. (шт) | Комментарий** |
|---|---|---|---|---|---|
| DION.APPS | 16 | 16 | 100 | 2 | Один сервер обслуживает до 5000 активных пользователей |
| DION.MEDIA | 8 | 8 | 100 | 2 | Один сервер обслуживает до 300 активных пользователей с видео |
| DION.INFRA | 16 | 32 | 200 | 3 | |
| DION.TURN | 4 | 4 | 60 | 2 |
Один сервер обслуживает до 2500 активных пользователей |
| DION.VIDEO | 16 | 16 | 100 | 2 | Один сервер обслуживает до 5000 активных пользователей |
| DION.RECORDING | 16 | 32 | 100 | 2 | Один сервер обслуживает до 8 одно- временных конференций с записью |
| DION.SIP | 8 | 8 | 100 | 2 | Один сервер обслуживает до 5 одно-временных SIP вызовов |
| DION.Logs | 8 | 16 | 100 | 1 | Не применимо |
| DION.Monitoring | 8 | 16 | 100 | 1 | Не применимо |
*в пилотной инсталляции допускается переподписка 1:4 без гипертрединга
**элемент не требует горизонтального масштабирования до достижения указанного порога
Для работы стенда необходимо выделить следующие IP адреса.
Адресация балансировщиков нагрузки зависит от допустимого режима работы балансировщика.
| # | Компонент | Адрес | Назначение |
|---|---|---|---|
| 1 | TURN VM 1 | Подключение внешних пользователей во внутренние конференции | |
| 2 | TURN VM 2 | ||
| 3 | APPS VM 1 | Сигналинг, взаимодействие с пользователем, взаимодействие компонент между собой | |
| 4 | APPS VM 2 | ||
| 5 | VIDEO VM 1 | Видео-хостинг | |
| 6 | VIDEO VM 2 | ||
| 7 | SIP VM 1 | SIP вызовы | |
| 8 | SIP VM 2 | ||
| 9 | MEDIA VM 1 | Обработка медиа-трафика | |
| 10 | MEDIA VM 2 | ||
| 11 | RECORDING VM 1 | Запись конференций | |
| 12 | RECORDING VM 2 | ||
| 13 | INFRA VM 1 | Инфраструктурные сервисы (Postgresql, Consul, Minio, Redis) | |
| 14 | INFRA VM 2 | ||
| 15 | INFRA VM 3 | ||
| 16 | LOGS VM | Логирование | |
| 17 | MONITORING VM | Мониторинг | |
| 18 | EXTERNAL LB (может требовать выделения нескольких адресов для разных интерфейсов) | Подключение внешних пользователей к сервису к APPS VM – публичный IP | |
| 19 | INTERNAL LB (может требовать выделения нескольких адресов для разных интерфейсов) | Подключение внутренних пользователей к сервису к APPS VM | |
| 20 | VIP Postgresql | Кластерный адрес Postgresql | |
| 21 | VIP Consul | Кластерный адрес Consul | |
| 22 | VIP Minio | Кластерный адрес Minio | |
| 23 | VIP Redis | Кластерный адрес Redis | |
| 24 | DNS | Внутренний DNS | |
| 25 | NTP | NTP сервер | |
| 26 | Контроллер домена | Для входа через SSO | |
| 27 | ADFS или аналог | Вход через SSO | |
| 28 | SMTP | Отправка писем | |
| 29 | УпАТС | Телефонная станция, способная построить SIP trunk с DION | |
| 30 | SIP терминалы | Может быть несколько | |
| 30 | SIP Load Balancer | Опционально присутствует на стенде, в случае невозможности использовать доменное имя или 2 IP-адреса на УпАТС |
В рамках работы DION будет использовать FQDN, указанные в таблицах ниже.
Эти записи должны быть прописаны на DNS серверах стенда.
Внутренний DNS
| # | Имя | Адрес | Комментарий |
|---|---|---|---|
| 1 | {new_dion_domain} | INTERNAL LB | главная страница, личный кабинет пользователя |
| 2 | conferences-admin.{new_dion_domain} | INTERNAL LB | административная панель |
| 3 | api-admins.{new_dion_domain} | INTERNAL LB | служебный URL |
| 4 | api-clients.{new_dion_domain} | INTERNAL LB | служебный URL |
| 5 | photo-delivery.{new_dion_domain} | INTERNAL LB | служебный URL |
| 6 | sockets-pool.{new_dion_domain} | INTERNAL LB | служебный URL |
| 7 | api-video.{new_dion_domain} | INTERNAL LB | служебный URL |
| 8 | video.{new_dion_domain} | INTERNAL LB | сервис DION Video — видеохостинг |
| 9 | hls-delivery.{new_dion_domain} | INTERNAL LB | служебный URL |
| 10 | static.{new_dion_domain} | INTERNAL LB | служебный URL |
| 11 | Identity provider ADFS или аналог | сервис для организации SSO | |
| 12 | sip.{new_dion_domain} | Адрес SIP LB (если используется), либо два адреса SIP VM | SIP URI |
| 13 | logs.{new_dion_domain} | Адрес Logs VM | доступ к системе логирования |
| 14 | monitoring.{new_dion_domain} | Адрес Monitoring VM | доступ к системе мониторинга |
| 15 | records.{new_dion_domain} | INTERNAL LB | доступ для скачивания записей |
| 16 | api-integration.{new_dion_domain} | INTERNAL LB | доступ к интеграционному API |
Внешний DNS
| # | Имя | Адрес | Комментарий |
|---|---|---|---|
| 1 | {new_dion_domain} | Внешний адрес EXTERNAL LB | главная страница, личный кабинет пользователя |
| 2 | conferences-admin.{new_dion_domain} | Внешний адрес EXTERNAL LB | административная панель |
| 3 | api-admins.{new_dion_domain} | Внешний адрес EXTERNAL LB | служебный URL |
| 4 | api-clients.{new_dion_domain} | Внешний адрес EXTERNAL LB | служебный URL |
| 5 | photo-delivery.{new_dion_domain} | Внешний адрес EXTERNAL LB | служебный URL |
| 6 | sockets-pool.{new_dion_domain} | Внешний адрес EXTERNAL LB | служебный URL |
| 7 | api-video.{new_dion_domain} | Внешний адрес EXTERNAL LB | служебный URL |
| 8 | video.{new_dion_domain} | Внешний адрес EXTERNAL LB | сервис DION Video — видеохостинг |
| 9 | hls-delivery.{new_dion_domain} | Внешний адрес EXTERNAL LB | служебный URL |
| 10 | static.{new_dion_domain} | Внешний адрес EXTERNAL LB | служебный URL |
| 11 | Identity provider ADFS или аналог | сервис для организации SSO | |
| 12 | records.{new_dion_domain} | Внешний адрес EXTERNAL LB | доступ для скачивания записей |
| 13 | api-integration.{new_dion_domain} | Внешний адрес EXTERNAL LB | доступ к интеграционному API |
Прежде, чем перейти к установке, убедитесь, что вы получили от команды DION все необходимые образы.
Если со стенда есть доступ в интернет, убедитесь, что у вас есть путь для скачивания каждого образа из списка прикладных сервисов. Инфраструктурные сервисы устанавливаются через пакетный менеджер системы.
Если доступа в интернет нет, образы и репозиторий со скриптами автоматизации должны быть предоставлены архивом. Проверьте комплектность по списку. Инфраструктурные сервисы устанавливаются пакетным менеджером через сервер репозиториев вашей организации.
Вы можете воспользоваться таблицей ниже, чтобы убедиться в полноте предоставленных сведений:
| # | образ | путь | наличие в архиве | версия |
|---|---|---|---|---|
|
Прикладные сервисы |
||||
| 1 | NGINX_IMG | |||
| 2 | CONSUL_CLIENT_IMG | |||
| 3 | GRPC_BALANCER_IMG | |||
| 4 | FRONTEND_CLIENTS_IMG | |||
| 5 | FRONTEND_ADMINS_IMG | |||
| 6 | FRONTEND_VIDEO_IMG | |||
| 7 | API_CLIENTS_IMG | |||
| 8 | API_ADMINS_IMG | |||
| 9 | API_VIDEO_IMG | |||
| 10 | AUDIT_CONSUMER_IMG | |||
| 11 | MEDIACONTROLLER_IMG | |||
| 12 | SOCKETS_POOL_IMG | |||
| 13 | CHAT_IMG | |||
| 14 | PHOTO_DELIVERY_IMG | |||
| 15 | RECORDER_IMG | |||
| 16 | RECORDS_CONVERTER_IMG | |||
| 17 | RECORD_DELIVERY_IMG | |||
| 18 | SIGNALLING_IMG | |||
| 19 | SFU_IMG | |||
| 20 | AUDIOHUB_IMG | |||
| 21 | TRANSCODER_CONTAINER_NAME | |||
| 22 | SIP_SERVER_IMG | |||
| 23 | TRANSCODER_IMG | |||
| 24 | SIP_TRANSLATOR_IMG | |||
| 25 | HLS_DELIVERY_IMG | |||
| 26 | HLS_CONVERTER_IMG | |||
| 27 | RECORDS_COLLECTOR_IMG | |||
| 28 | SMTP_CONSUMER_IMG | |||
| 29 | API_INTEGRATION | |||
|
Инфраструктурные сервисы |
||||
| 30 | Postgresql | |||
| 31 | Consul | |||
| 32 | Redis | |||
| 33 | Minio | |||
| 34 | OpenSearch | |||
| 35 | Vector | |||
| 36 | opensearch-dashboards | |||
| 37 | Search guard tlstool | |||
| 38 | VictoriaMetrics | |||
| 39 | Grafana | |||
Установка производится в следующем порядке:
1. Установка инфраструктурных сервисов:
2. Применение структуры баз данных
3. Создание S3 Бакетов:
4. Установка прикладных компонентов
Скрипт для развертывания сервиса находится в репозитории:
https://git.service.t1-cloud.ru/vc/on-premise/ansible/postgresql
Для развертывания кластера необходимо проделать следующие действия:
inventories/on-premise/hosts[etcd_cluster]
[balancers]
[master]
[replica]
inventories/on-premise/group_vars/all/main.ymlcluster_vip: {VIP Postgresql} см.Таблица адресации стенда, строка 20;
cluster_vip_redis: {VIP Redis} см.Таблица адресации стенда, строка 23;
cluster_vip_consul: {VIP Consul} см.Таблица адресации стенда, строка 21;
cluster_vip_minio: {VIP Minio} см.Таблица адресации стенда, строка 22;
ansible-playbook -i inventories/on-premise/hosts deploy_pgcluster.yml
Скрипт для развертывания сервиса находится в репозитории:
https://git.service.t1-cloud.ru/vc/on-premise/ansible/redis
Для развертывания кластера необходимо проделать следующие действия:
inventories/on-premise/hosts[redis]{IP INFRA VM 1} см. Таблица адресации стенда, строки 13-15
{IP INFRA VM 2} см. Таблица адресации стенда, строки 13-15
{IP INFRA VM 3} см. Таблица адресации стенда, строки 13-15
[redis-slave]{IP INFRA VM 2} см. Таблица адресации стенда, строки 13-15
{IP INFRA VM 3} см. Таблица адресации стенда, строки 13-15
ansible-playbook -i inventories/on-premise/hosts playbook.yml
Скрипт для развертывания сервиса находится в репозитории:
https://git.service.t1-cloud.ru/vc/on-premise/ansible/consul
Для развертывания кластера необходимо проделать следующие действия:
inventories/on-premise/hosts [consul_instances] {IP INFRA VM 1} см. Таблица адресации стенда, строки 13-15
{IP INFRA VM 2} см. Таблица адресации стенда, строки 13-15
{IP INFRA VM 3} см. Таблица адресации стенда, строки 13-15
Внимание, требуется только замена адресов. Не удаляйте и не изменяйте текст, написанный после адресов!
ansible-playbook -i inventories/on-premise/hosts playbook.yml
Скрипт для развертывания сервиса находится в репозитории:
https://git.service.t1-cloud.ru/vc/on-premise/ansible/minio
Для развертывания кластера необходимо проделать следующие действия:
inventories/on-premise/hosts [minio-server]
{IP INFRA VM 1} см. Таблица адресации стенда, строки 13-15
{IP INFRA VM 2} см. Таблица адресации стенда, строки 13-15
{IP INFRA VM 3} см. Таблица адресации стенда, строки 13-15
ansible-playbook -i inventories/on-premise/hosts playbook.yml
Скрипт для развертывания сервиса находится в репозитории
https://git.service.t1-cloud.ru/vc/on-premise/ansible/opensearch
Для развертывания кластера необходимо проделать следующие действия:
inventories/opensearch/hostsonpremise-infra-0001 ansible_host={IP LOGS VM} ip={IP LOGS VM} roles=data,master dashboards1
ansible_host={IP LOGS VM} ip={IP LOGS VM}
inventories/opensearch/group_vars/all.ymldomain_name: {доменнное имя} – указать доменное имя из таблицы доменных имен (logs.{new_dion_domain})
os_download_url: {путь}
search_guard_tlstool_url: {путь}
ansible-playbook -i inventories/opensearch/hosts opensearch.yml
Скрипт для развертывания сервиса находится в репозитории
https://git.service.t1-cloud.ru/vc/on-premise/ansible/vector
Для развертывания кластера необходимо проделать следующие действия:
inventories/vector/hosts[apps]
onpremise-vm-0001 ansible_host={IP APPS VM 1} #Apps VM Сервисы Apps VM, см. Таблица адресации стенда, строка 3 (APPS VM 1)
onpremise-vm-0002 ansible_host={IP APPS VM 2} #Apps VM Сервисы Apps VM, см. Таблица адресации стенда, строка 4 (APPS VM 2)
[video]
onpremise-vm-0003 ansible_host={IP VIDEO VM 1} #Video VM Сервисы Video VM, см. Таблица адресации стенда, строка 5 (VIDEO VM 1)
onpremise-vm-0004 ansible_host={IP VIDEO VM 2} #Video VM Сервисы Video VM, см. Таблица адресации стенда, строка 6 (VIDEO VM 2)
[infra]
onpremise-vm-0005 ansible_host={IP INFRA VM 1} #Infra VM PostgreSQL (cluster) Redis (cluster) Consul (cluster) MinIO (cluster) ETCd (cluster) HAproxy (LB), см. Таблица адресации стенда, строка 13 (INFRA VM 1)
onpremise-vm-0006 ansible_host={IP INFRA VM 2} #Infra VM PostgreSQL (cluster) Redis (cluster) Consul (cluster) MinIO (cluster) ETCd (cluster) HAproxy (LB), см. Таблица адресации стенда, строка 14 (INFRA VM 2)
onpremise-vm-0007 ansible_host={IP INFRA VM 3} #Infra VM PostgreSQL (cluster) Redis (cluster) Consul (cluster) MinIO (cluster) ETCd (cluster) HAproxy (LB), см. Таблица адресации стенда, строка 15 (INFRA VM 3)
[turn]
onpremise-vm-0008 ansible_host={IP TURN VM 1} #Turn VM Сервисы Turn VM, см. Таблица адресации стенда, строка 1 (TURN VM 1)
onpremise-vm-0009 ansible_host={IP TURN VM 2} #Turn VM Сервисы Turn VM, см. Таблица адресации стенда, строка 2 (TURN VM 2)
[sip]
onpremise-vm-0010 ansible_host={IP SIP VM 1} #Sip VM Сервисы Sip VM, см. Таблица адресации стенда, строка 7 (SIP VM 1)
onpremise-vm-0011 ansible_host={IP SIP VM 2} #Sip VM Сервисы Sip VM, см. Таблица адресации стенда, строка 8 (SIP VM 2)
[media]
onpremise-vm-0012 ansible_host={IP MEDIA VM 1} #Media VM Сервисы Media VM, см. Таблица адресации стенда, строка 9 (MEDIA VM 1)
onpremise-vm-0013 ansible_host={IP MEDIA VM 2} #Media VM Сервисы Media VM, см. Таблица адресации стенда, строка 10 (MEDIA VM 2)
[opensearch]
onpremise-infra-0001 ansible_host={IP LOGS VM} #OpenSearch, см. Таблица адресации стенда, строка 16 (LOGS VM)
[victoria]
onpremise-infra-0002 ansible_host={IP MONITORING VM} #VictoriaMetrics, см Таблица адресации стенда, строка 17 (MONITORING VM)
inventories/vector/group_vars/all.ymlnexus_url: '{путь}'
ansible-playbook -i inventories/vector/hosts vector.yml
Скрипт для развертывания сервиса находится в репозитории:
https://git.service.t1-cloud.ru/vc/on-premise/ansible/monitoring
Для развертывания кластера необходимо проделать следующие действия:
inventories//hosts[all]
onpremise-infra-0002 ansible_host={IP Monitoring VM} ip={IP Monitoring VM}
[victoria]
onpremise-infra-0002 ansible_host={IP Monitoring VM} ip={IP Monitoring VM}
[grafana]
onpremise-infra-0002 ansible_host={IP Monitoring VM} ip={IP Monitoring VM}
inventories/group_vars/ all.ymlраздел в доработке, настройки уточните у аккаунт-команды
ansible-playbook -i inventories/on-premise/hosts deploy_monitoring.yml
Скрипт для развертывания инфраструктурных сервисов находится в репозитории:
https://git.service.t1-cloud.ru/vc/on-premise/ansible/on_dion
Прежде чем начать, склонируйте репозиторий.
Для применения структуры БД необходимо выполнить следующие действия:
cd on_dion/dbschema/
migrations.shhost="{VIP Postrgesql}"- см. Таблица адресации стенда, строка 20
bash migrations.sh
Для работы DION необходимо подготовить S3 хранилище:
https://{VIP Minio} - см. Таблица адресации стенда, строка 22
Логин по умолчанию:
minioadmin
Пароль по умолчанию:
minioadmin
dion-static
dion-records
dion-video
Сразу же сохраните оба созданных ключа в отдельном файле на своей машине!
inventories/on-premise/hosts
on_dion/group_vars/all.yml
ansible-playbook -i inventories/on-premise/hosts playbook.yml
Для развертывания плагина необходимо получить от команды DION файл манифеста и архив plugin.
Плагин можно установить централизовано:
Либо передать манифест пользователям для самостоятельной установки аналогично облачному:
Раздел в доработке
Теперь вам доступны:
https://{IP LOGS VM или доменное имя из таблицы}:5601/
http://{IP MONITORING VM или доменное имя из таблицы}:3000/login