README.md

VideoConnect 0.4.0 — версия, синхронизированная с ВКР

Учебный сетевой ресурс для ВКР по теме «Внедрение сервиса видеоконференцсвязи». Это собственный Django/WebRTC-сервис, а не оболочка над Jitsi/Zoom/CMS.

Автор: Базарнов Никита Викторович
Публичная версия: https://videoconnect.relaxdev.ru/

Что реализовано

  • Python + Django 5.2;
  • HTML5/CSS3/JavaScript + Bootstrap 5.3 без CMS;
  • 10+ публичных страниц, 10+ пунктов меню и breadcrumbs;
  • локальная регистрация/авторизация для учебной версии, три роли;
  • опциональная корпоративная авторизация LDAP/Active Directory без хранения LDAP-пароля;
  • личные кабинеты и собственная административная панель;
  • поиск и фильтрация данных в административных таблицах;
  • массовые административные действия для активации и блокировки учетных записей;
  • создание, изменение и отмена конференций, персональные приглашения и гостевой вход по защищенной ссылке без регистрации;
  • камера, микрофон, выключение устройств, выбор устройств и демонстрация экрана для всех ролей;
  • автоматический главный видеоблок для демонстрации экрана и активного говорящего; зеленая подсветка говорящих;
  • собственный WebRTC signaling через Django JSON API;
  • STUN и опциональный TURN;
  • очередь ICE-кандидатов, heartbeat присутствия, повторное подключение устройств;
  • чат, файлы, история посещаемости;
  • внутренние и почтовые SMTP-уведомления о приглашениях, изменениях и отмене встреч;
  • DOCX/XLSX;
  • PostgreSQL в production и SQLite локально;
  • готовые миграции в репозитории;
  • Dockerfile и конфигурация для RelaxDev;
  • /health/ для проверки доступности.

Локальный запуск Windows

cd C:\VideoConnect
python -m venv .venv
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install -r requirements.txt
python manage.py migrate
python manage.py seed_demo
python manage.py runserver 0.0.0.0:8000

На том же ПК открывайте http://127.0.0.1:8000/ или http://localhost:8000/.

Камера и микрофон на другом ПК по адресу вида http://192.168.x.x:8000 блокируются самим браузером: это ограничение Web API, а не ошибка Django. Для двух разных ПК используйте HTTPS. Production-развертывание RelaxDev сразу дает HTTPS.

Демонстрационные учетные записи

Только после python manage.py seed_demo:

Роль Логин Пароль
Администратор admin AdminVC-2026!
Организатор organizer OrganizerVC-2026!
Участник participant ParticipantVC-2026!

Не запускайте seed_demo в публичном production с этими паролями.

Управление пользователями администратором

В собственной панели администрирования откройте Администрирование → Пользователи. Администратор может:

  • создать новую учетную запись и назначить роль;
  • изменить роль существующего пользователя;
  • заблокировать или разблокировать учетную запись;
  • установить пользователю новый пароль.

Создание учетной записи и смена пароля записываются в журнал аудита. Пароли в открытом виде не хранятся.

Проверка видеосвязи в интернете

  1. Разверните проект на HTTPS.
  2. Организатор создает встречу и оставляет включенным «Разрешить вход гостям по ссылке».
  3. Организатор запускает встречу и копирует гостевую ссылку из карточки или видеокомнаты.
  4. Друг открывает ссылку, вводит только отображаемое имя и подключается без регистрации.
  5. Система автоматически создает внутреннюю гостевую сессию с ролью «Участник» только для этой конференции.
  6. Браузеры обмениваются SDP/ICE через наш Django signaling.
  7. Если прямой P2P-маршрут невозможен, рекомендуется TURN.

TURN

По умолчанию используются публичные STUN-серверы Cloudflare и Google. Этого хватает для многих домашних сетей, но не для всех NAT/Firewall.

Для надежной внешней проверки можно либо задать универсальный REST URL провайдера TURN, либо Cloudflare TURN:

WEBRTC_TURN_CREDENTIALS_URL=<server-side URL выдачи iceServers>
# либо
CLOUDFLARE_TURN_KEY_ID=...
CLOUDFLARE_TURN_API_TOKEN=...

VideoConnect сам получает краткоживущие ICE credentials на серверной стороне и передает клиенту только временные параметры.

Альтернативно можно передать собственный список:

WEBRTC_ICE_SERVERS_JSON=[{"urls":"stun:..."},{"urls":"turns:...","username":"...","credential":"..."}]

Интеграции, описанные в ВКР

LDAP / Active Directory

В учебной конфигурации используется Django Auth. Для рабочей среды включите LDAP_ENABLED=1 и заполните переменные LDAP_* из .env.example. При включенном LDAP локальная регистрация по умолчанию отключается, а пароль пользователя проверяется каталогом и не записывается в локальную БД. Для первичного назначения прикладных ролей можно задать LDAP_ADMIN_USERNAMES и LDAP_ORGANIZER_USERNAMES.

Корпоративная почта

Для отправки приглашений и уведомлений задайте EMAIL_HOST, порт, режим TLS/SSL, учетные данные и DEFAULT_FROM_EMAIL, затем включите CONFERENCE_EMAIL_NOTIFICATIONS_ENABLED=1. Ошибка SMTP не отменяет сохраненную конференцию или приглашение и фиксируется в журнале.

Соответствие тексту ВКР

Карта соответствия требований и исходного кода находится в docs/WKR_TRACEABILITY.md. Техническое задание, 32 приемочных сценария и руководства пользователя/администратора синхронизированы с приложениями ВКР.

Production / RelaxDev

Полная инструкция: docs/DEPLOY_RELAXDEV.md.

Основные переменные:

DJANGO_DEBUG=0
DJANGO_SECRET_KEY=<случайный длинный ключ>
DJANGO_ALLOWED_HOSTS=<project>.relaxdev.ru
DJANGO_CSRF_TRUSTED_ORIGINS=https://<project>.relaxdev.ru
DJANGO_SECURE_SSL_REDIRECT=1
AUTHOR_FULL_NAME=Базарнов Никита Викторович

DATABASE_URL RelaxDev добавляет автоматически после подключения PostgreSQL.

Запуск задается через Procfiledeploy/start.sh, который выполняет миграции, collectstatic, проверяет роли и запускает Gunicorn на $PORT.

Production bootstrap

Для локальной/обычной Django-аутентификации, чтобы не публиковать известный пароль admin, можно один раз задать environment variables:

BOOTSTRAP_ADMIN_USERNAME=adminvc
BOOTSTRAP_ADMIN_EMAIL=...
BOOTSTRAP_ADMIN_PASSWORD=<сложный пароль>
BOOTSTRAP_ORGANIZER_USERNAME=organizer
BOOTSTRAP_ORGANIZER_EMAIL=...
BOOTSTRAP_ORGANIZER_PASSWORD=<сложный пароль>

Команда bootstrap_production идемпотентна. После первого успешного входа пароли можно удалить из переменных окружения и изменить через приложение/администрирование. В строгом LDAP-режиме локальные bootstrap-учетные записи не создаются: стартовые роли назначаются через LDAP_ADMIN_USERNAMES и LDAP_ORGANIZER_USERNAMES.

База данных

  • локально: база хранится вне каталога проекта (%LOCALAPPDATA%\VideoConnect\videoconnect.sqlite3 в Windows или ~/.videoconnect/videoconnect.sqlite3 в Linux), поэтому замена папки с новой версией не удаляет пользователей; при первом запуске автоматически копируется старая database/videoconnect.sqlite3, если она существует;
  • production: PostgreSQL через DATABASE_URL рекомендуется и защищает пользователей между redeploy;
  • если PostgreSQL недоступен, задайте VIDEOCONNECT_DATA_DIR на реально постоянный/mounted каталог хостинга; в production запуск без DATABASE_URL и без VIDEOCONNECT_DATA_DIR намеренно блокируется, чтобы не потерять пользователей при обновлении;
  • database/schema.sql — справочная SQL-схема для материалов ВКР;
  • accounts/migrations, core/migrations, conferences/migrations — реальные Django migrations и должны храниться в Git.

Структура

accounts/           роли, пользователи, профили, уведомления
conferences/        встречи, WebRTC signaling, чат, файлы, attendance
core/               публичные страницы, статьи, feedback, audit
management_panel/   собственная административная панель
reports/            DOCX/XLSX
templates/          HTML
static/             CSS/JavaScript
media/              пользовательские файлы
database/           SQL/SQLite материалы
deploy/             production start script
docs/               аналитическая и проектная документация

Git

Проект полностью подходит для GitFlic. Не коммитьте .env, пароли, токены TURN, production SECRET_KEY и реальные пользовательские файлы. Коммиты должны отражать реальные итерации разработки; docs/COMMIT_PLAN.md содержит план развития.

Изменения 0.2.3

В комнате конференции доступен выбор камеры, микрофона и аудиовыхода, а также постоянный список активных участников и плитки-заглушки для пользователей без видеопотока.

Изменения 0.3.0

  • Проект синхронизирован с главой 2 и приложениями ВКР.
  • Добавлены изменение и отмена конференции.
  • Добавлен опциональный LDAP/AD backend.
  • Добавлены SMTP-уведомления и устойчивое поведение при ошибке почтового сервера.
  • Добавлен Bootstrap 5.3 и обновлена эксплуатационная документация.
Описание
Конвейеры
0 успешных
0 с ошибкой
Разработчики