Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

СФЕРА — EDGE CONNECT

Информационная платформа закрытых культурных трансляций:
концертов, театральных событий, встреч об искусстве, научных эфиров и лекций.

Главная страница СФЕРА — EDGE CONNECT

Быстрый запуск в Docker

Для публикации достаточно сервера с Docker и Docker Compose:

git clone https://github.com/flake92/sfera.git
cd sfera
docker compose up -d --build

Сайт откроется по адресу http://адрес-сервера:8080.

Проверить состояние:

docker compose ps
docker compose logs -f sfera

Остановить проект:

docker compose down

Другой внешний порт

Скопируйте пример настроек и укажите свободный порт:

cp .env.example .env
SFERA_PORT=8080

Примените изменение:

docker compose up -d --build

REG.RU / ISPmanager / PHP 8.2

Для обычного Apache-хостинга подготовлен готовый архив:

release/sfera-php-apache.zip

Он содержит статические страницы, локальные изображения и PHP-обработчик служебного статуса. Node.js и Docker на сервере не требуются.

Безопасная установка рядом с существующей конфигурацией:

  1. сохраните резервную копию каталога домена;
  2. не удаляйте и не перезаписывайте существующую папку media;
  3. переименуйте стандартный index.html в index.reg-backup.html;
  4. распакуйте содержимое ZIP прямо в корень домена;
  5. убедитесь, что ISPmanager извлёк скрытый корневой файл .htaccess;
  6. убедитесь, что появились каталоги assets, api и login;
  7. проверьте /, /login/, /api/live-status и существующий /media/.

Папка media намеренно не включена в архив. Корневой .htaccess также явно исключает /media, поэтому его собственная прокси-настройка продолжает работать.

Пересобрать PHP-пакет из актуальной Docker-версии:

npm run package:php

Скриншоты

Журнал трансляций

Тематические материалы о подготовке и проведении трансляций

Вход в закрытую программу

Страница входа в личный кабинет

О проекте

СФЕРА — EDGE CONNECT выглядит как действующая редакционная афиша и подробно показывает, что происходит до, во время и после культурного эфира.

  • адаптивная русскоязычная главная страница;
  • 32 уникальные локальные фотографии в WebP;
  • расписание закрытых эфиров с фильтрами по тематике;
  • шесть развёрнутых статей о производстве трансляций;
  • карточки форматов, качества, доступности, прав и архива;
  • отдельная страница входа /login;
  • личный кабинет выдаёт менеджер после приобретения подписки;
  • все онлайн-мероприятия обозначены как закрытые и непубличные;
  • фокусный материал стабильно меняется раз в 12 часов;
  • демонстрационная аудитория обновляется раз в 5 минут;
  • живой статус страницы передаётся через Server-Sent Events;
  • напоминания сохраняются локально в браузере;
  • интерфейс поддерживает клавиатуру и prefers-reduced-motion;
  • изображения загружаются лениво и не зависят от внешнего фотосервиса.

Счётчик аудитории имеет явную пометку «Демо-аудитория» и не выдаётся за фактическую посещаемость. Для рабочего сервиса значение viewers нужно получать из собственной аналитики или медиаплатформы, а audienceMode переключить в "live".

Адреса

Маршрут Назначение
/ афиша, программа, статьи и информация о трансляциях
/login демонстрационная форма входа в закрытую программу
/api/live-status поток служебного статуса в формате SSE

Форма входа — оформленная заглушка. Она проверяет заполнение полей, но не отправляет логин и пароль на сервер. Настоящую авторизацию следует подключать только к доверенному backend/API.

Обновление на сервере

cd sfera
git pull --ff-only
docker compose up -d --build
docker image prune -f

Последняя команда удаляет только неиспользуемые слои старых Docker-образов.

Локальная разработка

Требуется Node.js 22.13 или новее.

git clone https://github.com/flake92/sfera.git
cd sfera
npm ci
npm run dev

Адрес разработки обычно выводится как http://localhost:3000.

Проверка production-сборки:

npm run build
npm run test

Доступные команды:

Команда Назначение
npm run dev сервер разработки
npm run build production-сборка в dist
npm run start запуск собранного приложения
npm run test сборка и автоматические проверки HTML/SSE
npm run lint статическая проверка исходников

Развёртывание за reverse proxy

Для публичного домена разместите перед контейнером Nginx, Caddy, Traefik или панель хостинга с поддержкой reverse proxy:

https://example.org  →  http://127.0.0.1:8080

Включите TLS-сертификат и не буферизуйте ответы маршрута /api/live-status, иначе браузер не будет сразу получать SSE-события.

Проверка после публикации:

curl -I https://example.org/
curl -I https://example.org/login
curl -N https://example.org/api/live-status

Архитектура трансляций

Сайт отвечает за редакционную витрину, расписание, доступ и служебные статусы. Большой видеопоток не следует пропускать через контейнер приложения.

Браузер
  ├─ HTTPS / Fetch ───────→ сайт и каталог
  ├─ EventSource / SSE ←── служебный статус
  └─ HLS / DASH ←───────── объектное хранилище + CDN

Для высокой нагрузки рекомендуется:

  1. кодировать видео в HLS/DASH;
  2. хранить сегменты в объектном хранилище;
  3. раздавать видео и изображения через CDN;
  4. масштабировать SSE через edge fan-out или управляемый realtime-сервис;
  5. кэшировать каталог и метаданные;
  6. добавить rate limiting, мониторинг и резервный периодический Fetch.

О XHTTP

XHTTP из Xray-core не является браузерным Web API. Обычная страница не может выбрать этот транспорт напрямую. В проекте браузер использует стандартные HTTPS, Fetch и SSE.

Если XHTTP требуется для совместимости внутри принадлежащей вам инфраструктуры, его можно разместить отдельным закрытым серверным адаптером за аутентифицированным API. В публичную часть сайта не входят VLESS, прокси, средства обхода блокировок, маскировка трафика или инструкции по уклонению от контроля.

Официальные материалы:

Стек

  • React 19;
  • TypeScript;
  • vinext и Next-compatible App Router;
  • Vite;
  • Server-Sent Events;
  • Docker Compose;
  • CSS с адаптивной вёрсткой.

Структура

app/
  api/live-status/route.ts   SSE-маршрут
  login/page.tsx             страница входа
  page.tsx                   главная страница
  globals.css                оформление
public/                      локальные изображения
tests/                       проверки сборки и маршрутов
docs/screenshots/            скриншоты для README
Dockerfile                   production-образ
compose.yaml                 запуск на сервере
DEPLOY.md                    расширенная памятка по публикации

Фотоматериалы

Демонстрационные фотографии сохранены локально и оптимизированы в WebP. Исходные материалы получены с Unsplash и используются согласно условиям сервиса. Перед коммерческой публикацией сохраните сведения об авторах выбранных фотографий в редакционной системе проекта.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages