openhubпакет
Открытый хаб пакетов OneScript
Адрес пула в аргументе разбирает opm 1.7.0 и новее. Клиент постарше ответит «Пакет не найден» — ему нужен способ ниже на странице.
opm install hub.1cdevelopers.ru/admin/openhubУстановка на opm младше 1.7.0
Легаси-флоу. Клиент младше 1.7.0 адрес пула в аргументе не разбирает: пул сначала прописывают сервером пакетов, и только потом ставят через него. На 1.7.0 и новее этот раздел не нужен — хватает команды из шапки страницы.
Добавьте пул сервером пакетов в opm.cfg. Порт продублирован в «Сервер»: у opm push поле «Порт» не читается.
{
"СервераПакетов": [
{
"Имя": "admin",
"Сервер": "https://hub.1cdevelopers.ru",
"Порт": 443,
"ПутьНаСервере": "/api/v1/pools/admin/download/",
"РесурсПубликацииПакетов": "/api/v1/pools/admin/push",
"Приоритет": 1
}
]
}И ставьте пакет, указывая сервер:
opm install -m admin openhubОписание
OpenHub
Открытый хаб пакетов OneScript. Свой реестр библиотек — с каталогом, правами,
кэширующим прокси перед публичным хабом и публикацией из CI.
Работает со стоковым opm: ни плагинов, ни патчей клиенту не нужно.

Что это
opm умеет ставить пакеты с сервера — но сервер этот один на всех, и положить туда
внутреннюю библиотеку компании нельзя. OpenHub — этот самый сервер, который вы
поднимаете себе: командой или контейнером, на ноутбуке или в кластере.
Что он вам даёт:
- место для своих пакетов. Внутренние библиотеки лежат у вас, ставятся тем же
opm install, видны в каталоге с описанием и версиями; - прокси перед публичным хабом. Пакет, которого у вас нет, хаб сам скачает
с
hub.oscript.ioи оставит у себя — сборка перестаёт зависеть от чужой доступности; - порядок в доступе. Кто читает, кто публикует, кто заводит пулы — роли на пулах и пакетах, вход через ваш корпоративный SSO, токены с рамками вместо общего пароля;
- публикацию из CI без секрета в репозитории — по короткоживущему id-token, как это делает PyPI.
Стек: чистый OneScript + ОСень + winow. Внешних служб не требует: из коробки работает на файловой базе и файловом хранилище.
Попробовать за минуту
docker run -d --name openhub -p 3333:3333 \
-v openhub-data:/var/lib/openhub \
segateekb/openhub
Откройте http://localhost:3333 — хаб встретит мастером первого запуска и попросит завести администратора.
На Apple Silicon добавьте
--platform linux/amd64 -e DOTNET_EnableWriteXorExecute=0: без первого образ не скачается, без второго qemu ломает JIT .NET.
Дальше — «Как развернуть свой хаб»: установка пакетом, файл настроек, первый пользователь, первый пул и первая публикация, шаг за шагом.
Что умеет
Пулы — пространства имён хаба
Пакеты живут не «в хабе», а в конкретном пуле. Пул — это адрес, видимость, квота, права и (если нужно) внешний источник.
| Тип пула | Адрес пакета | Для чего |
|---|---|---|
| основной | /{пакет} |
общий реестр инсталляции, цель opm push по умолчанию |
| личный | /{логин}/{пакет} |
личное пространство, заводится вместе с учёткой |
| произвольный | /{пул}/{пакет} |
команда, приватный контур, зеркало чужого хаба |
Пул делается приватным целиком, закрывается для публикации не удаляясь, получает квоту места и права — пользователям и группам.

Кэширующий прокси и зеркала
Пулу задаётся упорядоченный список источников — адресов выдачи чужих хабов. Чего нет у себя, хаб берёт оттуда и оставляет в пуле: второй раз наружу он уже не пойдёт. Отдельно от этого работает зеркалирование — перенос пачкой по расписанию, чтобы пакеты лежали до того, как их спросят.
Свои публикации из пула не вытесняются никогда — место уступает только привезённое.

Теги — каналы обновления
Тег помечает набор версий, а пакет@тег отдаёт максимальную из них. Сам хаб тегов
не заводит: три обычных канала — stable (релизы), prerelease (плюс кандидаты -rc)
и develop (сборочные и нестабильные) — заводит кнопка в настройках пакета, а пул
при желании делает это новым пакетам сам. Состав тега либо набирается руками, либо
задаётся правилом по версиям — и тогда новая подходящая версия попадает под тег сама.

Вход: пароль, внешний провайдер, токены
Учётка одна, способов входа несколько. Провайдер (GitHub, GitLab, Google или любой OIDC) заводится из интерфейса пресетом — без правки конфигов и перезапуска. Группы из IdP раскладываются в группы хаба и сверяются на каждом входе. Парольный вход можно выключить целиком.
opm ходит по токену, а не по паролю: opm login --browser показывает короткий код,
вы подтверждаете вход в браузере.
📖 Как настроить вход через провайдера

Доверенная публикация из CI
То же, что в других экосистемах зовут trusted publishing: конвейер не хранит токен хаба, а предъявляет короткоживущий id-token своего провайдера. Хаб проверяет подпись и сверяет репозиторий с рефом. Утекать из секретов репозитория становится нечему.
📖 Как настроить доверенную публикацию

Каталог, карточка пакета, версии
Поиск по неточному слову, README пакета как описание, готовая команда установки с кнопкой «копировать», версии — и тегами, и плоским списком, зависимости в обе стороны, счётчик скачиваний.

Эксплуатация
Журнал аудита на каждую мутацию, пробы /health и /ready для оркестратора,
трассировка OpenTelemetry, HTTP API /api/v1 на всё, что есть в интерфейсе,
вебхуки и подписки на события.

Статьи
| Статья | О чём |
|---|---|
| Как развернуть свой хаб | от opm install openhub до первой опубликованной версии |
| Вход через провайдера | OIDC-пресеты, автозаведение учёток, группы из IdP, выключение паролей |
| Доверенная публикация | публикация из GitHub Actions и GitLab CI без долгоживущего токена |
| Кэширующий прокси | источники пула, кэш, квоты, зеркалирование по расписанию |
| Теги и каналы | визард каналов, свои каналы, правила и основной тег |
Эксплуатационная часть — сборка и запуск образа. Разработка самого хаба — docs/разработка.md.
Совместимость с opm
Хаб говорит на протоколе выдачи и публикации opm — клиент не патчится и не заменяется.
opm login hub.example.ru/public --browser # токен через подтверждение в браузере
opm build .
opm push hub.example.ru/public мойпакет-1.0.0.ospx
opm install hub.example.ru/public/мойпакет
Адресная форма команд требует opm 1.7+. Клиент постарше подключается записью
в opm.cfg — готовую запись хаб печатает прямо на странице пакета.
Беспрефиксные адреса старых хабов (/download/, /push, /dev-channel/,
/pools/{пул}/download/) — вечные алиасы: конфигурации, написанные до переезда
адресов под /api/v1, работают без правок.
Лицензия
MIT.