Files
XC_VM/docs/ru/development/bootstrap-contexts.md
T
Divarion-D 76844fef11 docs: restructure, fix PSR-4 drift, and unify en/ru
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.
2026-06-26 15:56:15 +03:00

6.6 KiB

Контексты Bootstrap

XC_Bootstrap — единая точка входа для инициализации системы. Каждый контекст загружает ровно тот набор подсистем, который нужен для конкретного типа запроса. Контекст передаётся как значение enum BootContext.


Быстрый справочник

Enum-значение Где используется
BootContext::MINIMAL Скрипты, которым нужны только пути/конфиг
BootContext::CLI Cron-задачи, CLI-команды
BootContext::STREAM Стриминговые эндпоинты (live, vod, ts)
BootContext::ADMIN Панель администратора / реселлера

Что загружает каждый контекст

BootContext::MINIMAL

Загружает только базовые константы и конфигурацию. База данных не подключается.

Включает:

  • Composer PSR-4 автозагрузчик (vendor/autoload.php)
  • Константы путей (MAIN_HOME, INCLUDES_PATH, CONFIG_PATH, …)
  • Logger (Logger::init())
  • Функции ошибок (generateError(), generate404())

Не включает: DB, Redis, сессии, Translator, Admin API.

Пример:

require_once '/home/xc_vm/bootstrap.php';
XC_Bootstrap::boot(BootContext::MINIMAL);

// Теперь доступны MAIN_HOME, Logger
echo MAIN_HOME;

BootContext::CLI

Предназначен для cron-заданий и CLI-команд. Добавляет подключение к БД поверх MINIMAL.

Включает (дополнительно к MINIMAL):

  • Подключение к базе данных
  • LegacyInitializer (легаси-глобалы для функций из www/)
  • Redis (по умолчанию: false; включить через опцию 'redis' => true)
  • cli_set_process_title() (если передана опция 'process')

Пример:

require_once '/home/xc_vm/bootstrap.php';
XC_Bootstrap::boot(BootContext::CLI, [
    'cached'  => true,
    'process' => 'xc_vm: my-cron-job',
]);

BootContext::STREAM

Лёгкий контекст для стриминговых эндпоинтов. Инициализирует только то, что нужно для горячего пути стриминга.

Включает (дополнительно к MINIMAL):

  • Подключение к базе данных (cached: true — всегда)
  • Flood-protection и проверка хоста

Не включает: Redis, Translator, Admin API, сессии.

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

Пример:

require_once '/home/xc_vm/bootstrap.php';
XC_Bootstrap::boot(BootContext::STREAM, ['cached' => true]);

BootContext::ADMIN

Полная инициализация для панели администратора и реселлера.

Включает (дополнительно к MINIMAL):

  • PHP-сессия (с параметром SameSite=Strict)
  • Подключение к базе данных (cached: false)
  • LegacyInitializer
  • Redis
  • Admin API / Reseller API
  • Translator (локализация)
  • Shutdown-обработчик
  • Статусные константы
  • Admin globals

Пример:

require_once '/home/xc_vm/bootstrap.php';
XC_Bootstrap::boot(BootContext::ADMIN);

Матрица подсистем

Подсистема MINIMAL CLI STREAM ADMIN
Константы / пути ✅ ✅ ✅ ✅
Logger ✅ ✅ ✅ ✅
Flood-protection — — ✅ ✅
Проверка хоста — — ✅ ✅
База данных — ✅ ✅ ✅
LegacyInitializer — ✅ — ✅
Redis — opt — ✅
PHP-сессия — — — ✅
Admin API — — — ✅
Translator — — — ✅

Опции boot()

XC_Bootstrap::boot(BootContext $context, array $options = []);
Опция Тип Умолчание Описание
cached bool true (STREAM), false (остальные) Загружать настройки из кеша
redis bool true (ADMIN), false (остальные) Подключать Redis
process string '' Имя процесса для cli_set_process_title()
shutdown callable встроенный Замена стандартного shutdown-обработчика

Идемпотентность

boot() выполняется один раз за процесс — повторные вызовы игнорируются.

XC_Bootstrap::boot(BootContext::ADMIN);
XC_Bootstrap::boot(BootContext::CLI); // проигнорировано

Для сброса состояния (только в тестах):

XC_Bootstrap::reset();

Публичные методы

XC_Bootstrap::getContext(): ?BootContext  // текущий контекст
XC_Bootstrap::isBooted(): bool            // выполнен ли boot()
XC_Bootstrap::isCli(): bool               // работает ли в CLI
XC_Bootstrap::getDatabase(): ?Database
XC_Bootstrap::getContainer(): ServiceContainer

Связанные файлы

Файл Роль
src/bootstrap.php Определяет MAIN_HOME, подключает автозагрузчик Composer, бутит контекст
src/Core/Enum/BootContext.php Enum контекста загрузки
src/Core/Init/LegacyInitializer.php Инициализация под каждый контекст