Overhaul the Docsify documentation (English + Russian) so it matches the current codebase and follows one consistent pattern. Content accuracy (post-migration): - Rewrite development/autoloader.md to PSR-4 / Composer (the old XC_Autoloader scanner, igbinary tmp/cache/autoload_map and registerDirectories are gone). - PascalCase every source path (src/core -> src/Core, domain/Stream, cli/Commands, public/Controllers, Infrastructure/Redis, ...) across all docs. - Replace the removed autoload.php references with vendor/autoload.php (build_system, bootstrap-contexts, error-handling, modules). - ssl-generation: note that the installer now auto-generates a unique self-signed certificate before Nginx starts. Common pattern (Clean & uniform): - Strip emoji from headings; remove the in-page Navigation blocks (the Docsify sidebar already provides navigation). - One H1 + intro per doc; uniform "Related files" / "Связанные файлы" section, added to the code-centric docs that lacked it. Structure: - Remove the empty stray docs/api/; move updates_checklist.md into builds/; link the previously-orphaned ucs-integration.md. - Regroup the sidebars (split the oversized guides group into Developer Guides / Security & Access / Integrations; fold builds into Build & Release). Augment: - dev-workflow: Local Setup (make dev-tools) + Quality Checks (phpstan, cs, gates). - build_system: Composer Dependencies section (committed prod-only vendor, committed lock, dev tools via composer install, no build-time vendor step). en/ru parity: - Apply the same structure, fixes and pattern to docs/ru/ (translated), including a new Russian ucs-integration.md. The en and ru file sets are now identical.
4.9 KiB
Интеграция UCS — поддомены-wildcard по линии
Эта возможность поддерживает интеграцию UCS, выдавая каждому клиенту уникальный поддомен балансировщика на основе его ID линии при построении редиректов на поток.
Overview
Когда сервер-балансировщик (LB) использует wildcard-домен и включена опция Serve Random IP / Domain, XC_VM заменяет префикс wildcard. на ID аутентифицированной линии перед редиректом клиента.
| ID линии | LB-домен (настроенный) | Домен редиректа |
|---|---|---|
| 10 | wildcard.example.com |
10.example.com |
| 42 | wildcard.lb1.com |
42.lb1.com |
Каждая линия получает стабильный поддомен. UCS (или вышестоящий DNS/прокси) может маршрутизировать *.example.com на нужный backend или применять политики на уровне линии.
Требования
- Сервер-балансировщик (не главный сервер) с хотя бы одним доменом, настроенным в Domains and IPs.
- Включённая опция Serve Random IP / Domain на этом LB (чекбокс
random_ipна странице редактирования сервера). - Запись домена, начинающаяся с
wildcard.(например,wildcard.example.com). - DNS: wildcard-запись для базовой зоны (например,
*.example.com), указывающая на LB или ваш UCS-edge.
Настройка
- Откройте Servers → Edit на целевом LB-сервере.
- В Domains and IPs добавьте
wildcard.example.com(используйте свою реальную зону). - Включите Serve Random IP / Domain.
- Сохраните сервер.
- Убедитесь, что DNS резолвит
{line_id}.example.comдля любого ID линии, который вы выдаёте (wildcard-DNS или автоматизация UCS).
Когда клиент аутентифицируется через auth.php, XC_VM читает ID линии из $rUserInfo['id'] и передаёт его в построитель URL редиректа.
Когда применяется
Подстановка выполняется только когда все условия истинны:
- Запрос аутентифицирован и ID линии доступен.
- На выбранном LB включена Serve Random IP / Domain.
- Случайно выбранный из списка доменов сервера домен содержит подстроку
wildcard..
Если клиент подключился с подходящим заголовком Host, существующий хост сохраняется и wildcard-подстановка пропускается.
Пример потока
- Домены LB-сервера:
wildcard.example.com,lb2.example.com - Serve Random IP / Domain: вкл.
- ID линии клиента:
10 - Аутентификация выбирает
wildcard.example.comиз списка доменов - Хост URL редиректа становится
10.example.com
Реализация
Логика — в StreamRedirector::getStreamingURL():
// line_id : 10 => wildcard.lb1.com => 10.lb1.com
if ($rUserID && strpos($rDomain, 'wildcard.') !== false) {
$rDomain = str_replace('wildcard.', $rUserID . '.', $rDomain);
}
Вызывается из Public/stream/auth.php с $rUserID = $rUserInfo['id'] для live, VOD, timeshift и связанных редиректов.
Примечания
- Используйте буквальный префикс
wildcard.в строке домена; заменяется только этот сегмент. - ID линии — это внутренний ID таблицы lines (
users.idв стриминг-аутентификации), не имя пользователя. - Wildcard-подстановка применяется только к URL редиректов LB; она не меняет хосты плейлистов или API, если только эти пути тоже не вызывают
getStreamingURL()с ID линии.
Связанные файлы
| Файл | Роль |
|---|---|
src/Streaming/Delivery/StreamRedirector.php |
getStreamingURL() — wildcard-подстановка |
src/Public/stream/auth.php |
вызывает построитель редиректа с ID линии |