Skip to content

bmstu-itstech/screen-core

Repository files navigation

ScreenCore — Система управления экранами

Next.js TypeScript Docker Status

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.

Установка и запуск (Docker)

1. Клонирование репозитория

git clone https://github.com/bmstu-itstech/screen-core.git
cd screencore

2. Конфигурация

Создайте файл .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/static

3. Запуск

docker-compose up -d --build

Примечание: При первом запуске инициализация MongoDB Replica Set может занять до 10-20 секунд.

4. Первоначальная настройка

  1. Откройте в браузере: http://localhost:3000/system-setup
  2. Создайте Root-аккаунт и укажите название организации.
  3. После успеха вы будете перенаправлены на страницу входа.

📖 Как пользоваться

Для администратора

  1. Перейдите на /admin/dashboard для обзора системы.
  2. В разделе Материалы загрузите контент.
  3. В разделе Экраны нажмите "Добавить экран", чтобы сгенерировать код.

Для плеера (Экран/TV)

  1. Откройте на устройстве http://localhost:3000/setup.
  2. Введите полученный 5-значный код в админ-панели.
  3. Экран автоматически перейдет в режим воспроизведения (/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   # Оркестрация контейнеров

Устранение неполадок (Troubleshooting)

Ошибка Redis Client Error: ECONNREFUSED

Причина: Приложение пытается подключиться к Redis по localhost, но в Docker это другой контейнер. Решение: Убедитесь, что в docker-compose.yml в сервисе app используется env_file: .env, а не environment: - .env. Переменные должны попасть внутрь контейнера.

Ошибка Setup failed (Mongoose Transactions)

Причина: MongoDB запущена в режиме Standalone, который не поддерживает транзакции. Решение: Используйте docker-compose.yml из этого репозитория. Он содержит сервис mongo-init, который автоматически инициализирует Replica Set (rs0).

Статика отдает 404

Причина: Запущен стандартный сервер Next.js вместо кастомного. Решение: Убедитесь, что CMD в Dockerfile запускает node server.js.


Лицензия

MIT License.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages