Описание проекта Azbooka Conf
Azbooka Conf — это веб-приложение, предназначенное для проведения видеоконференций и работы в виртуальных классах, разработанное на базе C#, ASP.NET Core, JavaScript, React и Node.js. Система позволяет преподавателям управлять группами пользователей, проводить видеоконференции, организовывать комнаты для обсуждений, опросы и работу на виртуальной доске.
1. Основные функции системы
1.1 Подсистема ВКС
Azbooka Conf использует WebRTC для передачи аудио- и видеопотоков. Основные функции:
- Захват микрофона и камеры
- Усиление и ослабление звука микрофона
- Подключение внешних устройств (микрофон, камера)
- Демонстрация экрана и окон
- Авторизация через OAuth2.0/OpenID
- Включение/отключение видеопотока и звука
- Сохранение состояния конференции при случайном отключении
1.2 Общее рабочее пространство (ОРП)
ОРП представляет собой интерактивную доску для работы преподавателей и участников:
- Режимы рисования, выбор цвета и толщины маркера
- Добавление текста и фигур
- Комментарии с указанием имени участника
- Сохранение состояния доски при случайном закрытии
1.3 Права доступа
Система позволяет преподавателям управлять правами участников на доступ к различным функциям (микрофон, демонстрация экрана, чат и т.д.).
1.4 Комнаты обсуждения
Функция разделения пользователей на группы для обсуждений:
- Создание комнат и автоматическое распределение участников
- Настройка времени и прав доступа в комнатах
1.5 Опросы
Создание и управление опросами с выбором типа (один или несколько вариантов), настройками анонимности и доступом к результатам.
1.6 Чат
Возможность отправки сообщений и объявлений, управление личными сообщениями между участниками и настройками доступа.
1.7 Сцены
Управление очередью спикеров и назначение докладчиков.
1.8 Заметки
Создание личных заметок участниками конференции до, во время и после мероприятия.
2. Права и лицензирование
Система Azbooka Conf включает уровни доступа для владельца, администратора и модератора с возможностью управления организациями, пользователями и группами.
3. Система планирования
Возможность создавать и управлять событиями, связанными с проведением конференций, с указанием времени, даты и доступных групп, а также календаря с событиями.
4. Системные требования
4.1 Клиентская часть (браузерное приложение)
Минимальные и рекомендуемые требования для пользователей:
Минимальные требования:
- ОС: Windows 10+, macOS 10.13+, Linux, Android 8.0+, iOS 13.0+
- Браузеры: Chrome, Firefox, Edge, Safari (последние две версии)
- Процессор: 2 ядра, 1.5 GHz
- ОЗУ: 2 ГБ
- Разрешение экрана: 1280x720
- Интернет: 5 Мбит/с
Рекомендуемые требования:
- Процессор: 4 ядра, 2.0 GHz
- ОЗУ: 4 ГБ и выше
- Разрешение экрана: 1920x1080
- Интернет: 10 Мбит/с
4.2 Серверная часть
Для размещения серверной части системы, основанной на ASP.NET Core и Node.js, рекомендуется следующий набор ресурсов:
Минимальные требования:
- ОС: Windows Server 2016+, Ubuntu 18.04+, CentOS 7+
- Процессор: 4 ядра, 2.5 GHz
- ОЗУ: 8 ГБ
- Диск: 100 ГБ SSD
- Сеть: 100 Мбит/с
Рекомендуемые требования:
- ОС: Windows Server 2019, Ubuntu 20.04, CentOS 8
- Процессор: 8 ядер, 3.0 GHz
- ОЗУ: 16 ГБ и выше
- Диск: 250 ГБ SSD
- Сеть: 1 Гбит/с
4.3 Сетевые требования
- SSL-сертификат: Для безопасного соединения
- Брандмауэр: Открытые порты для WebRTC (обычно 443 и дополнительные для RTCPeerConnection)
- Стабильное подключение: Поддержка сети без потерь пакетов
4.4 Интеграции и службы
- OAuth2.0/OpenID для авторизации
- Redis или аналогичная система для кеширования данных
- Резервное копирование для сохранности данных конференций и пользователей
5. Архитектура системы
Система Azbooka Conf состоит из нескольких компонентов:
- Сервер WebRTC для аудио- и видеопередачи
- Сервер API для управления правами и авторизацией
- Фронтенд (React) для интерактивного интерфейса
- Базы данных: PostgreSQL, MongoDBдля хранения данных
- Node.js для WebRTC сигналинга
6. Безопасность
- Авторизация через OAuth2.0/OpenID
- SSL-шифрование для защиты данных при передаче
- Резервное копирование данных на сервере
7. Руководство пользователя
Инструкции по настройке и использованию системы включают:
- Настройка рабочего пространства и прав доступа
- Руководство для работы с виртуальной доской, чатами и опросами
- Подключение и управление комнатами обсуждений
8. Поддержка и обновления
Система регулярно обновляется, и поддержка предоставляется разработчиком, чтобы обеспечить устойчивую работу и безопасность приложения.
Приложения
- Лицензии и сертификаты
- Системные требования
- Список технологий
# префикс имени образа (реестр репозиториев)REGISTRY=cr.dev.azbooka-group.com/azbooka/conference/ # префикс имени контейнеров (опционально)PREFIX=conf. # уникальные ключ и секрет# создаются командой: openssl rand -hex 16 API_KEY=7af5c6156d62888072b90eea0388ada3 API_SECRET=5e25dab951fed08391610f917a90f15d # IP-адрес, аннонсируемый SFU-сервером клиентамANNOUNCED_IP=127.0.0.1 # начало/конец диапазона портов, выделяемый SFU-серверомPORT_MIN=40000 PORT_MAX=40050 # URL веб-интерфейса конференции# пример: https://conf.example.com WEB_URL=http://localhost:55103 # URL API-сервера конференций# пример: https://api.conf.example.com API_URL=http://localhost:55104 # URL SFU-сервера конференций# пример: https://sfu.conf.example.com SFU_URL=http://localhost:55105 # todo: дописать для чего эти URLыADMIN_API_URL=https://api.admin.conf.idesk-test.xyz ADMIN_WEB_URL=https://admin.conf.idesk-test.xyz AUTH_URL=https://auth.idesk-test.xyz NOTES_URL=https://notes.idesk-test.xyz #Запуск #Локальный # запуск контейнеров с загрузкой их из репозиториев./compose.sh local up -d # запуск контейнеров с (пере)сборкой./compose.sh local up -d --build # остановка контейнеров./compose.sh local down #Продакшн (пример) #Вход в реестр репозиториев под тестовым пользователем docker login -u conference -p conference cr.dev.azbooka-group.com #Переменные .env # сгенерировать новые командой:# openssl rand -hex 16 API_KEY=7af5c6156d62888072b90eea0388ada3 API_SECRET=5e25dab951fed08391610f917a90f15d # изменить значения, если предполагается доступ# через реверс-прокси# WEB_URL=https://conf.example.com# API_URL=https://api.conf.example.com# SFU_URL=https://sfu.conf.example.com# ANNOUNCED_IP=sfu.conf.example.com WEB_URL=http://localhost:55103 API_URL=http://localhost:55104 SFU_URL=http://localhost:55105 ANNOUNCED_IP=127.0.0.1 PORT_MIN=40000 PORT_MAX=41000 # оставить как естьADMIN_API_URL=https://api.admin.conf.idesk-test.xyz ADMIN_WEB_URL=https://admin.conf.idesk-test.xyz AUTH_URL=https://auth.idesk-test.xyz NOTES_URL=https://notes.idesk-test.xyz REGISTRY=cr.dev.azbooka-group.com/azbooka/conference/PREFIX=conf. #Содержимое docker-compose.yml name: conf services: mongo: container_name: ${PREFIX}mongo image: mongo:6 restart: unless-stopped rabbitmq: image: masstransit/rabbitmq:4 container_name: ${PREFIX}rabbitmq restart: unless-stopped redis: image: redis:7 container_name: ${PREFIX}redis restart: unless-stopped environment: - ALLOW_EMPTY_PASSWORD=yes sfu: image: ${REGISTRY}sfu container_name: ${PREFIX}sfu restart: unless-stopped build: ./src/Services/SFU network_mode: host depends_on: - rabbitmq - api environment: - AMQP_CONNECTION_STRING=amqp://0.0.0.0 - API_TOKEN_SECRET=${API_SECRET} - MEDIASOUP_ANNOUNCED_IP=${ANNOUNCED_IP} - MEDIASOUP_PORT_MIN=${PORT_MIN} - MEDIASOUP_PORT_MAX=${PORT_MAX} - API_CONFERENCE_MANAGEMENT=http://0.0.0.0:55104/v1/sfu/{conferenceId}?apiKey=${API_KEY} api: image: ${REGISTRY}api container_name: ${PREFIX}api restart: unless-stopped build: context: ./src depends_on: - mongo - rabbitmq - redis environment: - Authentication__Authority=${AUTH_URL} - Admin__ApiUrl=${ADMIN_API_URL} - Admin__FrontUrl=${ADMIN_WEB_URL} - SFU__UrlTemplate=${SFU_URL}/{0} - SFU__TokenSecret=${API_SECRET} - SFU__ApiKey=${API_KEY} - Cors__0=${WEB_URL} - KeyValueDatabase__Redis__ConnectionString=redis - MongoDb__ConnectionString=mongodb://mongo - RabbitMq__RabbitMq__Host=amqp://rabbitmq ports: - 55104:55104 web: image: ${REGISTRY}web container_name: ${PREFIX}web restart: unless-stopped build: context: ./src/Web/WebSPA depends_on: - redis - api - sfu environment: - APP_FRONTEND_URL=${WEB_URL} - APP_CONFERENCE_URL=${API_URL} - APP_SIGNALR_HUB_URL=${API_URL}/signalr - APP_EQUIPMENT_SIGNALR_HUB_URL=${API_URL}/equipment-signalr - APP_NOTES_URL=${NOTES_URL}/api/1/ - APP_IDENTITY_URL=${AUTH_URL} ports: - 55103:55103
Схема расположения оборудования в гибридном классе
География присутствия продуктов AZBOOKA