Настройка
Параметры подключения, переменные окружения и язык интерфейса.
Настройка
Реквизиты подключения elemctl берёт из переменных окружения либо из файла
.env в текущем каталоге. Переменная окружения сильнее файла.
| Переменная | Назначение |
|---|---|
ELEMENT_BASE_URL |
базовый URL платформы с http:// или https://, например https://1cmycloud.com |
ELEMENT_CLIENT_ID |
Client-Id для получения токена |
ELEMENT_CLIENT_SECRET |
Client-Secret |
ELEMENT_APP_ID |
приложение по умолчанию (необязательно) |
ELEMENT_PROJECT_ID |
проект по умолчанию (необязательно) |
ELEMENT_SPACE_ID |
пространство по умолчанию (необязательно) |
ELEMENT_CA_FILE |
дополнительный PEM-файл CA для частного облака (необязательно) |
ELEMENT_TLS_STRICT |
строгая проверка сертификатов по RFC 5280; по умолчанию true |
ELEMENT_TLS_VERIFY |
проверка сертификата и имени сервера; по умолчанию true |
Client-Id и Client-Secret выпускают в панели управления 1cmycloud, в разделе интеграций Console API. Шаблон файла – .env.example.
Настройка через .env
Скопируйте шаблон в каталог, из которого будете запускать elemctl:
cp .env.example .env
Затем заполните как минимум адрес платформы, Client-Id и Client-Secret:
ELEMENT_BASE_URL=https://1cmycloud.com
ELEMENT_CLIENT_ID=client-id
ELEMENT_CLIENT_SECRET=client-secret
Без параметра --env-file инструмент ищет файл с точным именем .env в
текущем каталоге запуска. Это не обязательно каталог проекта и не каталог,
куда установлен elemctl. В репозитории elemctl файл .env исключён из Git.
Если вы заводите такой файл в другом репозитории, добавьте .env в его
.gitignore: файл хранит секрет, и ему нечего делать ни в коммитах, ни в
журналах работы.
Если конфигурация лежит в другом месте, укажите её явно. Абсолютный путь надёжнее для MCP-сервера, фоновых запусков и CI:
elemctl --env-file /opt/elemctl/cloud.env apps list
Параметр можно ставить и после команды:
elemctl apps list --env-file /opt/elemctl/cloud.env
Относительный путь считается от текущего каталога. Несколько файлов дают работу с разными стендами, и переменные процесса при этом менять не нужно:
elemctl --env-file ./env/public-cloud.env apps list
elemctl --env-file ./env/local-cloud.env apps list
Пример конфигурации локального облака с доверенным, но устаревшим внутренним CA, который Python 3.13 отклоняет из-за строгой проверки RFC 5280:
ELEMENT_BASE_URL=https://cloud.internal.example
ELEMENT_CLIENT_ID=client-id
ELEMENT_CLIENT_SECRET=client-secret
ELEMENT_TLS_STRICT=false
Если внутренний CA уже доверен, но Python 3.13 отклоняет его с ошибкой
Basic Constraints of CA cert not marked critical, задайте
ELEMENT_TLS_STRICT=false. Проверка цепочки, срока действия, подписи и имени
сервера остаётся на месте. Выключается только строгий профиль RFC 5280 в
OpenSSL. Если есть возможность, лучше исправить или перевыпустить сам CA.
Если частного CA нет в системном хранилище, укажите
ELEMENT_CA_FILE=/path/to/internal-ca.pem. Значение
ELEMENT_TLS_VERIFY=false полностью отключает проверку сертификата и имени
сервера. Это крайняя мера и только для изолированной тестовой сети. При
отключённой проверке каждая команда печатает предупреждение в stderr, а в
stdout остаётся один ответ, так что вывод JSON по конвейеру оно не портит.
Логические значения принимаются такие: true/false, yes/no, on/off
и 1/0.
ELEMCTL_NO_PROXY решает другую задачу: направляет запрос мимо прокси окружения.
Он помогает, когда прокси не видит внутренний адрес или подменяет сертификат.
TLS-проверку сервера он не отменяет. Если прямое соединение дошло до сервера и
кончилось ошибкой CERTIFICATE_VERIFY_FAILED, настройте доверенный CA или
параметры ELEMENT_TLS_*.
В отличие от остальных переменных поведения инструмента ниже, ELEMCTL_NO_PROXY
можно задать и в .env самого стенда, рядом с реквизитами – переменная
окружения по-прежнему сильнее, если она задана. Это нужно для MCP: один
серверный процесс обслуживает несколько стендов через env_file, по одному
вызову за раз, а задать переменную окружения только для одного из них нечем.
Значение из файла действует лишь на запросы этого стенда – второй стенд,
обслуживаемый тем же процессом, облачный он или локальный, оно не затрагивает.
Уже запущенный сервер правку подхватит и без перезапуска, включая стенд по
умолчанию: кеш клиента учитывает не только env_file (а без него – свой
--env-file сервера, если он был задан при старте, а иначе .env рабочего
каталога), но и время изменения и размер файла, так что правка – скажем, эта
самая переменная – войдёт в силу на следующем же вызове к этому стенду.
Изменение, не тронувшее байты, правкой тут не считается: снимите с файла
право на чтение – кеш оставит уже собранного клиента, потому что ни время
изменения, ни размер не сдвинулись. Это про собственный elemctl mcp; объект Config, переданный серверу
напрямую приложением, которое встраивает elemctl, файла за собой не имеет и
вместо этого остаётся закреплён на весь процесс.
Поведение инструмента
ELEMCTL_LANG, ELEMCTL_NO_PLUGINS, ELEMCTL_DATA_DIR и ELEMCTL_REGISTRY_LIMIT
задаются только окружением – в .env подключения им не место. ELEMCTL_NO_PROXY – исключение, о
котором сказано выше: он читает тот же файл, что и подключение.
| Переменная | Назначение |
|---|---|
ELEMCTL_LANG |
язык сообщений и справки (ru, en); флаг --lang сильнее |
ELEMCTL_NO_PROXY |
обходить прокси окружения во всех вызовах (петлевые и приватные адреса обходятся и так); также читается из .env стенда |
ELEMCTL_NO_PLUGINS |
не искать плагины: работать только со штатными возможностями ядра |
ELEMCTL_DATA_DIR |
каталог локального реестра загрузок; по умолчанию %LOCALAPPDATA%\elemctl в Windows и $XDG_STATE_HOME/elemctl (~/.local/state/elemctl) в остальных системах |
ELEMCTL_REGISTRY_LIMIT |
сколько загрузок хранит локальный реестр загрузок; по умолчанию 1000, 0 – хранить все |
Локальный реестр загрузок
Платформа хранит коммит сборки, загруженной в существующий проект, и больше ничего о том,
откуда сборка пришла. Поэтому каждая загрузка elemctl – deploy, builds upload, probe –
ещё и дописывает строку в uploads.jsonl в каталоге данных из таблицы: ид сборки, проект,
версию, ветку, коммит, были ли в дереве незакоммиченные правки, каталог исходников, стенд,
команду и время. builds list --brief и apps get берут оттуда ветку и коммит, которые
карточка оставила пустыми, и называют источник каждого значения.
Реестр локальный. Сборки, загруженной с другой машины, из CI или версией elemctl без реестра, в нём нет, и тогда перечни показывают то, что знает платформа. Если реестр не удалось записать, это предупреждение, а не сорванная загрузка; файл можно удалить в любой момент, и уйдёт с ним только история этой машины.
Реестр хранит тысячу последних загрузок; ELEMCTL_REGISTRY_LIMIT задаёт другое число, а
0 – хранить все. Когда файл перерастёт предел на десятую часть, следующая загрузка
обрежет его до последних строк: сборки, которые проект ещё держит и на которых работают
приложения, – свежие, а необрезанный файл рос, пока машина выкатывала сборки.
Окружение CI
Своих переменных сборка не заводит, зато читает те, что CI выставляет сам. Поэтому в конвейере не нужны ни флаг версии, ни правка исходников:
| Переменная | Назначение |
|---|---|
CI_PIPELINE_IID |
номер запуска; из него берётся суффикс версии сборки, когда нет ни --build-version, ни предыдущей сборки |
GITHUB_RUN_NUMBER |
то же, второй по очереди |
BUILD_NUMBER |
то же, третий по очереди; берётся первое числовое значение |
CI_COMMIT_BRANCH |
имя ветки для манифеста, когда git в отцепленном HEAD |
CI_COMMIT_REF_NAME |
то же, второй по очереди |
GITHUB_REF_NAME |
то же, третий по очереди; значение HEAD отбрасывается, и поле остаётся пустым |
Язык
Сообщения об ошибках, прогресс и текст --help выходят на русском и английском.
JSON-результат от языка не зависит. Язык выбирается по очереди: --lang ru|en,
затем переменная ELEMCTL_LANG, затем системная локаль (LC_ALL, потом LANG),
затем русский. Флаг --lang читается до построения парсера, поэтому
elemctl --lang en --help печатает справку по-английски.