Skip to content

OneFlag

Self-hosted сервис управления фича-флагами и remote-config для команд на OneScript и 1С.

Какую задачу решает

Фича-флаг нужен, чтобы отделить выкладку кода от включения функциональности. Без флагов любое изменение поведения требует релиза, а откат неудачной функции означает откат всей версии.

Готовые сервисы вроде Unleash, Flagsmith и LaunchDarkly эту задачу решают, но плохо подходят для закрытого контура: их либо нельзя разместить внутри, либо для этого нужен сторонний стек. OneFlag работает на том же OneScript, что и остальные внутренние инструменты, и не тянет внешних зависимостей помимо пакетов hub.

Ключевое свойство: изменение доходит мгновенно

Обычная схема опроса означает задержку до минуты и постоянный трафик. OneFlag держит один поток Server-Sent Events на клиента: оператор щёлкает тумблер, и подключённые приложения меняют поведение в ту же секунду, без перезапуска и без опроса.

Тот же поток обновляет и другие открытые дашборды, поэтому два администратора видят одинаковое состояние.

Что входит

ВозможностьРеализация
Оценка флагов у клиентаСтандарт OpenFeature, провайдер oneflag-sdk
Окруженияdev, stage, prod; у каждого своя настройка флага
ТаргетингПравила «атрибут, оператор, значения» с выбором варианта
Таргетинг по версииСравнение по semver и диапазоны вида >=2.1.0, ^1.2.3, 1.2.x
Процентные выкаткиСтабильное распределение через bucketer
Типы флаговboolean, string, number, object с произвольными вариантами
Журнал измененийCloudEvents 1.0, идентификаторы ULID
ДоступJWT в httpOnly-куке для дашборда, ключ в заголовке для SDK
Ошибки APIRFC 9457, application/problem+json
Наблюдаемость/healthz, метрики prometheus на эндпоинте из prometheus-metrics, логи logos
ДашбордШаблоны JinjOS через winow-view, htmx и Alpine.js без сборщика
Управление из консолиКоманды serve и flags на autumn-cli

Чем отличается от альтернатив

  • Совместимость со стандартом. Клиенты пишут код против OpenFeature, а не против API OneFlag. Уход с OneFlag на другой сервис не потребует правок в прикладном коде.
  • Одинаковая логика на сервере и в клиенте. Правила разрешения значения вынесены в общий класс FlagEvaluator, который используют и сервер, и SDK. Значение флага не может разойтись между дашбордом и приложением.
  • Дашборд без сборщика JS. htmx и Alpine.js сервис отдаёт сам, поэтому правка интерфейса не требует ни Node.js в контуре, ни доступа к внешним CDN.
  • Хранилище выбирается настройкой. SQLite для одиночной установки, PostgreSQL для команды, JSON-файлы для конфигурации в системе контроля версий. Прикладной код от выбора не зависит.

Ограничения

  • HTTPS не поддерживается: платформа не даёт TLS поверх TCPСоединение, для внешнего доступа нужен обратный прокси.
  • Роли сведены к одному администратору дашборда и одному ключу SDK; полноценный RBAC не реализован.
  • Вебхуки наружу не отправляются, хотя события уже формируются в формате CloudEvents.
  • SQLite рассчитан на один узел. Нескольким экземплярам сервиса нужен PostgreSQL, но живое обновление по SSE получат только клиенты того экземпляра, который принял изменение.

Когда OneFlag не нужен

Если флагов несколько и меняются они раз в месяц, достаточно провайдера openfeature с JSON-файлом: тот же прикладной код, но без сервера. Переход на OneFlag позже не потребует правок, поменяется только регистрация провайдера.