Подготовить HY2XS к production-сборке
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
# Admin panel: bundled H UI fork
|
||||
|
||||
## Цель документа
|
||||
|
||||
Зафиксировать новую модель работы с UI: панель больше не рассматривается как внешний upstream-зависимый слой для target install, а становится **нашим вендорным компонентом**, поставляемым вместе с проектом.
|
||||
|
||||
## Почему меняем подход
|
||||
|
||||
Причина архитектурная:
|
||||
|
||||
- Hysteria2 ядро считаем достаточно стабильным upstream-компонентом
|
||||
- UI считаем более слабым по поддержке и менее надёжным как внешний operational dependency
|
||||
- поэтому UI забираем к себе: **fork + vendor + ship with package**
|
||||
|
||||
## Что это означает практически
|
||||
|
||||
### Было
|
||||
- Hysteria — upstream
|
||||
- H UI — отдельный upstream
|
||||
- оркестратор ставит оба компонента как внешние зависимости
|
||||
|
||||
### Стало
|
||||
- Hysteria — upstream
|
||||
- H UI — **наш fork внутри проекта**
|
||||
- итоговый package уже содержит UI
|
||||
- на target server не надо скачивать H UI из чужого репозитория
|
||||
|
||||
## Правильная модель
|
||||
|
||||
- локальный builder хранит и собирает наш fork H UI
|
||||
- install package везёт UI на сервер
|
||||
- target-side orchestrator только раскладывает UI и создаёт unit
|
||||
- H UI продолжает работать как надстройка над Hysteria YAML/API-слоем
|
||||
|
||||
## Что считать нормальным
|
||||
|
||||
Факт, что H UI — это надстройка над YAML-конфигом Hysteria, считается нормальным.
|
||||
Это не аргумент против использования UI.
|
||||
Важно только, чтобы источник истины по runtime-состоянию был понятен и не было двух конкурирующих конфигурационных миров без правил синхронизации.
|
||||
|
||||
## Scope панели
|
||||
|
||||
Панель нужна для:
|
||||
- operator-facing управления
|
||||
- просмотра статуса
|
||||
- работы с пользователями / трафиком / сущностями доступа
|
||||
- удобной админской рутины
|
||||
|
||||
Панель не должна:
|
||||
- определять install lifecycle сервера
|
||||
- превращать систему в сложный control plane
|
||||
- диктовать scope оркестратора
|
||||
|
||||
## Правила поставки
|
||||
|
||||
Bundled H UI должна:
|
||||
- поставляться внутри итогового пакета
|
||||
- иметь свой install dir
|
||||
- иметь свой data dir
|
||||
- запускаться отдельным systemd unit
|
||||
- не требовать target-side build
|
||||
|
||||
## Правила ответственности
|
||||
|
||||
### Source of truth
|
||||
- runtime transport layer: Hysteria
|
||||
- операторский UI layer: forked H UI
|
||||
- install lifecycle: наш orchestrator
|
||||
- deploy facts: `post-install.env`
|
||||
|
||||
## Production lifecycle Hysteria2
|
||||
|
||||
В production package HY2XS admin не скачивает и не обновляет бинарь Hysteria2 самостоятельно.
|
||||
|
||||
Правильная модель:
|
||||
- Hysteria2 устанавливается install-оркестратором с official upstream
|
||||
- Hysteria2 запускается отдельным `hysteria-server.service`
|
||||
- HY2XS admin работает как operator UI и HTTP auth/traffic layer
|
||||
- смена версии Hysteria2 через UI отключена в baseline
|
||||
- список upstream releases не является частью operator UI baseline
|
||||
|
||||
### Что нельзя делать
|
||||
- скачивать H UI с upstream прямо на target как baseline
|
||||
- собирать UI на сервере
|
||||
- склеивать unit Hysteria и unit H UI в один сервис
|
||||
- раздувать оркестратор из-за особенностей UI
|
||||
- использовать HY2XS admin как updater бинаря Hysteria2
|
||||
|
||||
## Что фиксировать в `post-install.env`
|
||||
|
||||
Минимум:
|
||||
- `HUI_ENABLED`
|
||||
- `HUI_FORK_REF`
|
||||
- `HUI_BUILD_ID`
|
||||
- `HUI_BIND_HOST`
|
||||
- `HUI_PORT`
|
||||
- `HUI_INSTALL_DIR`
|
||||
- `HUI_DATA_DIR`
|
||||
|
||||
## Инварианты
|
||||
|
||||
Схема считается корректной, если:
|
||||
|
||||
1. UI приезжает на target уже в составе пакета
|
||||
2. target не скачивает UI с внешнего upstream
|
||||
3. UI работает отдельным сервисом
|
||||
4. UI не меняет install-only scope оркестратора
|
||||
5. Hysteria остаётся внешним vanilla upstream-компонентом
|
||||
Reference in New Issue
Block a user