Как развернуть OneCLI на своем сервере через Docker
Узнайте, как самостоятельно развернуть OneCLI с использованием Docker Compose и PostgreSQL. В статье приведены системные требования, включая лимит в 2 GiB RAM на агента.
Что вы получаете при самостоятельном развертывании OneCLI
Разверните OneCLI самостоятельно, и каждый сотрудник вашей команды получит собственного агента. Каждый агент работает в изолированной «песочнице», а API-ключи хранятся на шлюзе, к которому агенты не имеют прямого доступа. Установка представляет собой стек Docker Compose с базой данных PostgreSQL, доступной по адресу http://localhost:10254. Планируйте ресурсы для полноценного сервера. Документированное значение по умолчанию составляет 2 GiB оперативной памяти на «песочницу» агента, поэтому данная нагрузка не подходит для VPS с 1 GB памяти.
В состав стека входят семь компонентов. Понимание их назначения упрощает чтение этого руководства.
- Web dashboard (Next.js), порт
10254. Создание агентов, чат, редактирование памяти и навыков, управление подключениями и секретами. - API server, порт
10256. Панель управления: база данных, обработка диалогов, очереди задач. - Rust gateway, порт
10255. Перехватывает исходящие запросы от агентов и внедряет учетные данные. - Runner. В README этот компонент описан как инструмент, который «запускает, приостанавливает и завершает работу «песочниц» агентов. Работает только на исходящий трафик и никогда не обращается к базе данных».
- Sandbox Supervisor. В README указано, что он работает «внутри каждой «песочницы», используя независимый от поставщика интерфейс взаимодействия, что позволяет заменять среду выполнения агента».
- Channel adapter. Демон, который подключает приложение Slack, чтобы агент мог отвечать в каналах и личных сообщениях от своего имени.
- PostgreSQL. Поставляемый файл compose запускает
postgres:18-alpineс томомpgdata.
Название указывает на CLI, но продукт является сервером
OneCLI — это серверная платформа. Название отсылает к инструменту командной строки, который устанавливается на ноутбук, но это представление неверно для продукта из данного руководства. Отдельный клиент командной строки действительно существует в репозитории onecli/onecli-cli, он направляет трафик локального агента разработки через шлюз. То, что вы разворачиваете здесь, — это многопользовательское веб-приложение: система учетных записей, где первая учетная запись является владельцем экземпляра, база данных диалогов и секретов, а также исполнитель (runner), который запускает контейнеры.
Модель «один агент на человека» лежит в основе всей архитектуры. Из README: «Вы создаете агента для каждого пользователя, предоставляете каждому агенту необходимые права доступа, и он работает в изолированной среде (sandbox), трафик которой проходит через шлюз, внедряющий учетные данные и обеспечивающий соблюдение вашей политики». У каждого агента есть собственная файловая система и оболочка, собственная страница диалога, память, которую поддерживает платформа, и навыки, которые вы пишете один раз. Учетные данные работают иначе, чем в стандартных конфигурациях. Вместо копирования API key в окружение каждого пользователя, вы сохраняете ключ один раз и предоставляете доступ к нему тем агентам, которым разрешено его использовать.
Что необходимо подготовить перед началом работы
- Docker с плагином Compose версии 2.19 или новее. Файл compose использует сервис для выполнения однократных миграций, который ожидает API; эта зависимость требует версию 2.19.
- Оперативная память, которая является основным ограничивающим фактором. Ознакомьтесь с разделом о выборе конфигурации ниже, прежде чем выбирать тарифный план.
- Свободные порты loopback
10254,10255,10256и5432.
Вам не нужно устанавливать PostgreSQL самостоятельно: файл compose запускает его как сервис. Также не требуются Node.js или Rust. Они нужны только при сборке из исходного кода, где mise фиксирует версию инструментария.
Сколько песочниц агентов поместится на вашем VPS?
Документация самого раннера содержит конкретные цифры, а не приблизительные оценки. Каждая песочница получает 2048 МБ оперативной памяти (RUNNER_SANDBOX_MEMORY_MB), один процессор (RUNNER_SANDBOX_CPUS) и 512 процессов (RUNNER_SANDBOX_PIDS). Лимит параллельного выполнения составляет 4 (RUNNER_MAX_SANDBOXES), при этом документация рекомендует иметь около 10 GiB свободной памяти сверх базового стека для обеспечения этого лимита.
The data behind this chart
[
{
"plan": "2 GB box",
"ram_gb": 2,
"sandbox_slots": 0
},
{
"plan": "4 GB box",
"ram_gb": 4,
"sandbox_slots": 1
},
{
"plan": "8 GB box",
"ram_gb": 8,
"sandbox_slots": 3
},
{
"plan": "16 GB box",
"ram_gb": 16,
"sandbox_slots": 7
},
{
"plan": "32 GB box",
"ram_gb": 32,
"sandbox_slots": 15
}
]Количество слотов рассчитывается арифметически, а не на основе тестов производительности: общий объем памяти минус примерно 2 ГБ для PostgreSQL и четырех постоянно работающих сервисов, деленный на лимит песочницы в 2 GiB. Исходя из этого, план 2 GB box вмещает 0 песочниц, поэтому самый дешевый тарифный план вообще не позволяет запустить хостируемый агент. План 16 GB box оставляет место для 7 песочниц, что комфортно превышает лимит по умолчанию в четыре слота и соответствует требованию документации о наличии примерно 10 GiB свободной памяти. План 32 GB box обеспечивает 15 слотов.
Два фактора корректируют этот расчет. Песочница с запущенным фоновым процессом никогда не переходит в режим ожидания, поэтому она занимает слот постоянно. Это означает, что вы должны рассчитывать RUNNER_MAX_SANDBOXES исходя из устойчивой нагрузки, а не пиковых значений. Кроме того, память заканчивается раньше, чем процессорные ресурсы. Каждая песочница ограничена одним ядром процессора, поэтому четыре активных агента требуют четыре ядра, но четыре простаивающих, но запущенных агента всё равно занимают 8 GiB памяти.
Настройки раннера, которые вы, возможно, захотите изменить
RUNNER_MAX_SANDBOXES(по умолчанию4): сколько песочниц запускается одновременно.RUNNER_SANDBOX_MEMORY_MB(по умолчанию2048): лимит памяти на одну песочницу.RUNNER_SANDBOX_CPUS(по умолчанию1): лимит процессора на одну песочницу.RUNNER_SANDBOX_PIDS(по умолчанию512): лимит процессов на одну песочницу.RUNNER_NETWORK_INTERNAL(по умолчаниюtrue): ограничивает сеть песочницы без доступа наружу. Оставьте включенным.RUNNER_SANDBOX_NETWORK(по умолчаниюonecli-sandboxes): сеть, к которой подключаются песочницы.RUNNER_RECONCILE_SECONDS(по умолчанию60): как часто раннер синхронизирует состояние.RUNNER_ORPHAN_GRACE_SECONDS(по умолчанию3600): время, по истечении которого удаляются осиротевшие контейнеры и тома.RUNNER_AGENT_IMAGE: переопределяет образ песочницы, который в противном случае соответствуетONECLI_VERSION.
Установка OneCLI с помощью Docker Compose
В официальной документации по self-hosting приведена следующая последовательность действий. Она записывает три секрета в docker/.env рядом с файлом compose, а затем запускает стек.
git clone https://github.com/onecli/onecli.git && cd onecli/docker
cat > .env <<EOF
SECRET_ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64)
GATEWAY_INTERNAL_SECRET=$(head -c 32 /dev/urandom | base64)
BETTER_AUTH_SECRET=$(head -c 32 /dev/urandom | base64)
COMPOSE_PROFILES=runner
EOF
chmod 600 .env
docker compose up -d --waitПрочитайте этот блок перед выполнением. Маркер heredoc не взят в кавычки, поэтому ваша оболочка выполнит каждую команду head -c 32 /dev/urandom | base64 и запишет результат, а не сам текст. SECRET_ENCRYPTION_KEY — это ключ AES-256-GCM для всех секретов в базе данных. GATEWAY_INTERNAL_SECRET аутентифицирует шлюз для API. BETTER_AUTH_SECRET подписывает сессионные cookie. COMPOSE_PROFILES=runner — самая важная строка, так как сервис runner находится за профилем Compose: если её пропустить, стек запустится без ошибок, но песочница агента (agent sandbox) не будет запущена.
--wait удерживает оболочку до тех пор, пока все сервисы не сообщат о своей работоспособности, поэтому ненулевой код завершения — ваш первый сигнал о том, что что-то пошло не так. После этого проверьте, какие именно контейнеры были запущены.
docker compose ps
docker compose logs migrationsЗафиксируйте версию. ONECLI_VERSION устанавливает тег сразу для всех сервисов, и образ песочницы агента будет следовать ему, если RUNNER_AGENT_IMAGE не указывает на другое место. По состоянию на 19 августа 2026 года текущий релиз — v2.0.1, опубликованный 18 августа 2026 года. Добавьте его в тот же файл и перезапустите стек.
echo 'ONECLI_VERSION=v2.0.1' >> .env
docker compose up -d --waitТакже существует установщик curl -fsSL https://onecli.sh/install | sh, который записывает конфигурацию в ~/.onecli/.env и выполняет ту же работу. Путь с использованием Compose предпочтительнее, так как вы можете прочитать каждый файл перед запуском; его следует использовать на сервере, где уже работают другие стеки Compose. Сборка из исходного кода — третий путь, описанный как pnpm install, а затем pnpm run setup в клонированном репозитории. Этот путь в любом случае требует mise, Rust для шлюза и Docker, и он предназначен для тех, кто планирует вносить изменения в код.
Доступ к панели управления с вашего ноутбука
Все опубликованные порты в поставляемом файле compose привязаны к ${ONECLI_BIND_HOST:-127.0.0.1}. На VPS это означает, что панель управления запущена, но никто извне не может получить к ней доступ. Это стандартное и правильное поведение. Оставьте его как есть и используйте туннель:
ssh -N -L 10254:127.0.0.1:10254 you@your-serverТеперь откройте http://localhost:10254 на вашем ноутбуке. Трафик передается через SSH-соединение, поэтому панель управления не передается в открытом виде через публичный интернет, и не требуется открывать дополнительные порты в межсетевом экране.
Настройка ONECLI_BIND_HOST=0.0.0.0 публикует панель управления по обычному HTTP, а также публикует PostgreSQL вместе с ней. Если панель управления нужна нескольким пользователям, установите reverse proxy с TLS (transport layer security) перед портом 10254 и не меняйте хост привязки. Сделайте это до того, как у экземпляра появится владелец. В официальной документации прямо указана причина: «Пока вы этого не сделаете, у экземпляра нет владельца, и на доступном из сети хосте первым его станет тот, кто успеет подключиться». Если этот прокси уже обслуживает другие ваши self-hosted приложения, настройте аутентификацию через систему единого входа (SSO), чтобы скрыть панель управления за уже используемым вашей командой экраном входа. Таким образом, удаление пользователя в одном месте автоматически закроет ему доступ и к панели.
Создание первой учетной записи и предоставление ключа модели
Откройте панель управления и незамедлительно создайте учетную запись. Эта учетная запись становится владельцем инстанса, и после её создания для присоединения к системе потребуется приглашение.
Затем сохраните ключ модели до того, как создавать агента. Размещенному агенту требуется предоставленный ключ модели, и порядок действий имеет значение: сначала сохраните ключ в панели управления, затем предоставьте его агенту, и только после этого начинайте диалог. Если пропустить этап предоставления прав, песочница не запустится, что будет выглядеть как агент, который просто бездействует.
Предоставляйте права избирательно. Каждый агент получает только то, что вы ему разрешили, и шлюз принудительно применяет это ограничение к каждому запросу. Таким образом, агент, имеющий доступ к одному репозиторию, не сможет получить доступ к ключу вашего платежного провайдера. Тот же список разрешений является вашим инструментом контроля расходов. Агент, закрепленный за пользователем и имеющий доступ к любой вашей модели, означает персональный счет, поэтому стоит ознакомиться с тем, как ограничить расходы агента на вызовы моделей, прежде чем раздавать их десятками.
Как шлюз защищает ключи от агентов
Шлюз представляет собой HTTPS-прокси, написанный на Rust и работающий на порту 10255. HTTP-клиент агента настроен на работу с этим шлюзом, а сам агент использует временные учетные данные вместо реальных. Шлюз сопоставляет исходящий запрос с правами доступа агента, расшифровывает настоящий секрет, подставляет его в запрос и пересылает дальше. Секреты хранятся в PostgreSQL в зашифрованном виде с использованием AES-256-GCM (Advanced Encryption Standard, 256 бит, режим Galois/Counter Mode) и расшифровываются только в момент запроса. Каждый вызов регистрируется с указанием идентификатора агента и целевого ресурса, что создает контрольный журнал, который невозможно получить, если ключи хранятся в профилях оболочки у десяти разных пользователей.
Два механизма определяют порядок развертывания.
- Перехват HTTPS работает по принципу man-in-the-middle. Шлюз генерирует локальный центр сертификации, агент доверяет ему, а шлюз терминирует TLS-соединение агента и открывает новое соединение с вышестоящим сервисом. Именно поэтому агент, чей HTTP-клиент не доверяет центру сертификации шлюза, выдает ошибку проверки сертификата, а не ошибку аутентификации.
- Агент идентифицирует себя с помощью заголовка
Proxy-Authorization. На одном узле, где агенты и шлюз используют общую внутреннюю сеть Docker, этот заголовок не покидает пределы контролируемой вами сети. Если вы направляете агент, находящийся вне узла, на шлюз, прокси-порт должен иметь собственный TLS, так как этот заголовок является токеном доступа (bearer token).
Честный компромисс: шлюз по своей архитектуре читает каждый запрос ваших агентов в открытом виде. Это самый критически важный процесс на машине. Относитесь к хосту, на котором он запущен, соответствующим образом и ограничьте количество пользователей, имеющих право входа в систему, следуя принципу минимальных привилегий для пользователей Linux.
Почему раннеру не нужны входящие порты
Раннер работает только на исходящие соединения. Согласно документации: «он не открывает порты, доступные извне, поэтому ноутбук, домашняя лаборатория или VPC за NAT работают без входящих соединений, туннелей и настройки TLS termination». NAT — это трансляция сетевых адресов, которую выполняет домашний роутер. Раннер сам устанавливает соединение с панелью управления и забирает задачи, поэтому ничего не нужно пробрасывать или открывать.
Такая архитектура оправдывает себя в сети песочницы. Файл compose определяет вторую сеть, помеченную internal: true, что в Docker означает полное отсутствие маршрутов за пределы хоста. Песочницы подключаются к ней. Шлюз имеет интерфейсы в обеих сетях, поэтому он является единственным выходом. Документация раннера прямо указывает на это: «сеть internal со шлюзом, имеющим два интерфейса, превращает ограничение исходящего трафика через шлюз в реальную границу, а не просто рекомендацию». Агент, который решит отправить ваш исходный код на произвольный адрес, не имеет для этого маршрута.
Проверьте это на своей машине, вместо того чтобы доверять тексту выше.
docker network ls
docker network inspect onecli-sandboxes | grep -i internalВы должны увидеть "Internal": true. Если там написано false, контроль исходящего трафика отключен, и шлюз снова является лишь рекомендацией. Используйте имя сети песочницы, которое выводит docker network ls, так как onecli-sandboxes — это только значение по умолчанию.
Насколько надежна песочница OneCLI?
Читайте этот раздел внимательно, так как термин «песочница» (sandboxed) в описании проекта имеет большой вес, хотя сам механизм описан только в одном месте.
В README указано, что каждый агент получает «свою изолированную песочницу с файловой системой и оболочкой», а также упоминается Sandbox Supervisor как компонент, который «работает внутри каждой песочницы, используя независимый от поставщика интерфейс, что позволяет заменять среду выполнения агента». Ни одно из этих предложений не объясняет, из чего именно состоит изоляция. Документация runner проясняет это: бэкендом по умолчанию является Docker (RUNNER_BACKEND=docker), а песочница представляет собой Docker-контейнер с ограничениями по памяти, CPU и количеству процессов, подключенный к внутренней сети. В коде предусмотрены возможности для подключения других бэкендов, а в документации упоминаются Kubernetes и microVM как модули, которые кто-то должен реализовать. Сегодня на вашем сервере песочница — это обычный контейнер.
То, о чем документация умалчивает, имеет не меньшее значение. Модель угроз отсутствует. Нет заявлений о запуске Docker daemon в режиме rootless, о переназначении пространств имен пользователей (user namespace remapping), о профилях seccomp или AppArmor сверх стандартных настроек Docker, и нет упоминаний о границе на уровне ядра, такой как gVisor или microVM. Поэтому придерживайтесь узкой трактовки. Установленные лимиты — это лишь ограничения ресурсов. Внутренняя сеть — это реальный контроль исходящего трафика. Изоляция между агентом и хостом обеспечивается только стандартными средствами Docker-контейнера, а контейнер использует общее ядро с хостом.
Есть второй факт, который необходимо учесть. Сервис runner монтирует /var/run/docker.sock, так как именно так он создает песочницы. Доступ к Docker socket равносилен правам root на хосте, поскольку любой, кто может обращаться к этому API, способен запустить контейнер с примонтированной файловой системой хоста. Так работает любой runner на базе Docker. Следствие этого — процесс runner является таким же критичным, как и шлюз.
Считайте эту границу недоказанной, пока разработчики не задокументируют её. На практике это означает три правила:
- Запускайте OneCLI на отдельном сервере, который не выполняет других задач. Никаких сторонних рабочих сервисов, общих баз данных или данных других команд.
- Исходите из того, что агент, получивший возможность выполнения произвольного кода внутри песочницы, может выйти на хост. Сделайте так, чтобы последствия этого были обратимы за счет резервных копий, хранящихся вне этого сервера.
- Прочитайте
apps/runner/srcили спросите разработчиков, прежде чем утверждать коллегам, что агент полностью изолирован.
Чтобы понять, как выглядит задокументированная граница безопасности и какие вопросы стоит задать разработчикам, сравните это с тем, как выглядит настоящая граница песочницы агента. Разница заключается в том, описан ли механизм и что именно он не способен предотвратить.
Разделение лицензий: почему стоит проверить условия перед сборкой
Ядро OneCLI распространяется по лицензии Apache-2.0, что позволяет использовать его для self-hosting в production. Директории с именем ee/ подпадают под действие отдельной лицензии OneCLI Enterprise License: она бесплатна для разработки, тестирования и оценки, однако для использования в production требуется подписка. В примечаниях к релизу v2.0.1 от 18 августа 2026 года упоминается восстановление файла лицензии Apache-2.0, который распознается GitHub, поэтому значок на странице репозитория недавно изменился. Проверяйте тег, который вы фактически развертываете, а не сводную информацию, написанную в другую дату.
cd onecli && find . -type d -name ee -not -path '*/node_modules/*'Все, что находится по этим путям, относится к коммерческой части. Если функция, на которую вы планируете опираться, находится там, оцените стоимость перед тем, как выстраивать вокруг нее рабочий процесс.
Обновления, миграции и единственный файл, который нельзя потерять
Обновление — это переход на новую версию и перезапуск. Служба миграции запускается один раз перед API при каждом up. Если миграция завершается ошибкой, стек отказывается запускаться, чтобы не работать с частично обновленной схемой базы данных. Это правильное поведение: сбой при обновлении выглядит как простой сервиса, а не как скрытое повреждение данных, и docker compose logs migrations объясняет почему.
cd onecli/docker
docker compose pull
docker compose up -d --wait
docker compose logs migrationsЕсли вы использовали скрипт установки, запускайте его повторно вместо ручного обновления образов. Это позволит сохранить соответствие между файлом compose и используемыми образами.
Выполняйте резервное копирование двух компонентов. В PostgreSQL хранятся агенты, диалоги, память и зашифрованные секреты. Файл docker/.env содержит SECRET_ENCRYPTION_KEY. Без этого ключа зашифрованные данные невозможно прочитать, поэтому дамп базы данных сам по себе не позволит восстановить работоспособную систему.
cd onecli/docker
docker compose exec -T postgres pg_dump -U onecli onecli | gzip > ~/onecli-db.sql.gz
install -m 600 .env ~/onecli-env.backupХраните обе копии вне сервера. Процедура стандартна для любого стека Docker Compose с сохранением состояния. Если вы уже настроили резервное копирование и обновление стека Docker Compose по расписанию, добавьте эти два пути в список и забудьте о них.
Если система не работает
- Стек не переходит в состояние работоспособности, а
docker compose up -d --waitзавершается с ненулевым кодом. Сначала изучитеdocker compose logs migrations, так как API намеренно ожидает этот сервис. - Агент простаивает, а песочница не появляется. Убедитесь, что
COMPOSE_PROFILES=runnerнаходится вdocker/.env, и чтоdocker compose psотображает раннер. Затем проверьте, что агенту предоставлен ключ модели, так как без него песочницы не запускаются. - Нет свободных слотов.
RUNNER_MAX_SANDBOXESпо умолчанию равен 4, а песочница с запущенным фоновым процессом занимает свой слот постоянно.docker psпоказывает, что работает на самом деле. - Контейнеры исчезают или хост начинает тормозить. У вас закончилась оперативная память.
dmesg -T | grep -i oomфиксирует случаи принудительного завершения процессов ядром из-за нехватки памяти (OOM kill), а одна песочница может занимать до 2048 MB. - HTTPS-запросы агента завершаются ошибками проверки сертификата, а не ошибками аутентификации. HTTP-клиент агента не доверяет центру сертификации шлюза.
- Старые контейнеры или тома остаются после удаления агента. Раннер выполняет сверку каждые 60 секунд и удаляет «сирот», существующих дольше
RUNNER_ORPHAN_GRACE_SECONDS(по умолчанию 3600 секунд), поэтому подождите час, прежде чем считать это утечкой ресурсов.
Подходит ли вам это решение?
Тест на соответствие требованиям занимает мало времени. OneCLI оправдывает себя, когда нескольким пользователям нужен агент, а вы хотите хранить учетные данные в одном месте: единое хранилище для ротации, один журнал аудита для чтения и одна панель управления, где отзыв доступа для пользователя действительно его отменяет. Это реальная эксплуатационная задача, и копирование API key на шесть ноутбуков — худшее решение.
Для одного пользователя это избыточная инфраструктура, не приносящая выгоды. Вам пришлось бы запускать PostgreSQL, control plane, gateway и runner ради одного агента, а проблема управления учетными данными, которую решает gateway, практически отсутствует, если ключ есть только у вас. Вместо этого запустите один harness на менее мощном сервере: один агент harness на VPS справится с этой задачей, потребляя значительно меньше оперативной памяти. Если вы еще не определились с выбором, обзор в сравнение self-hosted AI агентов станет более экономным первым шагом.
FAQ
Каковы минимальные системные требования для самостоятельного развертывания OneCLI?
Docker с плагином Compose версии 2.19 или новее и достаточный объем оперативной памяти. PostgreSQL входит в состав файла compose, поэтому устанавливать его отдельно не нужно. Объем памяти определяет выбор тарифа: по умолчанию runner выделяет 2048 MB на каждую «песочницу» агента. Документация рекомендует иметь около 10 GiB свободной памяти сверх базового стека для обслуживания стандартного лимита в четыре «песочницы», а PostgreSQL и четыре постоянно работающих сервиса потребляют около 2 GB. Сервер с 4 GB памяти позволяет запустить только один агент одновременно. Сервер с 16 GB памяти комфортно справляется со стандартным лимитом. VPS с 1 GB или 2 GB памяти не сможет запустить агент.
Требуется ли OneCLI PostgreSQL или можно использовать SQLite?
Требуется PostgreSQL. DATABASE_URL документирована как строка подключения к PostgreSQL, поставляемый файл compose запускает postgres:18-alpine с томом pgdata, а отдельный сервис миграций применяет схему до запуска API. Опция использования SQLite не документирована. Если вы уже используете PostgreSQL в другом месте, укажите DATABASE_URL на него и сохраните сервис миграций, так как неудачная миграция останавливает стек, предотвращая работу с частично примененной схемой.
Является ли «песочница» агента OneCLI полноценным рубежом безопасности?
Документированный механизм представляет собой Docker-контейнер с ограничениями по памяти, CPU и процессам, подключенный к сети с меткой internal: true, что исключает маршруты наружу, кроме как через шлюз. Контроль исходящего трафика реален, его можно проверить с помощью docker network inspect. Изоляция хоста соответствует уровню контейнеров; разработчики не публикуют модель угроз, не заявляют о работе без прав root или использовании пространств имен пользователей (user namespaces), а также не используют границы уровня ядра, такие как gVisor или microVM. Runner также монтирует /var/run/docker.sock, что эквивалентно правам root на хосте. Считайте границу между агентом и хостом ненадежной, пока разработчики не заявят обратное; запускайте OneCLI на выделенном сервере и храните резервные копии вне этого сервера.
Нужно ли открывать входящие порты для OneCLI?
Нет. Runner работает только на исходящие соединения и не открывает порты, доступные извне, поэтому он работает за NAT без использования туннелей. Файл compose по умолчанию привязывает dashboard, gateway, API и PostgreSQL к 127.0.0.1. Получайте доступ к dashboard через SSH-туннель или установите reverse proxy с TLS перед портом 10254, если доступ нужен нескольким пользователям. Шлюз на порту 10255 предназначен для агентов, и на одном сервере эти агенты обращаются к нему через внутреннюю сеть Docker.
Можно ли использовать OneCLI бесплатно внутри компании?
Ядро проекта распространяется под лицензией Apache-2.0, самостоятельное использование в продакшене разрешено без коммерческой лицензии. Директории с именем ee/ покрываются корпоративной лицензией OneCLI Enterprise License, которая бесплатна для разработки, тестирования и оценки, но требует подписки для использования в продакшене. Разделение кода меняется от релиза к релизу, а примечания к версии v2.0.1 от 18 августа 2026 года упоминают восстановление файла лицензии Apache-2.0, который распознается GitHub. Проверяйте LICENSE и директории ee/ в конкретном теге, который вы развертываете, прежде чем строить рабочие процессы на базе какой-либо отдельной функции.