Files
HY2XS_flamy/docs
founder 82e5ca40cc fix(build): гейт ACME описывал снятую архитектуру панели
Приёмка требовала, чтобы страница Hysteria содержала жёсткий список ACME
DNS-провайдеров (cloudflare … vultr) и не содержала удалённого upstream
namedotcom. Это имело смысл, пока панель ПРЕДЛАГАЛА выбор провайдера: список в
UI был вторым экземпляром upstream-реестра и мог от него отстать — ровно так
namedotcom и пришлось выпиливать вручную.

После перевода страницы в read-only диагностику реестра нет и быть не должно:
имя провайдера читается из фактического конфига и показывается как есть, поэтому
новый upstream-провайдер отображается без правок панели. Возврат списка ради
прохождения grep-а создал бы фиктивный реестр, существующий только для гейта.

Гейт проверяет действующий контракт: провайдер приходит строкой и рисуется как
значение, параметры DNS отдаются только именами, селектора на странице нет.
Проверено положительно и на трёх нарушениях (провайдер перестал показываться,
на странице появился селектор, тип стал перечислением) — гейт падает на каждом.

Контрактный тест панели дополнен обратной проверкой: ни одно из восьми имён
провайдеров не должно встречаться в исходнике страницы. Та же формулировка
поправлена в матрице приёмки.

Дополнительно прогнаны целиком все восемь функций приёмки, которым не нужен
распакованный пакет: других устаревших утверждений нет.
2026-09-03 23:07:19 +05:00
..

HY2XS baseline docs

Этот набор документов фиксирует актуальную baseline-модель HY2XS под следующие ограничения:

  • серверный транспорт: ванильная Hysteria2
  • UI: HY2XS admin, штатный компонент проекта, поставляется вместе с пакетом
  • target OS: только чистый Debian 13
  • оркестратор: install-only, только первичная установка и базовая настройка
  • стек оркестратора: Bun + TypeScript
  • target-side build: запрещён
  • standalone update / rollback / uninstall subcommands: вне scope
  • сборка и упаковка: отдельный локальный build layer
  • post-install state: /etc/hysteria/post-install.env
  • установка: только на чистый хост, миграция с 0.x не поддерживается
  • контракт версий продукта/платформы/toolchain: корневой versions.env
  • клиентский delivery/access layer: вне baseline этого пакета docs

Главная архитектурная схема

В этой редакции зафиксированы два слоя:

  1. Builder layer — работает на отдельном Debian 13 amd64 build host. Он собирает итоговый пакет, собирает HY2XS admin, компилирует Bun/TypeScript оркестратор в install-артефакт, упаковывает шаблоны, unit-файлы и примеры конфигов.

  2. Runtime / target layer — работает на чистом Debian 13. Здесь нет сборщика. Здесь запускается только итоговый install package / orchestrator, который:

    • ставит системные зависимости
    • разворачивает встроенный HY2XS admin
    • забирает закреплённую в пакете Hysteria2 из официального upstream и сверяет её по SHA-256 и версии
    • создаёт конфиги, systemd unit-файлы и post-install.env
    • выполняет базовую настройку сервера

Версия Hysteria2 выбирается на builder layer: последняя стабильная разрешается при сборке и замораживается в metadata пакета. Target layer никогда не обращается к moving latest.

Базовые правила

  1. Hysteria2 не вендорится и не собирается как часть HY2XS.
  2. HY2XS admin — штатный компонент проекта и поставляется вместе с пакетом.
  3. Оркестратор пишется на Bun + TypeScript.
  4. На target нет npm / pnpm / yarn / bun install / transpile step.
  5. На target нет standalone логики update / rollback / uninstall.
  6. В install/reconfigure есть bounded rollback для failure-сценариев firewall/systemd/config/smoke. Rollback опирается на то, что операция реально успела применить: сервисы, которые она не разворачивала, не останавливаются никогда.
  7. Установка двухфазная: PHASE 0 — read only, PHASE 1 — mutation. До успешного clean-host preflight на сервере не изменяется ни один persistent path. У мутирующей фазы ровно один владелец — оркестратор: install.sh проверяет и передаёт управление, не изменяя ничего сам. Очистка предыдущей установки — отдельная явная операция оператора, см. operations/14-legacy-cleanup.md.
  8. Выдача доступа пользователям, Telegram-бот, billing, backend профилей и похожие контуры не входят в этот baseline.

Состав документов

Документы разложены по слою, к которому относятся. Двузначный префикс в имени — стабильный идентификатор документа: под ним на него ссылаются CHANGELOG, релизные гейты и сообщения оркестратора, поэтому при переносе в каталоги он сохранён.

Архитектура и рамки

Сборка

Runtime на target

Панель

  • admin/04-admin-panel.md — HY2XS admin
  • admin/15-ui-contracts.md — контракты панели: иконки, структурированные ошибки, необязательные поля, отсутствие выдуманного состояния, атрибуция

Эксплуатация

Проверки

  • testing/ — набор проверок по слоям (бывший 11-testing-and-acceptance.md)
  • acceptance/ — отчёты о фактических прогонах приёмки

История изменений проекта — в CHANGELOG.md.

Жёсткие рамки baseline

Не делаем:

  • upgrade manager
  • rollback manager
  • uninstall
  • reconcile engine
  • target-side build pipeline
  • Docker baseline
  • multi-node
  • port hopping
  • Telegram-бот
  • backend выдачи remote profiles
  • «умную» миграцию сломанных старых инсталляций

Одной фразой

Правильная baseline-модель теперь такая:

Локальный builder разрешает последнюю стабильную Hysteria2, проверяет её на совместимость с конфигом HY2XS и собирает install package с HY2XS admin и Bun/TypeScript оркестратором; серверный install-only orchestrator ставит этот пакет на чистый Debian 13, скачивает ровно закреплённую Hysteria2, разворачивает HY2XS admin, создаёт systemd + nftables + post-install env и подготавливает рабочее серверное окружение.