ScreenCore — это современная платформа для централизованного управления сетью дисплеев. Система позволяет удаленно управлять контентом, расписанием работы и экстренными оповещениями на телевизорах, информационных табло и мониторах в режиме реального времени.
Проект построен на Next.js 15 с использованием Custom Node.js Server для поддержки WebSockets.
- Мгновенный статус: Отображение статуса (Online/Offline) и пинга (Latency) в реальном времени через WebSockets + Redis.
- Простое подключение: Система сопряжения устройств через 5-значный код (Pairing Code).
- Удаленное управление: Изменение громкости, режима отображения и перезагрузка страницы плеера из админки.
- Медиатека: Загрузка видео и изображений.
- Плейлисты: Drag & Drop редактор последовательности воспроизведения.
- Режимы работы:
- Слайд-шоу: Для изображений с таймером.
- Видео: Непрерывное воспроизведение роликов.
- Расписание: Настройка времени работы (автоматическое включение/выключение черного экрана).
- Создание структуры организации (ВУЗ → Корпус → Этаж → Аудитория).
- Наследование настроек и контента от родительских узлов к дочерним.
- Ролевая модель доступа (Root / Admin).
- Frontend & Backend: Next.js 15 (App Router), React 19.
- Server: Custom Node.js server (
server.ts) для обработки WebSocket соединений и раздачи статики. - Database: MongoDB (в режиме Replica Set для поддержки транзакций).
- Cache & Pub/Sub: Redis (синхронизация состояния, обмен сообщениями между API и WS).
- Message Broker: RabbitMQ (для асинхронных задач и событий).
- DevOps: Docker & Docker Compose.
git clone https://github.com/bmstu-itstech/screen-core.git
cd screencoreСоздайте файл .env в корне проекта.
Важно:
DB_URIдолжен содержатьreplicaSet=rs0, так как код использует транзакции Mongoose.
# Секретные ключи (сгенерируйте свои)
ACCESS_SECRET=replace_with_secure_string_123
REFRESH_SECRET=replace_with_secure_string_456
# Подключения к сервисам (имена хостов для Docker сети)
DB_URI=mongodb://mongo:27017/screencore?replicaSet=rs0&directConnection=true
REDIS_URL=redis://redis:6379
AMQP_URL=amqp://rabbitmq:5672
# URL для раздачи статики
NEXT_PUBLIC_STATIC_URL=http://localhost:8081/staticdocker-compose up -d --buildПримечание: При первом запуске инициализация MongoDB Replica Set может занять до 10-20 секунд.
- Откройте в браузере:
http://localhost:3000/system-setup - Создайте Root-аккаунт и укажите название организации.
- После успеха вы будете перенаправлены на страницу входа.
- Перейдите на
/admin/dashboardдля обзора системы. - В разделе Материалы загрузите контент.
- В разделе Экраны нажмите "Добавить экран", чтобы сгенерировать код.
- Откройте на устройстве
http://localhost:3000/setup. - Введите полученный 5-значный код в админ-панели.
- Экран автоматически перейдет в режим воспроизведения (
/player).
Проект использует Custom Server (server.ts).
- Команда
next startне будет работать корректно, так как она запускает стандартный сервер Next.js, который не знает про WebSockets и кастомную раздачу файлов из папки/uploads. - В продакшене (и в Docker) используется команда
node server.js(после компиляции TypeScript).
├── src
│ ├── app # Next.js App Router (страницы и API)
│ ├── entities # Бизнес-сущности (Device, User)
│ ├── features # Функциональные блоки (Emergency, Auth)
│ ├── shared # Общие модули (DB, Redis, UI Kit)
│ └── widgets # Крупные компоненты интерфейса
├── uploads # Папка для хранения медиафайлов
├── server.ts # Точка входа сервера (HTTP + WS)
└── docker-compose.yml # Оркестрация контейнеров
Причина: Приложение пытается подключиться к Redis по localhost, но в Docker это другой контейнер.
Решение: Убедитесь, что в docker-compose.yml в сервисе app используется env_file: .env, а не environment: - .env. Переменные должны попасть внутрь контейнера.
Причина: MongoDB запущена в режиме Standalone, который не поддерживает транзакции.
Решение: Используйте docker-compose.yml из этого репозитория. Он содержит сервис mongo-init, который автоматически инициализирует Replica Set (rs0).
Причина: Запущен стандартный сервер Next.js вместо кастомного.
Решение: Убедитесь, что CMD в Dockerfile запускает node server.js.
MIT License.